谢谢友情赞助~~
另外,python交流群 302984355
题目: http://www.runoob.com/python/python-100-examples.html
一:
1. 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
- # -*- coding: utf-8 -*-
- """
- Created on Thu Jul 19 19:51:08 2018
- 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
- @author: yhl
- """
-
- L=[]
- a=[1,2,3,4]
-
- #for i in range(len(a)):
-
- for val_1 in a:
- for val_2 in a:
- for val_3 in a:
- if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):
- continue;
- else:
- L.append(str(val_1)+str(val_2)+str(val_3))
-
-
- print len(L)
- print L
答案:
-
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
-
- for i in range(1,5):
- for j in range(1,5):
- for k in range(1,5):
- if( i != k ) and (i != j) and (j != k):
- print i,j,k
二:
- '''
- 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,
- 奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分
- 按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,
- 高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,
- 可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,
- 超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
- '''
-
- def fun():
- profit = 0
- I = input("please input: ")
- if(I<=10):
- profit = 0.1 * I
- elif(I <= 20):
- profit = 10 *0.1 + (I - 10)*0.075
- elif(I <=40):
- profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05
- elif(I <= 60):
- profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03
- elif(I <= 100):
- profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015
- else :
- profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01
-
- print "profit=",profit
-
- fun()
一开始写else if 有报错提示,原来python里面是elif这样写的,
-
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
-
- i = int(raw_input('净利润:'))
- arr = [1000000,600000,400000,200000,100000,0]
- rat = [0.01,0.015,0.03,0.05,0.075,0.1]
- r = 0
- for idx in range(0,6):
- if i>arr[idx]:
- r+=(i-arr[idx])*rat[idx]
- print (i-arr[idx])*rat[idx]
- i=arr[idx]
- print r
看到答案很简洁..我的写法和答案输出不一样,不知道为啥
三:
- '''
- 3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
- '''
- def fun_3_t(num):
- num_sqrt=int(math.sqrt(num))
- if(num == num_sqrt * num_sqrt):
- return 1
- else:
- return 0
-
- def fun_3():
- for i in range(1,100000000):
- print i
- num_1=i+100
- num_2=num_1+168
- flg_1=fun_3_t(num_1)
- flg_2=fun_3_t(num_2)
- if(1 == flg_1*flg_2):
- print 'find! is ',i
- break
- fun_3()
输出:21 一开始num_sqrt=int(math.sqrt(num))没有加int 结果是8 因为num_sqrt是10点多
- num=108
- num_sqrt=math.sqrt(num)
- num_squa = num_sqrt * num_sqrt
- print num,num_sqrt,num_squa
-
- 108 10.3923048454 108.0
答案:
分析
程序分析:
假设该数为 x。
1、则:x + 100 = n2, x + 100 + 168 = m2
2、计算等式:m2 – n2 = (m + n)(m – n) = 168
3、设置: m + n = i,m – n = j,i * j =168,i 和 j 至少一个是偶数
4、可得: m = (i + j) / 2, n = (i – j) / 2,i 和 j 要么都是偶数,要么都是奇数。
5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
7、接下来将 i 的所有数字循环计算即可。
- for i in range(1,85):
- if 168 % i == 0:
- j = 168 / i;
- if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :
- m = (i + j) / 2
- n = (i - j) / 2
- x = n * n - 100
- print(x)
四:
- '''
- 4: 输入某年某月某日,判断这一天是这一年的第几天?
- '''
- def fun_4(year,month,day):
- sum = 0
- month_day=[0,31,28,31,30,31,30,31,31,30,31,30,31]
- if((0 != year % 100 and 0 == year % 100) or (year % 400)):
- month_day[2] = 29
- if(day > month_day[month] or day < 1 or month > 12 or month < 1):
- print "error"
- return -1
- else:
- for n in range(1,month):
- sum += month_day[n]
- sum += day
-
- return sum
-
- print fun_4(2015,6,7)
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- '''
- 答案
- '''
- year = int(raw_input('year:\n'))
- month = int(raw_input('month:\n'))
- day = int(raw_input('day:\n'))
-
- months = (0,31,59,90,120,151,181,212,243,273,304,334)
- if 0 < month <= 12:
- sum = months[month - 1]
- else:
- print 'data error'
- sum += day
- leap = 0
- if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
- leap = 1
- if (leap == 1) and (month > 2):
- sum += 1
- print 'it is the %dth day.' % sum
五:
- '''
- 输入三个整数x,y,z,请把这三个数由小到大输出。
- '''
- def fun_5(x,y,z):
- L = []
- L.append(x)
- L.append(y)
- L.append(z)
- L.sort(reverse=True)
- print L
-
- def Bubblesort(L):
- for i in range(0,len(L)):
- for j in range(i+1,len(L)):
- if(L[i] > L[j]):
- tmp = L[i]
- L[i] = L[j]
- L[j] = tmp
- print L
-
- def fun_55(x,y,z):
- L = []
- L.append(x)
- L.append(y)
- L.append(z)
- Bubblesort(L)
-
-
- def fun_555_quick_sort(L,left,right):
- if(left >= right):
- return
- i = left
- j = right
- base = L[left]
-
- while(i != j):
-
- while(L[j] >= base and i < j):
- j -= 1
- while(L[i] <= base and i < j):
- i += 1
-
- if(i < j):
- tmp = L[i]
- L[i] = L[j]
- L[j] = tmp
- L[left] = L[i]
- L[i] = base
- fun_555_quick_sort(L,left,i-1)
- fun_555_quick_sort(L,i+1,right)
-
- L = [3,1,2]
- fun_555_quick_sort(L,0,2)
- print L
一开始全忘记了排序的算法,连冒泡算法都不记得了.然后看了下,快速排序算法是看了啊哈算法的那本书的,先用c实现了一下的:
- void quick_sort(int *a,int left,int right)
- {
- if(left >= right)
- {
- return ;
- }
-
- int key = a[left];
- int i = left;
- int j = right;
-
- while( i != j)
- {
- while(a[j] >= key && i<j)
- {
- j--;
- }
-
- while(a[i] <= key && i<j)
- {
- i++;
- }
-
- if(i < j)
- {
- int tmp = a[i];
- a[i] = a[j];
- a[j] = tmp;
- }
- }
-
- if(i == j)
- {
- a[left] = a[i];
- a[i] = key;
- }
-
- quick_sort(a,left,i-1);
- quick_sort(a,i+1,right);
-
- }
六:
- '''
- 6.斐波那契数列。
- '''
-
- def fun_6(n):
- L = [1,1]
- if(n <= 2):
- print L
- return
-
- for i in range(2,n):
- L.append(L[i-1] + L[i-2]) # L[i] = L[i-1] + L[i-2]
-
- print L
-
- fun_6(10)
一开始写成L[i] = L[i-1] + L[i-2],报错,list assignment index out of range 就是不能这么开辟新的需要用append. 另外看到答案fibs.append(fibs[-1] + fibs[-2]) 这个写法也不错
七:
- '''
- 将一个列表的数据复制到另一个列表中。
- '''
-
- def fun_7(L):
- L_cp = []
- for i in range(0,len(L)):
- L_cp.append(L[i])
- return L_cp
-
- L = [1,0,2,1,2,3,'yang']
- L_cp = fun_7(L)
- print L_cp
看到答案好简洁,b= a[:] 经过测试是深拷贝
八:
- '''
- 8:输出 9*9 乘法口诀表。
- '''
- def fun_8():
- for i in range(0,9):
- for j in range(0,i+1):
- str_1 = str(j+1)+'*'+str(i+1)+'='+str((j+1)*(i+1))
- print str_1,
- print
-
-
- fun_8()
九、十 :
- #暂停一秒输出。
- #暂停一秒输出,并格式化当前时间。
- import time
- a = [1,2,3,4,5,6,7]
-
- #for val in a:
- # print (val)
- # time.sleep(1)
-
- for i in range(10):
- print (i)
- time.sleep(1)
-
- print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
-
-
- time.sleep(1)
-
- print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
十一:
- #古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假#如兔子都不死,问每个月的兔子总数为多少?
-
- def fib(n):
- if(1 == n or 2 == n):
- return 1
- elif(n >= 2):
- return fib(n-2)+fib(n-1)
-
- print (fib(36)*2)
十二:
质数:在一般领域,对正整数n,如果用2到之间的所有整数去除,均无法整除,则n为质数。
- #判断101-200之间有多少个素数,并输出所有素数。
- import math
- def fun_12(n):
- if (n<101 or n>200):
- print ('number should be in [101,200]')
- return -1
- tmp = int(math.sqrt(n))
- for i in range(2,tmp+1):
- if(0==(n%i)):
- break
- if(tmp == i):
- return True
- else:
- return False
-
- cnt = 0
- for i in range(101,201):
- flg = fun_12(i)
- if(True == flg):
- cnt += 1
- print (i),
- print ('total is %d' %cnt)
这小小的代码还有bug,一般情况下,不会整除n,然后2,到
都没有整除的然后这个数就判定是质数了,但是121开根号就是11,
=11,if(0==(n%i)): 这个if语句满足,break退出这个时候i也已经是最后的一个了..然后满足条件就当质数了...以前在c语言写的时候用for循环,如果都不满足的时候i最后会+1退出,若正巧是最后一个比如121的11,退出i就是11,所以可以根据i ==
+1来判断,而python 这里就不行了,它不管,i正常退出就是m-1 (range(1,m)),和如果恰巧是最后一个不正常退出也是m-1这样就不好区分了
改正如下:
- #判断101-200之间有多少个素数,并输出所有素数。
- import math
- def fun_12(n):
- if (n<101 or n>200):
- print ('number should be in [101,200]')
- return -1
- tmp = int(math.sqrt(n))
- flg = False
- for i in range(2,tmp+1):
- if(0==(n%i)):
- flg = True
- break
- if(True == flg):
- return False
- else:
- return True
-
- cnt = 0
- for i in range(101,201):
- flg = fun_12(i)
- if(True == flg):
- cnt += 1
- print (i),
- print ('total is %d' %cnt)
十三:
- #打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一#
- #个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
-
- def fun_12(m):
- n = m
- if(n<100 or n>999):
- print ('num should be in [100,999] ')
- return -1
- n1 = n%10
- L=[]
- while(0 != n):
- tmp = n%10
- L.append(tmp)
- n = int(n/10)
- a = L[0]
- b = L[1]
- c = L[2]
- if(a*a*a+b*b*b+c*c*c == m):
- return True
- else:
- return False
-
- for i in range(100,1000):
- if(True == fun_12(i)):
- print (i),
- #看到比较好的答案:
- for x in range(1,10):
- for y in range(0,10):
- for z in range(0,10):
- s1=x*100+y*10+z
- s2=pow(x,3)+pow(y,3)+pow(z,3)
- if s1==s2:
- print "水仙花数有:%7ld" %(s1)
-
- for i in range(100, 1000):
- s = str(i)
- if int(s[0]) ** 3 + int(s[1]) ** 3 + int(s[2]) ** 3 == i:
- print(i)
十四:
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
这个题目卡了好几天,一是由于工作忙,二是分解质因数好像本身就是不太懂,然后看到百度百科上面的分解质因数的C代码,如下:
- #include <iostream>
- using namespace std;
- int main()
- {
- int n, n2;
- cin >> n;
- cout << n << "=";
- n2 = n;
- if(n<2) return 0;
- for(int i = 2;i*i<=n2;i++)
- {
- while(n2%i==0)
- {
- n2=n2/i;
- cout << i ;
- if(n2!=1)cout << "*";
- }
- }
- if(n2!=1) cout<<n2;
- return 0;
- }
自己多看看,反正好绕,但是是正确的.然后仿着写的python如下:
- def fun_14(n):
- print (n),
- print ("="),
- n2 = n
- if(n<2):
- return -1
- tmp = 2
-
- while(tmp * tmp <= n2):
- while(0 == n2%tmp):
- n2 = n2/tmp
- print tmp,
- if(1 != n2):
- print ("*"),
- tmp +=1
-
- if(1 != n2):
- print n2
-
- fun_14(90)
十五:
- '''
- 15:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
- '''
- def fun_15(score):
- if(score >= 90):
- print ('A')
- elif(score>=60 and score<=89):
- print('B')
- else:
- print('C')
-
- fun_15(90)
十六:
以下直接是答案:
- import datetime
-
- if __name__ == '__main__':
-
- # 输出今日日期,格式为 dd/mm/yyyy。更多选项可以查看 strftime() 方法
- print(datetime.date.today().strftime('%d/%m/%Y'))
-
- # 创建日期对象
- miyazakiBirthDate = datetime.date(1941, 1, 5)
-
- print(miyazakiBirthDate.strftime('%d/%m/%Y'))
-
- # 日期算术运算
- miyazakiBirthNextDay = miyazakiBirthDate + datetime.timedelta(days=1)
-
- print(miyazakiBirthNextDay.strftime('%d/%m/%Y'))
-
- # 日期替换
- miyazakiFirstBirthday = miyazakiBirthDate.replace(year=miyazakiBirthDate.year + 1)
-
- print(miyazakiFirstBirthday.strftime('%d/%m/%Y'))
- '''
- 打印结果如下:
- 15/08/2018
- 05/01/1941
- 06/01/1941
- 05/01/1942
- '''
十七:
- '''
- 16:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- '''
- def def_16(L):
- num_alpha=0
- num_space=0
- num_digit=0
- num_other=0
- for val in L:
- if(val.isalpha()):
- num_alpha += 1
- elif(val.isspace()):
- num_space += 1
- elif(val.isdigit()):
- num_digit += 1
- else:
- num_other += 1
- print 'alpha = %d, space = %d, digit = %d' %(num_alpha,num_space,num_digit)
- str = "0123456789 yang hai lin "
- def_16(str)
十八:
- '''
- 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
- '''
-
- def fun_18(a,num):
- sum = 0
- for i in range(1,num+1):
- b = 0
- for j in range(1,i+1):
- b += a * (10 ** (j-1))
- if(i != num):
- print ('%d+') %b,
- else:
- print b,
- sum += b
- print '= %d' %sum
-
- fun_18(5,9)
- # 打印:5+ 55+ 555+ 5555+ 55555+ 555555+ 5555555+ 55555555+ 555555555 = 617283945
答案用了高级的 reduce lambda:
- Tn = 0
- Sn = []
- n = int(raw_input('n = '))
- a = int(raw_input('a = '))
- for count in range(n):
- Tn = Tn + a
- a = a * 10
- Sn.append(Tn)
- print Tn
-
- Sn = reduce(lambda x,y : x + y,Sn)
- print "计算和为:",Sn
python的reduce()函数:https://www.cnblogs.com/XXCXY/p/5180245.html
https://www.cnblogs.com/lonkiss/p/understanding-python-reduce-function.html
十九:
- '''
- 19:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
- '''
-
- def fun_19():
- for i in range(1,1001):
- L_yinzi = []
- for j in range(1,i):
- if(i % j == 0):
- L_yinzi.append(j)
- # sum = 0
- # if(0 != len(L_yinzi)):
- # sum = reduce(lambda x,y : x+y,L_yinzi)
- # if (i == sum):
- # print i,
- sum_ = sum(L_yinzi)
- if(sum_ == i):
- print sum_,
-
-
- fun_19()
- #打印:6 28 496
用了之前的reduce求和方法,list也自带sum求和
注意报错: IndentationError: unindent does not match any outer indentation level 这个是缩进报错
二十:
- '''
- 20. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
- '''
-
- def fun10_1():
- L=[100]
- h = 100.0
- for i in range(1,10):
- L.append(h)
- h = h*1.0/2.0
- sum_h = sum(L)
-
- rh =50
- for i in range(1,10):
- rh = rh/2.0
-
- print sum_h,rh
-
- fun10_1()
- #打印 299.609375 0.09765625
二十一:
- '''
- 21:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
- 又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
- 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再
- 吃时,见只剩下一个桃子了。求第一天共摘了多少。
- '''
- def fun21():
- remain =1
-
- for i in range(0,9):
- remain = 2 * (1 + remain)
-
- print remain
二十二:
- '''
- 22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
- 已抽签决定比赛名单。有人向队员打听比赛的名单。
- a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
- '''
- def fun_22():
- a = [1,2]
- b = [0,1,2]
- c = [1]
-
- for val_a in a:
- for val_b in b:
- for val_c in c:
- if(val_a != val_b and val_a!=val_c and val_b!=val_c):
- print val_a,val_b,val_c
- fun_22()
二十三:
- '''
- 23:打印如下样式:
- *
- ***
- *****
- *******
- *****
- ***
- *
- '''
-
- def fun_23():
- for i in range(0,7):
- if(i<=3):
- j = i
- else:
- j = 6-i
- num_blank = 3 -j
- num_obj = 2 * j + 1
- for b in range(0,num_blank):
- print ' ',
- for obj in range(0,num_obj):
- print '*',
- print
- fun_23()
- #打印如下:
- *
- * * *
- * * * * *
- * * * * * * *
- * * * * *
- * * *
- *
-
-
- #这个答案不错哦: 可以自由输入菱形的腰长,自定义大小,如果不输入值,
- #直接回车即是默认的如题目示例那样的图形
- def paintlx(l):
- for i in range(l / 2):
- print ' ' * (l / 2 - i) + '*' * (i * 2 + 1)
- print '*' * l
- for i in range(l / 2 - 1, -1, -1):
- print ' ' * (l / 2 - i) + '*' * (i * 2 + 1)
- while True:
- l = raw_input('请输入菱形腰长(奇数),默认为7:')
- if l == '':
- l = 7
- paintlx(int(l))
- break
- elif int(l) % 2 == 0:
- print '说了是奇数!'
- else:
- paintlx(int(l))
- break
-
二十四:
- '''
- 24:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
- '''
-
- def fun_24(n,m,L):
- L.append(n)
- L.append(m)
- for i in range(0,18):
- s = n + m
- n = m
- m = s
- L.append(s)
-
- L1=[]
- L2=[]
- fun_24(1,2,L1)
- fun_24(2,3,L2)
- #print L1
- #print L2
- sum = 0
- for i in range(0,20):
- item = (L2[i]*1.0)/(1.0*L1[i]*1.0)
- sum += item
-
- print 'sum=%d' %sum
- #打印 sum=32 这里有点问题,答案输出32后面还有小数 我这里没有,不知道为啥
二十五:
- '''
- 25:求1+2!+3!+...+20!的和。
- '''
- def fun_25_jiechen(num):
- if(1 == num):
- return 1
- s = 1
- for i in range(1,num+1):
- s *= i
- return s
-
-
- def fun_25():
- s = 0
- for i in range(1,21):
- s += fun_25_jiechen(i)
- print s
-
- fun_25()
- #打印 2561327494111820313
二十六:
- '''
- 26: 利用递归方法求5!。
- '''
- def fun_25(n):
- if(1 == n):
- return 1
- return (fun_25(n-1)*n)
-
- m = fun_25(5)
- print m #120
-
- #答案
-
- def fact(j):
- sum = 0
- if j == 0:
- sum = 1
- else:
- sum = j * fact(j - 1)
- return sum
-
- print fact(5)
二十八:
- #有5个人坐在一起,问第五个人多少岁?
- #他说比第4个人大2岁。
- #问第4个人岁数,他说比第3个人大2岁。
- #问第三个人,又说比第2人大两岁。
- #问第2个人,说比第一个人大两岁。
- #最后问第一个人,他说是10岁。请问第五个人多大?
- def fun(n):
- if(1 == n):
- return 10
- return 2+fun(n-1)
-
- print (fun(5))
- # 18
二十九:
- '''
- 29: 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
- '''
- def fun_29(n):
- l=str(n)
- len_str = len(l)
- l_str = l[::-1]
- print "len:%d nixustr:%s" %(len_str,l_str)
-
- fun_29(1012)
- # len:4 nixustr:2101
然后又写了一个不用库函数的:这个加了一个标志位Flg_comein 就是当数字中有0的时候那个if语句是存不为0的时候,因为一开始比如329与10000除所以前面都是0,不需要进if语句,但是当数字中有0的时候还是需要的,所以加一个标志位,进去之后就不需要看是否是0了
- def fun_29_1(n):
- m5 = n/10000
- m55 = n%10000
- t=10000
- L=[]
- Flg_comein = False
- while(0 != t):
- m = n / t
- if(0 != m or Flg_comein):
- Flg_comein = True
- L.append(m)
- n %= t
- t /= 10
-
- print L
- print "1::len=%d,inverted=%s"%(len(L),list(reversed(L)))
- print "2::len=%d,inverted=%s"%(len(L),L[::-1])
-
- fun_29_1(12307)
- #[1, 2, 3, 0, 7]
- #1::len=5,inverted=[7, 0, 3, 2, 1]
- #2::len=5,inverted=[7, 0, 3, 2, 1]
- 注意这里面两种反序列表的方法:
- LL = list(reversed(L))
- LL = L[::-1]
-
- 看了答案,感觉下面的这个也蛮好:
-
- print( '请输入大于10的数字:' )
- n=input()
- x=[]
- i=0;
- while(n!=0):
- x.append(n%10)
- i+=1
- n/=10
- print( '该数有 %d 位\n' %i )
- print( '逆序为:\n')
- print( x[::] )
三十:
- '''
- 30:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
- '''
- def fun_30(n):
- my_str = str(n)
- if(5 != len(my_str)):
- print "num size should be 5\n"
- return
- n_wan = n / 10000
- n_qian = n % 10000 / 1000
- n_shi = n / 10 % 10
- n_ge = n % 10
-
- print "wan:%d, qian:%d, shi:%d, ge:%d"%(n_wan,n_qian,n_shi,n_ge)
- if(n_wan == n_ge and n_shi == n_qian):
- print "is huiqenshu"
- else:
- print "not huiwenshu"
-
- fun_30(12321)
- #wan:1, qian:2, shi:2, ge:1
- #is huiqenshu
- #答案:
- (1):
- a = input("输入一串数字: ")
- b = a[::-1]
- if a == b:
- print("%s 是回文"% a)
- else:
- print("%s 不是回文"% a)
- (2):
- a = input("请输入一个数字:")
- b=list(a)
- m=1
- for i in range(len(a)//2):
- if a[i]!=a[-1-i]:
- print("不是")
- m=0
- break
- if m:
- print("是")
三十一:
- '''
- 31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
- Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday
- '''
- def fun_31():
- letter1 = raw_input("please enter a latter(only one):")
- letter1 = letter1.lower()
- print letter1
- if(letter1 == 'm'):
- print "is Monday!"
- elif(letter1 == 'w'):
- print "is wednesday!"
- elif(letter1 == 'f'):
- print "is friday!"
- elif(letter1 == 't'):
- letter2 = raw_input("please enter a latter again:")
- letter2 = letter2.lower()
- if(letter2 == 'u'):
- print "is Tuesday!"
- elif(letter2 == 'h'):
- print "is thursday!"
- elif(letter1 == 's'):
- letter2 = raw_input("please enter a latter again:")
- letter2 = letter2.lower()
- if(letter2 == 'a'):
- print "is saturday!"
- elif(letter2 == 'u'):
- print "is sunday!"
- fun_31()
- #please enter a latter(only one):S
- #s
- #please enter a latter again:U
- #is sunday!
好的答案:
- weeklist = {'M': 'Monday','T': {'u': 'Tuesday','h':'Thursday'}, 'W': 'Wednesday', 'F':'Friday','S':{'a':'Saturday','u':'Sunday'}}
- sLetter1 = input("请输入首字母:")
- sLetter1 = sLetter1.upper()
-
- if (sLetter1 in ['T','S']):
- sLetter2 = input("请输入第二个字母:")
- print(weeklist[sLetter1][sLetter2])
- else:
- print(weeklist[sLetter1])
三十二:
- '''
- 32:按相反的顺序输出列表的值。
- '''
- def fun_32(L):
- for i in range(0,len(L)):
- sub_l = L[len(L) - 1 - i]
- print sub_l,
-
- LLLLL= [0,1,2,3,4,5,6,7,8,9]
- fun_32(LLLLL)
- print
- print LLLLL[-1::-1]
- #9 8 7 6 5 4 3 2 1 0
- #[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
答案:
- (1):
- a = ['one', 'two', 'three']
- for i in a[::-1]:
- print i
-
- (2):
- a=list(s)
- print a[-1::-1]
- (3):
- list_ = ['a', 'b', 'c', 'd']
- list_.reverse()
- print( list_ )
- (4):
- numbers=list(range(1,10))
- reversed_list=[]
- for i in range(1,10):
- reversed_list.append(numbers.pop())
- print(reversed_list)
三十三:
- '''
- 33:按逗号分隔列表。
- '''
- def fun_33():
- L=[1,2,3,4,5,6,7,8,9]
- for i in range(0,len(L)):
- if(i != len(L)-1):
- print "%d,"%(L[i]),
- else :
- print L[i]
- fun_33()
- # 1, 2, 3, 4, 5, 6, 7, 8, 9
看了答案,用join不错哦。注意join参数需要是string型的,int型的会报错
- L = [1,2,3,4,5]
- s1 = ','.join(str(n) for n in L)
- print s1
三十四:
- '''
- 34:练习函数调用
- '''
- def hello_world():
- print "hello world!"
-
- def three_hello():
- for i in range(0,3):
- hello_world()
-
- if __name__ == '__main__':
- three_hello()
三十五:
题目不太懂,跑答案也没有输出颜色效果,答案如下:
- '''
- 35:文本颜色设置。
- '''
- class bcolors:
- HEADER = '\033[95m'
- OKBLUE = '\033[94m'
- OKGREEN = '\033[92m'
- WARNING = '\033[93m'
- FAIL = '\033[91m'
- ENDC = '\033[0m'
- BOLD = '\033[1m'
- UNDERLINE = '\033[4m'
- print bcolors.WARNING + "警告的颜色字体?" + bcolors.ENDC
三十六:
- '''
- 36:求100之内的素数。
- '''
- import math
- def fun_sushu(n):
- num_sqrt = int(math.sqrt(n))
- flg = False
- for i in range(2,num_sqrt+1):
- tmp = n % i
- if(0 == tmp):
- flg = True
- break
-
- if(True == flg):
- return False
- else:
- return True
-
- def fun_36():
- for i in range(2,101):
- if(True == fun_sushu(i)):
- print i,
-
- fun_36()
-
- #2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
三十七:
- '''
- 37:对10个数进行排序。
- '''
- def fun_37(L):
- for i in range(0,len(L)):
- for j in range(i+1,len(L)):
- if(L[i] >= L[j]):
- t = L[i]
- L[i] = L[j]
- L[j] = t
- print "fun::L",
- print L
- L = [2,1,3,9,7,8,0,4]
-
- fun_37(L)
- print "src::L",L
- #fun::L [0, 1, 2, 3, 4, 7, 8, 9]
- #src::L [0, 1, 2, 3, 4, 7, 8, 9]
想的最快的就是这个了,这叫冒泡排序?好像是的。看输出,说明python里面的函数调用是引用传递,会改变实参的值。之前的快排呢,当时还记得很溜的呢?
三十八:
- '''
- 38: 求一个3*3矩阵主对角线元素之和。
- '''
- def fun_38():
- matrix=[[1,2,3],[4,5,6],[7,8,9]]
- #print matrix
- sum=0
- for i in range(0,3):
- print matrix[i][i]
- sum += matrix[i][i]
- print sum
- fun_38()
一开始不知道python里面多重数组怎么表示,看了答案
- if __name__ == '__main__':
- a = []
- sum = 0.0
- for i in range(3):
- a.append([])
- for j in range(3):
- a[i].append(float(raw_input("input num:\n")))
- for i in range(3):
- sum += a[i][i]
- print sum
用元组字典来做的答案:
- A = {}
- for i in range(3):
- for j in range(3):
- A[i,j] = int(input('Enter a number:'))
-
- diag = []
- for m in A.keys():
- if m[0] == m[1]:
- diag.append(A[m])
- print(sum(diag))
三十九:
主要考虑了在中间和头尾两个地方
- '''
- 39:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
- '''
- def fun_39(L,num):
- flg =True
- if(L[0] < L[len(L)-1]):
- flg = True
- else:
- flg = False
-
- if(flg):
- if(num <= L[0]):
- L.insert(0,num)
- return
- elif(num >= L[len(L)-1]):
- L.insert(len(L),num)
- return
- else:
- if(num >= L[0]):
- L.insert(0,num)
- return
- elif(num <= L[len(L)-1]):
- L.insert(len(L),num)
- return
-
-
-
- for i in range(0,len(L)-1):
- if((num >= L[i] and num <= L[i+1]) or (num >= L[i+1] and num <= L[i])):
- L.insert(i+1,num)
- break
-
- L = [1,2,3,4]
- fun_39(L,5)
- print L
- #[1, 2, 3, 4, 5]
小弟不才,同时谢谢友情赞助: