本文主要内容来自Python 100例 。为了加深印象,自己再敲一遍代码。如有侵权,立即删除。
运行环境:
1 2 3 操作系统:win7 64bit Python Version:Python 2.7.13 开发IDE:PyCharm Community Edition 2.16.3.2
实例1 题目: 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数“各是多少?程序分析: 可填在百位、十位、个位的数字都是1、2、3、4,组成所有的排列后再去掉不满足条件的排列。源码:
1 2 3 4 5 6 7 8 9 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
实例2 题目: 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?程序分析: 请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。使用PyCharm的调试功能,可以更清楚程序的执行过程。
源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 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和加上268后都是一个完全平方数,请问该数是多少?程序分析: 完全平方即用一个整数乘以自己例如1*1,2*2,3*3等,依此类推。若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。在10000以内判断,将该数加上100后再开方,加上268后再开方,如果开方后的结果满足如下条件,即是结果。源码:
1 2 3 4 5 6 7 8 9 10 11 import mathfor i in range (10000 ): x = int (math.sqrt(i + 100 )) y = int (math.sqrt(i + 268 )) if (x * x == i + 100 ) and (y * y == i + 268 ): print i
实例4 题目: 输入某年某月某日,判断这一天是这一年的第几天?程序分析: 以3月5日为例,应该先把前两个月的天数加起来,然后再加上5天即本年的第几天。特殊情况:闰年且输入月份大于2时需考虑多加一天:源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 year = int (raw_input('Input year:\n' )) month = int (raw_input('Input month:\n' )) day = int (raw_input('Input day:\n' )) months = (0 , 31 , 59 , 90 , 120 , 151 , 181 , 212 , 243 , 273 , 304 , 334 ) if 0 < month <= 12 : sumday = months[month - 1 ] else : print 'data error' sumday += day leap = 0 if (year % 400 == 0 ) or ((year % 4 == 0 ) and (year % 100 != 0 )): leap = 1 ; if (leap == 1 ) and (month > 2 ): sumday += 1 print 'It is the %dth day.' % sumday
实例5 题目: 输入三个数x,y,z,请把这三个数由小到大输出。程序分析: 使用列表的sort()方法进行排序。源码:
1 2 3 4 5 6 7 8 9 10 i = [] for idx in range (3 ): x = int (raw_input('integer:\n' )) i.append(x) i.sort() print i
实例6 题目: 斐波那契数列。程序分析: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,费波那契数列是以递归的方法来定义:
1 2 3 F0 = 0 (n=0) F1 = 1 (n=1) Fn = F(n-1) + F(n-2) (n=1)
源码: 方法一:
1 2 3 4 5 6 7 8 9 10 11 12 13 def fib (n ): a, b = 1 , 1 for i in range (n-1 ): a, b = b, a+b return a print fib(10 )
方法二:
1 2 3 4 5 6 7 8 9 10 11 12 13 def fib (n ): if n == 1 or n == 2 : return 1 return fib(n - 1 ) + fib(n - 2 ) print fib(10 )
方法三:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 def fib (n ): if n == 1 : return [1 ] if n == 2 : return [1 , 1 ] fibs = [1 , 1 ] for i in range (2 , n): fibs.append(fibs[-1 ] + fibs[-2 ]) return fibs print fib(10 )
实例7 题目: 将一个列表的数据复制到另一个列表中。程序分析: 使用列表[:]。源码:
1 2 3 4 5 6 7 a = [1 , 2 , 3 ] b = a[:] print b
实例8 题目: 输出9*9乘法口诀表。程序分析: 分行与列考虑,共9行9列,i控制行,j控制列源码:
1 2 3 4 5 6 7 8 9 for i in range (1 , 10 ): for j in range (1 , 10 ): result = i * j print '%d * %d = % -3d' % (i, j, result) print ''
实例9 题目: 暂停一秒输出。程序分析: 无。源码:
1 2 3 4 5 6 7 8 9 10 import timemyD = {1 : 'a' , 2 : 'b' } for key, value in dict .items(myD): print key, value time.sleep(1 )
实例10 题目: 暂停一秒输出。程序分析: 无。源码:
1 2 3 4 5 6 7 8 9 10 11 12 import timeprint 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()))
实例11 题目: 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数是多少?程序分析: 兔子对数(注意是对数,不是个数)的规律为数列1,1,2,3,5,8,13,21……源码:
1 2 3 4 5 6 7 8 9 10 11 12 f1 = 1 f2 = 1 for i in range (1 , 21 ): print '%12ld %12ld' % (f1, f2) if (i % 3 ) == 0 : print '' f1 += f2 f2 = f1 + f2
实例12 题目: 判断101-200之间有多少个素数,并输出所有素数。程序分析: 判断素数的方法:用一个数分别去除2到sqrt(这个数)之间的数,如果能被整除,则表明此数不是素数,反之是素数。源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from math import sqrth = 0 leap = 1 for m in range (101 , 201 ): k = int (sqrt(m + 1 )) for i in range (2 , k + 1 ): if m % i == 0 : leap = 0 break if leap == 1 : print '%-4d' % m h += 1 if h % 10 == 0 : print '' leap = 1 print 'The total is %d' % h
实例13 题目: 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身,例如:153是一个“水仙花数”,因为$153=1^3+5^3+3^3$程序分析: 利用for循环100-999之间的数,每个数分解出个位,十位,百位。源码:
1 2 3 4 5 6 7 8 9 10 for n in range (100 , 1000 ): i = n / 100 j = n / 10 % 10 k = n % 10 if n == i ** 3 + j ** 3 + k ** 3 : print n
实例14 题目: 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5程序分析: 对n进行分解质因数,应先找到一个最小的质数k(质数又称素数,一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数;否则称为合数),然后按下述步骤完成:
如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印即可。
如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 def reduceNum (n ): print '{} = ' .format (n), if not isinstance (n, int ) or n <= 0 : print '请输入一个正确的数字!' exit(0 ) elif n in [1 ]: print '{}' .format (n) while n not in [1 ]: for index in xrange(2 , n + 1 ): if n % index == 0 : n /= index if n == 1 : print index else : print '{} *' .format (index), break reduceNum(90 ) reduceNum(100 ) reduceNum(3 )
实例15 题目: 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用户用B表示,60分一下的用C表示。程序分析: 程序分析:(a>b)?a:b这是条件运算符的基本例子。源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 score = int (raw_input('input score:\n' )) if score >= 90 : grade = 'A' elif score >= 60 : grade = 'B' else : grade = 'C' print '%d belongs to %s' % (score, grade)
实例16 题目: 输出指定格式的日期。程序分析: 使用datetime模块。源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import datetimeif __name__ == '__main__' : print (datetime.date.today().strftime('%d/%m/%Y' )) birthDate = datetime.date(1941 , 1 , 5 ) print (birthDate.strftime('%d/%m/%Y' )) birthNextDay = birthDate + datetime.timedelta(days=1 ) print (birthNextDay.strftime('%d/%m/%Y' )) birthNextYear = birthDate.replace(year=birthDate.year + 1 ) print (birthNextYear.strftime('%d/%m/%Y' ))
实例17 题目: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。程序分析: 利用while语句,条件为输入的字符不为’\n’。源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 s = raw_input("inout a string:\n" ) letters = 0 space = 0 digit = 0 others = 0 for c in s: if c.isalpha(): letters += 1 elif c.isdigit(): digit += 1 elif c.isspace(): space += 1 else : others += 1 print 'char = %d, space = %d, dight = %d, others = %d' % (letters, space, digit, others)
实例18 题目: 求s = a + aa + aaa + aaaa + aa…a的值,其中a是一个数字。例如3 + 22 + 222 + 2222 +22222(此时共有5个数相加),几个数相加由键盘控制。程序分析: 关键是计算出每一项的值。源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Tn = 0 Sn = [] n = int (raw_input('请输入相加数的个数n = :\n' )) a = int (raw_input('请输入数的大小a = :\n' )) for count in range (n): Tn += a a *= 10 Sn.append(Tn) print Tn Sn = reduce(lambda x, y: x + y, Sn) print '求和:%d5' % Sn
实例19 题目: 一个数如果恰好等于它的因子之和,这个数就被称为“完数”,例如6 = 1 + 2 + 3。找出1000以内的所有完数。程序分析: 请参照程序 实例14 源码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 from sys import stdoutfor j in range (2 , 1001 ): k = [] n = -1 s = j for i in range (1 , j): if j % i == 0 : n += 1 s -= i k.append(i) if s == 0 : print j for i in range (n): stdout.write(str (k[i])) stdout.write(' ' ) print k[n]
实例20 题目: 一个球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?程序分析: 无源码:
1 2 3 4 5 6 7 8 9 10 11 12 Sn = 100.0 Hn = Sn / 2 for n in range (2 ,11 ): Sn += 2 * Hn Hn /= 2 print 'Total of road is %f' % Snprint 'The tenth is %f meter' % Hn
参考
MathJax basic tutorial and quick reference Hexo-NexT主题使用mathjax输入数学公式注意事项 hexo在Next主题下输入数学公式