打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[PYTHON]python编程100例

题目: http://www.runoob.com/python/python-100-examples.html

一:

1. 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

  1. # -*- coding: utf-8 -*-
  2. '''
  3. Created on Thu Jul 19 19:51:08 2018
  4. 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
  5. @author: yhl
  6. '''
  7. L=[]
  8. a=[1,2,3,4]
  9. #for i in range(len(a)):
  10. for val_1 in a:
  11. for val_2 in a:
  12. for val_3 in a:
  13. if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):
  14. continue;
  15. else:
  16. L.append(str(val_1)+str(val_2)+str(val_3))
  17. print len(L)
  18. print L

答案:

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. for i in range(1,5):
  4. for j in range(1,5):
  5. for k in range(1,5):
  6. if( i != k ) and (i != j) and (j != k):
  7. print i,j,k

二:

  1. '''
  2. 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,
  3. 奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分
  4. 按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,
  5. 高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,
  6. 可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,
  7. 超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
  8. '''
  9. def fun():
  10. profit = 0
  11. I = input('please input: ')
  12. if(I<=10):
  13. profit = 0.1 * I
  14. elif(I <= 20):
  15. profit = 10 *0.1 + (I - 10)*0.075
  16. elif(I <=40):
  17. profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05
  18. elif(I <= 60):
  19. profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03
  20. elif(I <= 100):
  21. profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015
  22. else :
  23. profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01
  24. print 'profit=',profit
  25. fun()

一开始写else if 有报错提示,原来python里面是elif这样写的,

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. i = int(raw_input('净利润:'))
  4. arr = [1000000,600000,400000,200000,100000,0]
  5. rat = [0.01,0.015,0.03,0.05,0.075,0.1]
  6. r = 0
  7. for idx in range(0,6):
  8. if i>arr[idx]:
  9. r+=(i-arr[idx])*rat[idx]
  10. print (i-arr[idx])*rat[idx]
  11. i=arr[idx]
  12. print r

看到答案很简洁..我的写法和答案输出不一样,不知道为啥

三:

  1. '''
  2. 3:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  3. '''
  4. def fun_3_t(num):
  5. num_sqrt=int(math.sqrt(num))
  6. if(num == num_sqrt * num_sqrt):
  7. return 1
  8. else:
  9. return 0
  10. def fun_3():
  11. for i in range(1,100000000):
  12. print i
  13. num_1=i+100
  14. num_2=num_1+168
  15. flg_1=fun_3_t(num_1)
  16. flg_2=fun_3_t(num_2)
  17. if(1 == flg_1*flg_2):
  18. print 'find! is ',i
  19. break
  20. fun_3()

输出:21 一开始num_sqrt=int(math.sqrt(num))没有加int 结果是8 因为num_sqrt是10点多

  1. num=108
  2. num_sqrt=math.sqrt(num)
  3. num_squa = num_sqrt * num_sqrt
  4. print num,num_sqrt,num_squa
  5. 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 的所有数字循环计算即可。

  1. for i in range(1,85):
  2. if 168 % i == 0:
  3. j = 168 / i;
  4. if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :
  5. m = (i + j) / 2
  6. n = (i - j) / 2
  7. x = n * n - 100
  8. print(x)

四:

  1. '''
  2. 4: 输入某年某月某日,判断这一天是这一年的第几天?
  3. '''
  4. def fun_4(year,month,day):
  5. sum = 0
  6. month_day=[0,31,28,31,30,31,30,31,31,30,31,30,31]
  7. if((0 != year % 100 and 0 == year % 100) or (year % 400)):
  8. month_day[2] = 29
  9. if(day > month_day[month] or day < 1 or month > 12 or month < 1):
  10. print 'error'
  11. return -1
  12. else:
  13. for n in range(1,month):
  14. sum += month_day[n]
  15. sum += day
  16. return sum
  17. print fun_4(2015,6,7)
  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. '''
  4. 答案
  5. '''
  6. year = int(raw_input('year:\n'))
  7. month = int(raw_input('month:\n'))
  8. day = int(raw_input('day:\n'))
  9. months = (0,31,59,90,120,151,181,212,243,273,304,334)
  10. if 0 < month <= 12:
  11. sum = months[month - 1]
  12. else:
  13. print 'data error'
  14. sum += day
  15. leap = 0
  16. if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)):
  17. leap = 1
  18. if (leap == 1) and (month > 2):
  19. sum += 1
  20. print 'it is the %dth day.' % sum

五:

  1. '''
  2. 输入三个整数x,y,z,请把这三个数由小到大输出。
  3. '''
  4. def fun_5(x,y,z):
  5. L = []
  6. L.append(x)
  7. L.append(y)
  8. L.append(z)
  9. L.sort(reverse=True)
  10. print L
  11. def Bubblesort(L):
  12. for i in range(0,len(L)):
  13. for j in range(i+1,len(L)):
  14. if(L[i] > L[j]):
  15. tmp = L[i]
  16. L[i] = L[j]
  17. L[j] = tmp
  18. print L
  19. def fun_55(x,y,z):
  20. L = []
  21. L.append(x)
  22. L.append(y)
  23. L.append(z)
  24. Bubblesort(L)
  25. def fun_555_quick_sort(L,left,right):
  26. if(left >= right):
  27. return
  28. i = left
  29. j = right
  30. base = L[left]
  31. while(i != j):
  32. while(L[j] >= base and i < j):
  33. j -= 1
  34. while(L[i] <= base and i < j):
  35. i += 1
  36. if(i < j):
  37. tmp = L[i]
  38. L[i] = L[j]
  39. L[j] = tmp
  40. L[left] = L[i]
  41. L[i] = base
  42. fun_555_quick_sort(L,left,i-1)
  43. fun_555_quick_sort(L,i+1,right)
  44. L = [3,1,2]
  45. fun_555_quick_sort(L,0,2)
  46. print L

一开始全忘记了排序的算法,连冒泡算法都不记得了.然后看了下,快速排序算法是看了啊哈算法的那本书的,先用c实现了一下的:

  1. void quick_sort(int *a,int left,int right)
  2. {
  3. if(left >= right)
  4. {
  5. return ;
  6. }
  7. int key = a[left];
  8. int i = left;
  9. int j = right;
  10. while( i != j)
  11. {
  12. while(a[j] >= key && i<j)
  13. {
  14. j--;
  15. }
  16. while(a[i] <= key && i<j)
  17. {
  18. i++;
  19. }
  20. if(i < j)
  21. {
  22. int tmp = a[i];
  23. a[i] = a[j];
  24. a[j] = tmp;
  25. }
  26. }
  27. if(i == j)
  28. {
  29. a[left] = a[i];
  30. a[i] = key;
  31. }
  32. quick_sort(a,left,i-1);
  33. quick_sort(a,i+1,right);
  34. }

六:

  1. '''
  2. 6.斐波那契数列。
  3. '''
  4. def fun_6(n):
  5. L = [1,1]
  6. if(n <= 2):
  7. print L
  8. return
  9. for i in range(2,n):
  10. L.append(L[i-1] + L[i-2]) # L[i] = L[i-1] + L[i-2]
  11. print L
  12. fun_6(10)

一开始写成L[i] = L[i-1] + L[i-2],报错,list assignment index out of range 就是不能这么开辟新的需要用append. 另外看到答案fibs.append(fibs[-1] + fibs[-2])  这个写法也不错

七:

  1. '''
  2. 将一个列表的数据复制到另一个列表中。
  3. '''
  4. def fun_7(L):
  5. L_cp = []
  6. for i in range(0,len(L)):
  7. L_cp.append(L[i])
  8. return L_cp
  9. L = [1,0,2,1,2,3,'yang']
  10. L_cp = fun_7(L)
  11. print L_cp

看到答案好简洁,b= a[:] 经过测试是深拷贝

八:

  1. '''
  2. 8:输出 9*9 乘法口诀表。
  3. '''
  4. def fun_8():
  5. for i in range(0,9):
  6. for j in range(0,i+1):
  7. str_1 = str(j+1)+'*'+str(i+1)+'='+str((j+1)*(i+1))
  8. print str_1,
  9. print
  10. fun_8()

九、十 :

  1. #暂停一秒输出。
  2. #暂停一秒输出,并格式化当前时间。
  3. import time
  4. a = [1,2,3,4,5,6,7]
  5. #for val in a:
  6. # print (val)
  7. # time.sleep(1)
  8. for i in range(10):
  9. print (i)
  10. time.sleep(1)
  11. print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
  12. time.sleep(1)
  13. print (time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

十一:

  1. #古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假#如兔子都不死,问每个月的兔子总数为多少?
  2. def fib(n):
  3. if(1 == n or 2 == n):
  4. return 1
  5. elif(n >= 2):
  6. return fib(n-2)+fib(n-1)
  7. print (fib(36)*2)

十二:

质数:在一般领域,对正整数n,如果用2到

之间的所有整数去除,均无法整除,则n为质数。

  1. #判断101-200之间有多少个素数,并输出所有素数。
  2. import math
  3. def fun_12(n):
  4. if (n<101 or n>200):
  5. print ('number should be in [101,200]')
  6. return -1
  7. tmp = int(math.sqrt(n))
  8. for i in range(2,tmp+1):
  9. if(0==(n%i)):
  10. break
  11. if(tmp == i):
  12. return True
  13. else:
  14. return False
  15. cnt = 0
  16. for i in range(101,201):
  17. flg = fun_12(i)
  18. if(True == flg):
  19. cnt += 1
  20. print (i),
  21. 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这样就不好区分了

改正如下:

  1. #判断101-200之间有多少个素数,并输出所有素数。
  2. import math
  3. def fun_12(n):
  4. if (n<101 or n>200):
  5. print ('number should be in [101,200]')
  6. return -1
  7. tmp = int(math.sqrt(n))
  8. flg = False
  9. for i in range(2,tmp+1):
  10. if(0==(n%i)):
  11. flg = True
  12. break
  13. if(True == flg):
  14. return False
  15. else:
  16. return True
  17. cnt = 0
  18. for i in range(101,201):
  19. flg = fun_12(i)
  20. if(True == flg):
  21. cnt += 1
  22. print (i),
  23. print ('total is %d' %cnt)

十三:

  1. #打印出所有的'水仙花数',所谓'水仙花数'是指一个三位数,其各位数字立方和等于该数本身。例如:153是一#
  2. #个'水仙花数',因为153=1的三次方+5的三次方+3的三次方。
  3. def fun_12(m):
  4. n = m
  5. if(n<100 or n>999):
  6. print ('num should be in [100,999] ')
  7. return -1
  8. n1 = n%10
  9. L=[]
  10. while(0 != n):
  11. tmp = n%10
  12. L.append(tmp)
  13. n = int(n/10)
  14. a = L[0]
  15. b = L[1]
  16. c = L[2]
  17. if(a*a*a+b*b*b+c*c*c == m):
  18. return True
  19. else:
  20. return False
  21. for i in range(100,1000):
  22. if(True == fun_12(i)):
  23. print (i),
  1. #看到比较好的答案:
  2. for x in range(1,10):
  3. for y in range(0,10):
  4. for z in range(0,10):
  5. s1=x*100+y*10+z
  6. s2=pow(x,3)+pow(y,3)+pow(z,3)
  7. if s1==s2:
  8. print '水仙花数有:%7ld' %(s1)
  9. for i in range(100, 1000):
  10. s = str(i)
  11. if int(s[0]) ** 3 + int(s[1]) ** 3 + int(s[2]) ** 3 == i:
  12. print(i)

十四:

将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

这个题目卡了好几天,一是由于工作忙,二是分解质因数好像本身就是不太懂,然后看到百度百科上面的分解质因数的C代码,如下:

  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int n, n2;
  6. cin >> n;
  7. cout << n << '=';
  8. n2 = n;
  9. if(n<2) return 0;
  10. for(int i = 2;i*i<=n2;i++)
  11. {
  12. while(n2%i==0)
  13. {
  14. n2=n2/i;
  15. cout << i ;
  16. if(n2!=1)cout << '*';
  17. }
  18. }
  19. if(n2!=1) cout<<n2;
  20. return 0;
  21. }

自己多看看,反正好绕,但是是正确的.然后仿着写的python如下:

  1. def fun_14(n):
  2. print (n),
  3. print ('='),
  4. n2 = n
  5. if(n<2):
  6. return -1
  7. tmp = 2
  8. while(tmp * tmp <= n2):
  9. while(0 == n2%tmp):
  10. n2 = n2/tmp
  11. print tmp,
  12. if(1 != n2):
  13. print ('*'),
  14. tmp +=1
  15. if(1 != n2):
  16. print n2
  17. fun_14(90)

十五:

  1. '''
  2. 15:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
  3. '''
  4. def fun_15(score):
  5. if(score >= 90):
  6. print ('A')
  7. elif(score>=60 and score<=89):
  8. print('B')
  9. else:
  10. print('C')
  11. fun_15(90)

十六:

以下直接是答案:

  1. import datetime
  2. if __name__ == '__main__':
  3. # 输出今日日期,格式为 dd/mm/yyyy。更多选项可以查看 strftime() 方法
  4. print(datetime.date.today().strftime('%d/%m/%Y'))
  5. # 创建日期对象
  6. miyazakiBirthDate = datetime.date(1941, 1, 5)
  7. print(miyazakiBirthDate.strftime('%d/%m/%Y'))
  8. # 日期算术运算
  9. miyazakiBirthNextDay = miyazakiBirthDate + datetime.timedelta(days=1)
  10. print(miyazakiBirthNextDay.strftime('%d/%m/%Y'))
  11. # 日期替换
  12. miyazakiFirstBirthday = miyazakiBirthDate.replace(year=miyazakiBirthDate.year + 1)
  13. print(miyazakiFirstBirthday.strftime('%d/%m/%Y'))
  14. '''
  15. 打印结果如下:
  16. 15/08/2018
  17. 05/01/1941
  18. 06/01/1941
  19. 05/01/1942
  20. '''

十七:

  1. '''
  2. 16:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
  3. '''
  4. def def_16(L):
  5. num_alpha=0
  6. num_space=0
  7. num_digit=0
  8. num_other=0
  9. for val in L:
  10. if(val.isalpha()):
  11. num_alpha += 1
  12. elif(val.isspace()):
  13. num_space += 1
  14. elif(val.isdigit()):
  15. num_digit += 1
  16. else:
  17. num_other += 1
  18. print 'alpha = %d, space = %d, digit = %d' %(num_alpha,num_space,num_digit)
  19. str = '0123456789 yang hai lin '
  20. def_16(str)

十八:

  1. '''
  2. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制。
  3. '''
  4. def fun_18(a,num):
  5. sum = 0
  6. for i in range(1,num+1):
  7. b = 0
  8. for j in range(1,i+1):
  9. b += a * (10 ** (j-1))
  10. if(i != num):
  11. print ('%d+') %b,
  12. else:
  13. print b,
  14. sum += b
  15. print '= %d' %sum
  16. fun_18(5,9)
  17. # 打印:5+ 55+ 555+ 5555+ 55555+ 555555+ 5555555+ 55555555+ 555555555 = 617283945

答案用了高级的 reduce lambda:

  1. Tn = 0
  2. Sn = []
  3. n = int(raw_input('n = '))
  4. a = int(raw_input('a = '))
  5. for count in range(n):
  6. Tn = Tn + a
  7. a = a * 10
  8. Sn.append(Tn)
  9. print Tn
  10. Sn = reduce(lambda x,y : x + y,Sn)
  11. print '计算和为:',Sn

python的reduce()函数:https://www.cnblogs.com/XXCXY/p/5180245.html

https://www.cnblogs.com/lonkiss/p/understanding-python-reduce-function.html

十九:

  1. '''
  2. 19:一个数如果恰好等于它的因子之和,这个数就称为'完数'。例如6=1+2+3.编程找出1000以内的所有完数。
  3. '''
  4. def fun_19():
  5. for i in range(1,1001):
  6. L_yinzi = []
  7. for j in range(1,i):
  8. if(i % j == 0):
  9. L_yinzi.append(j)
  10. # sum = 0
  11. # if(0 != len(L_yinzi)):
  12. # sum = reduce(lambda x,y : x+y,L_yinzi)
  13. # if (i == sum):
  14. # print i,
  15. sum_ = sum(L_yinzi)
  16. if(sum_ == i):
  17. print sum_,
  18. fun_19()
  19. #打印:6 28 496

用了之前的reduce求和方法,list也自带sum求和

注意报错: IndentationError: unindent does not match any outer indentation level  这个是缩进报错

二十:

  1. '''
  2. 20. 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
  3. '''
  4. def fun10_1():
  5. L=[100]
  6. h = 100.0
  7. for i in range(1,10):
  8. L.append(h)
  9. h = h*1.0/2.0
  10. sum_h = sum(L)
  11. rh =50
  12. for i in range(1,10):
  13. rh = rh/2.0
  14. print sum_h,rh
  15. fun10_1()
  16. #打印 299.609375 0.09765625

二十一:

  1. '''
  2. 21:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,
  3. 又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
  4. 以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再
  5. 吃时,见只剩下一个桃子了。求第一天共摘了多少。
  6. '''
  7. def fun21():
  8. remain =1
  9. for i in range(0,9):
  10. remain = 2 * (1 + remain)
  11. print remain

二十二:

  1. '''
  2. 22:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。
  3. 已抽签决定比赛名单。有人向队员打听比赛的名单。
  4. a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
  5. '''
  6. def fun_22():
  7. a = [1,2]
  8. b = [0,1,2]
  9. c = [1]
  10. for val_a in a:
  11. for val_b in b:
  12. for val_c in c:
  13. if(val_a != val_b and val_a!=val_c and val_b!=val_c):
  14. print val_a,val_b,val_c
  15. fun_22()

二十三:

  1. '''
  2. 23:打印如下样式:
  3. *
  4. ***
  5. *****
  6. *******
  7. *****
  8. ***
  9. *
  10. '''
  11. def fun_23():
  12. for i in range(0,7):
  13. if(i<=3):
  14. j = i
  15. else:
  16. j = 6-i
  17. num_blank = 3 -j
  18. num_obj = 2 * j + 1
  19. for b in range(0,num_blank):
  20. print ' ',
  21. for obj in range(0,num_obj):
  22. print '*',
  23. print
  24. fun_23()
  25. #打印如下:
  26. *
  27. * * *
  28. * * * * *
  29. * * * * * * *
  30. * * * * *
  31. * * *
  32. *
  33. #这个答案不错哦: 可以自由输入菱形的腰长,自定义大小,如果不输入值,
  34. #直接回车即是默认的如题目示例那样的图形
  35. def paintlx(l):
  36. for i in range(l / 2):
  37. print ' ' * (l / 2 - i) + '*' * (i * 2 + 1)
  38. print '*' * l
  39. for i in range(l / 2 - 1, -1, -1):
  40. print ' ' * (l / 2 - i) + '*' * (i * 2 + 1)
  41. while True:
  42. l = raw_input('请输入菱形腰长(奇数),默认为7:')
  43. if l == '':
  44. l = 7
  45. paintlx(int(l))
  46. break
  47. elif int(l) % 2 == 0:
  48. print '说了是奇数!'
  49. else:
  50. paintlx(int(l))
  51. break

二十四:

  1. '''
  2. 24:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
  3. '''
  4. def fun_24(n,m,L):
  5. L.append(n)
  6. L.append(m)
  7. for i in range(0,18):
  8. s = n + m
  9. n = m
  10. m = s
  11. L.append(s)
  12. L1=[]
  13. L2=[]
  14. fun_24(1,2,L1)
  15. fun_24(2,3,L2)
  16. #print L1
  17. #print L2
  18. sum = 0
  19. for i in range(0,20):
  20. item = (L2[i]*1.0)/(1.0*L1[i]*1.0)
  21. sum += item
  22. print 'sum=%d' %sum
  23. #打印 sum=32 这里有点问题,答案输出32后面还有小数 我这里没有,不知道为啥

二十五:

  1. '''
  2. 25:求1+2!+3!+...+20!的和。
  3. '''
  4. def fun_25_jiechen(num):
  5. if(1 == num):
  6. return 1
  7. s = 1
  8. for i in range(1,num+1):
  9. s *= i
  10. return s
  11. def fun_25():
  12. s = 0
  13. for i in range(1,21):
  14. s += fun_25_jiechen(i)
  15. print s
  16. fun_25()
  17. #打印 2561327494111820313

二十六:

  1. '''
  2. 26: 利用递归方法求5!。
  3. '''
  4. def fun_25(n):
  5. if(1 == n):
  6. return 1
  7. return (fun_25(n-1)*n)
  8. m = fun_25(5)
  9. print m #120
  10. #答案
  11. def fact(j):
  12. sum = 0
  13. if j == 0:
  14. sum = 1
  15. else:
  16. sum = j * fact(j - 1)
  17. return sum
  18. print fact(5)

二十八:

  1. #有5个人坐在一起,问第五个人多少岁?
  2. #他说比第4个人大2岁。
  3. #问第4个人岁数,他说比第3个人大2岁。
  4. #问第三个人,又说比第2人大两岁。
  5. #问第2个人,说比第一个人大两岁。
  6. #最后问第一个人,他说是10岁。请问第五个人多大?
  7. def fun(n):
  8. if(1 == n):
  9. return 10
  10. return 2+fun(n-1)
  11. print (fun(5))
  12. # 18

二十九:

  1. '''
  2. 29: 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
  3. '''
  4. def fun_29(n):
  5. l=str(n)
  6. len_str = len(l)
  7. l_str = l[::-1]
  8. print 'len:%d nixustr:%s' %(len_str,l_str)
  9. fun_29(1012)
  10. # len:4 nixustr:2101

然后又写了一个不用库函数的:这个加了一个标志位Flg_comein 就是当数字中有0的时候那个if语句是存不为0的时候,因为一开始比如329与10000除所以前面都是0,不需要进if语句,但是当数字中有0的时候还是需要的,所以加一个标志位,进去之后就不需要看是否是0了

  1. def fun_29_1(n):
  2. m5 = n/10000
  3. m55 = n%10000
  4. t=10000
  5. L=[]
  6. Flg_comein = False
  7. while(0 != t):
  8. m = n / t
  9. if(0 != m or Flg_comein):
  10. Flg_comein = True
  11. L.append(m)
  12. n %= t
  13. t /= 10
  14. print L
  15. print '1::len=%d,inverted=%s'%(len(L),list(reversed(L)))
  16. print '2::len=%d,inverted=%s'%(len(L),L[::-1])
  17. fun_29_1(12307)
  18. #[1, 2, 3, 0, 7]
  19. #1::len=5,inverted=[7, 0, 3, 2, 1]
  20. #2::len=5,inverted=[7, 0, 3, 2, 1]
  21. 注意这里面两种反序列表的方法:
  22. LL = list(reversed(L))
  23. LL = L[::-1]
  24. 看了答案,感觉下面的这个也蛮好:
  25. print( '请输入大于10的数字:' )
  26. n=input()
  27. x=[]
  28. i=0;
  29. while(n!=0):
  30. x.append(n%10)
  31. i+=1
  32. n/=10
  33. print( '该数有 %d 位\n' %i )
  34. print( '逆序为:\n')
  35. print( x[::] )

三十:

  1. '''
  2. 30:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
  3. '''
  4. def fun_30(n):
  5. my_str = str(n)
  6. if(5 != len(my_str)):
  7. print 'num size should be 5\n'
  8. return
  9. n_wan = n / 10000
  10. n_qian = n % 10000 / 1000
  11. n_shi = n / 10 % 10
  12. n_ge = n % 10
  13. print 'wan:%d, qian:%d, shi:%d, ge:%d'%(n_wan,n_qian,n_shi,n_ge)
  14. if(n_wan == n_ge and n_shi == n_qian):
  15. print 'is huiqenshu'
  16. else:
  17. print 'not huiwenshu'
  18. fun_30(12321)
  19. #wan:1, qian:2, shi:2, ge:1
  20. #is huiqenshu
  1. #答案:
  2. 1):
  3. a = input('输入一串数字: ')
  4. b = a[::-1]
  5. if a == b:
  6. print('%s 是回文'% a)
  7. else:
  8. print('%s 不是回文'% a)
  9. 2):
  10. a = input('请输入一个数字:')
  11. b=list(a)
  12. m=1
  13. for i in range(len(a)//2):
  14. if a[i]!=a[-1-i]:
  15. print('不是')
  16. m=0
  17. break
  18. if m:
  19. print('是')

三十一:

  1. '''
  2. 31:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
  3. Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday
  4. '''
  5. def fun_31():
  6. letter1 = raw_input('please enter a latter(only one):')
  7. letter1 = letter1.lower()
  8. print letter1
  9. if(letter1 == 'm'):
  10. print 'is Monday!'
  11. elif(letter1 == 'w'):
  12. print 'is wednesday!'
  13. elif(letter1 == 'f'):
  14. print 'is friday!'
  15. elif(letter1 == 't'):
  16. letter2 = raw_input('please enter a latter again:')
  17. letter2 = letter2.lower()
  18. if(letter2 == 'u'):
  19. print 'is Tuesday!'
  20. elif(letter2 == 'h'):
  21. print 'is thursday!'
  22. elif(letter1 == 's'):
  23. letter2 = raw_input('please enter a latter again:')
  24. letter2 = letter2.lower()
  25. if(letter2 == 'a'):
  26. print 'is saturday!'
  27. elif(letter2 == 'u'):
  28. print 'is sunday!'
  29. fun_31()
  30. #please enter a latter(only one):S
  31. #s
  32. #please enter a latter again:U
  33. #is sunday!

好的答案:

  1. weeklist = {'M': 'Monday','T': {'u': 'Tuesday','h':'Thursday'}, 'W': 'Wednesday', 'F':'Friday','S':{'a':'Saturday','u':'Sunday'}}
  2. sLetter1 = input('请输入首字母:')
  3. sLetter1 = sLetter1.upper()
  4. if (sLetter1 in ['T','S']):
  5. sLetter2 = input('请输入第二个字母:')
  6. print(weeklist[sLetter1][sLetter2])
  7. else:
  8. print(weeklist[sLetter1])

三十二:

  1. '''
  2. 32:按相反的顺序输出列表的值。
  3. '''
  4. def fun_32(L):
  5. for i in range(0,len(L)):
  6. sub_l = L[len(L) - 1 - i]
  7. print sub_l,
  8. LLLLL= [0,1,2,3,4,5,6,7,8,9]
  9. fun_32(LLLLL)
  10. print
  11. print LLLLL[-1::-1]
  12. #9 8 7 6 5 4 3 2 1 0
  13. #[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

答案:

  1. 1):
  2. a = ['one', 'two', 'three']
  3. for i in a[::-1]:
  4. print i
  5. 2):
  6. a=list(s)
  7. print a[-1::-1]
  8. 3):
  9. list_ = ['a', 'b', 'c', 'd']
  10. list_.reverse()
  11. print( list_ )
  12. 4):
  13. numbers=list(range(1,10))
  14. reversed_list=[]
  15. for i in range(1,10):
  16. reversed_list.append(numbers.pop())
  17. print(reversed_list)

三十三:

  1. '''
  2. 33:按逗号分隔列表。
  3. '''
  4. def fun_33():
  5. L=[1,2,3,4,5,6,7,8,9]
  6. for i in range(0,len(L)):
  7. if(i != len(L)-1):
  8. print '%d,'%(L[i]),
  9. else :
  10. print L[i]
  11. fun_33()
  12. # 1, 2, 3, 4, 5, 6, 7, 8, 9

看了答案,用join不错哦。注意join参数需要是string型的,int型的会报错

  1. L = [1,2,3,4,5]
  2. s1 = ','.join(str(n) for n in L)
  3. print s1

三十四:

  1. '''
  2. 34:练习函数调用
  3. '''
  4. def hello_world():
  5. print 'hello world!'
  6. def three_hello():
  7. for i in range(0,3):
  8. hello_world()
  9. if __name__ == '__main__':
  10. three_hello()

三十五:

题目不太懂,跑答案也没有输出颜色效果,答案如下:

  1. '''
  2. 35:文本颜色设置。
  3. '''
  4. class bcolors:
  5. HEADER = '\033[95m'
  6. OKBLUE = '\033[94m'
  7. OKGREEN = '\033[92m'
  8. WARNING = '\033[93m'
  9. FAIL = '\033[91m'
  10. ENDC = '\033[0m'
  11. BOLD = '\033[1m'
  12. UNDERLINE = '\033[4m'
  13. print bcolors.WARNING + '警告的颜色字体?' + bcolors.ENDC

三十六:

  1. '''
  2. 36:求100之内的素数。
  3. '''
  4. import math
  5. def fun_sushu(n):
  6. num_sqrt = int(math.sqrt(n))
  7. flg = False
  8. for i in range(2,num_sqrt+1):
  9. tmp = n % i
  10. if(0 == tmp):
  11. flg = True
  12. break
  13. if(True == flg):
  14. return False
  15. else:
  16. return True
  17. def fun_36():
  18. for i in range(2,101):
  19. if(True == fun_sushu(i)):
  20. print i,
  21. fun_36()
  22. #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

三十七:

  1. '''
  2. 37:对10个数进行排序。
  3. '''
  4. def fun_37(L):
  5. for i in range(0,len(L)):
  6. for j in range(i+1,len(L)):
  7. if(L[i] >= L[j]):
  8. t = L[i]
  9. L[i] = L[j]
  10. L[j] = t
  11. print 'fun::L',
  12. print L
  13. L = [2,1,3,9,7,8,0,4]
  14. fun_37(L)
  15. print 'src::L',L
  16. #fun::L [0, 1, 2, 3, 4, 7, 8, 9]
  17. #src::L [0, 1, 2, 3, 4, 7, 8, 9]

想的最快的就是这个了,这叫冒泡排序?好像是的。看输出,说明python里面的函数调用是引用传递,会改变实参的值。之前的快排呢,当时还记得很溜的呢?

三十八:

  1. '''
  2. 38: 求一个3*3矩阵主对角线元素之和。
  3. '''
  4. def fun_38():
  5. matrix=[[1,2,3],[4,5,6],[7,8,9]]
  6. #print matrix
  7. sum=0
  8. for i in range(0,3):
  9. print matrix[i][i]
  10. sum += matrix[i][i]
  11. print sum
  12. fun_38()

一开始不知道python里面多重数组怎么表示,看了答案

  1. if __name__ == '__main__':
  2. a = []
  3. sum = 0.0
  4. for i in range(3):
  5. a.append([])
  6. for j in range(3):
  7. a[i].append(float(raw_input('input num:\n')))
  8. for i in range(3):
  9. sum += a[i][i]
  10. print sum

用元组字典来做的答案:

  1. A = {}
  2. for i in range(3):
  3. for j in range(3):
  4. A[i,j] = int(input('Enter a number:'))
  5. diag = []
  6. for m in A.keys():
  7. if m[0] == m[1]:
  8. diag.append(A[m])
  9. print(sum(diag))

三十九:

主要考虑了在中间和头尾两个地方

  1. '''
  2. 39:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
  3. '''
  4. def fun_39(L,num):
  5. flg =True
  6. if(L[0] < L[len(L)-1]):
  7. flg = True
  8. else:
  9. flg = False
  10. if(flg):
  11. if(num <= L[0]):
  12. L.insert(0,num)
  13. return
  14. elif(num >= L[len(L)-1]):
  15. L.insert(len(L),num)
  16. return
  17. else:
  18. if(num >= L[0]):
  19. L.insert(0,num)
  20. return
  21. elif(num <= L[len(L)-1]):
  22. L.insert(len(L),num)
  23. return
  24. for i in range(0,len(L)-1):
  25. if((num >= L[i] and num <= L[i+1]) or (num >= L[i+1] and num <= L[i])):
  26. L.insert(i+1,num)
  27. break
  28. L = [1,2,3,4]
  29. fun_39(L,5)
  30. print L
  31. #[1, 2, 3, 4, 5]

 小弟不才,同时谢谢友情赞助:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python 经典算法100及解析
Python - 经典程序示例
2019下半年Python高频面试题,第六弹
你见过的最全面的 Python 重点
Python 抓取知乎几千张小姐姐图片是什么体验?
【深度学习量化投资】RNNs在股票价格预测的应用基于Keras
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服