【python核心编程]】第五章练习题
第五章 数字
5-2.
操作符,写一个函数,计算并返回两个数的乘积“整理的时候才看到我把题目看成两个数的和了”
1 #!/usr/bin/env python 2 3 def count(): 4 asum = 0 5 for i in range(2): 6 asum += int(raw_input('请输入两个数:')) 7 return asum 8 s = count() 9 print'这两个数的和为:',s
5-3.
标准类型操作符。写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分成绩(A-F)
A:90~100
B:80~89
C:70~79
D:60~69
F:<60
1 #!/usr/bin/env python 2 def grade(): 3 while True: 4 score = float(raw_input('请输入测试成绩:')) 5 if 0 <= score < 101 : 6 if 89 < score < 101: 7 return 'A' 8 elif 79 < score < 90: 9 return 'B' 10 elif 69 < score < 80: 11 return 'C' 12 elif 59 < score < 70: 13 return 'D' 14 else: 15 return 'F' 16 break 17 else: 18 print '输入的测试成绩不符合要求,请重新输入' 19 continue 20 s = grade() 21 print '评分成绩为:',s
5-4.
取余。判断给定年份是否是闰年。使用下面的公式。
一个闰年后就是指他可以被4整除,但不能被100整除,或者它可以被400整除。
1 #!/usr/bin/env python 2 #coding=utf-8 3 def year(): 4 years = int(raw_input('请输入年份:')) 5 if years%4 == 0 and years%100!=0: 6 return '闰年' 7 if years%400 == 0 : 8 return '闰年' 9 else: 10 return '平年' 11 s = year() 12 print '今年是:',s
5-5.
取余。取一个任意小于 1 美元的金额,然后计算可以换成最少多少枚硬币。硬币有 1美分,5 美分,10 美分,25 美分四种。1 美元等于 100 美分。
举例来说,0.76 美元换算结果应该是 3 枚 25 美分,1 枚 1 美分。类似 76 枚 1 美分,2 枚 25 美分+2 枚 10 美分+1 枚 5 美分+1枚 1 美分这样的结果都是不符合要求的。
1 #!/usr/bin/env python 2 #coding=utf-8 3 def coins(): 4 while True: 5 coin = float(raw_input('请输入一个小于1美元的金额"退出请输入0":')) 6 if coin == 0: 7 break 8 elif coin <0 or coin > 1 : 9 print'输入的金额不符合要求,请重新输入' 10 continue 11 else: 12 a = coin * 100 13 a25 = a // 25 14 a10 = a%25//10 15 a5 = a%25%10//5 16 a1 = a%25%10%5 17 return coin,a25,a10,a5,a1 18 s = coins() 19 print '%.2f可以换算成%d 25,%d 10,%d 5,%d 1,' %(s[0],s[1],s[2],s[3],s[4])
5-6.
算术。写一个计算机程序,其可以接收一个表达式,两个操作数加一个操作符,如N1操作符N2,其中N1和N2为整形或浮点形,操作符可以是 +, - , *, /, %, ** ,计算结果并显示出来。
1 #!/usr/bin/env python 2 3 def calcu(): 4 express = raw_input('请输入需要计算的表达式,例如2+3:') 5 symbols = ['+','-','*','/','%','**'] 6 for s in symbols: 7 if s in express: 8 sym = s 9 a = express.split(sym) 10 n1 = float(a[0]) 11 n2 = float(a[1]) 12 if sym == symbols[0]: 13 print '%s=%f' %(express,n1+n2) 14 elif sym == symbols[1]: 15 print '%s=%f' %(express,n1-n2) 16 elif sym == symbols[2]: 17 print '%s=%f' %(express,n1*n2) 18 elif sym == symbols[3]: 19 print '%s=%f' %(express,n1/n2) 20 elif sym == symbols[4]: 21 print '%s=%f' %(express,n1%n2) 22 elif sym == symbols[5]: 23 print '%s=%f' %(express,n1**n2)
5-8.
几何,计算面积和体积。
(a)正方形和圆的面积
(b) 立方体和球的体积
1 #!/usr/bin/env python 2 #coding=utf-8 3 import math 4 def area(): 5 while True: 6 shape = int(raw_input('需要计算的几何图形是,正方形为1,圆形为2,请选择:')) 7 if shape==1 or shape ==2 : 8 break 9 else: 10 print'你输入的图形选项有误,请重新选择' 11 continue 12 if shape == 1: 13 size = raw_input('请输入正方形的边长:') 14 print'正方形的面积是:%f' %(float(size)**2) 15 else: 16 radius = raw_input('请输入圆形的半径:') 17 print'圆形的面积是:%f' %(float(radius)**2*math.pi) 18 def volume(): 19 while True: 20 shape = int(raw_input('需要计算的几何图形是,立方体为1,球形为2,请选择:')) 21 if shape==1 or shape ==2 : 22 break 23 else: 24 print'你输入的图形选项有误,请重新选择' 25 continue 26 if shape == 1: 27 size = raw_input('请输入立方体的边长:') 28 print'立方体的体积是:%f' %(float(size)**3) 29 else: 30 radius = raw_input('请输入球形的半径:') 31 print'球形的体积是:%f' %(float(radius)**3*math.pi*3.0/4)
5-11.
取余。
(a)使用循环和算术运算,求出0~20之间的所有偶数。
(b)同上,不过这次输出所有的奇数。
(c)综合(a)和(b),请问辨别奇数和偶数的最简单的办法是什么?
(d)使用(c)的成果,写一个函数,检测一个整型能否被另一个整型整除。现要求用户输入两个数,然后你的函数判断两者是否有整除关系,根据判断结果分别返回True和False。
(a)使用循环和算术运算,求出0~20之间的所有偶数。
(b)同上,不过这次输出所有的奇数。
(c)综合(a)和(b),请问辨别奇数和偶数的最简单的办法是什么?
(d)使用(c)的成果,写一个函数,检测一个整型能否被另一个整型整除。现要求用户输入两个数,然后你的函数判断两者是否有整除关系,根据判断结果分别返回True和False。
1 #!/usr/bin/env python 2 #coding=utf-8 3 def even(): 4 a = [] 5 for i in range(20): 6 if i%2 != 0 : 7 a.append(str(i)) 8 return a 9 10 def division(): 11 number = raw_input('请输入两个整数,以逗号隔开:') 12 anumber = number.split(',') 13 a = int(anumber[0]) 14 b = int(anumber[1]) 15 if a%b == 0 : 16 return True 17 else : 18 return False 19 20 s = division() 21 print s
5-12.
系统限制。写一段脚本确认一下你的Python所能处理的整型、长整型、浮点型和复数的范围。
1 #!/usr/bin/env python 2 import sys 3 print (sys.maxint) 4 print (-sys.maxint-1) 5 print (sys.float_info) 6 print (sys.long_info)
5-13.
转换。写一个函数把小时和分钟所表示的时间转换成为只用分钟表示的时间。
1 #!/usr/bin/env python 2 3 def timeshift(): 4 time = raw_input('请输入一个时间,形式为HH:MM:') 5 a = time.split(':') 6 minutes = int(a[0]) * 60 +int(a[1]) 7 return time,minutes 8 s = timeshift() 9 print '"%s"Hours="%s"Minutes' %(s[0],s[1])
5-15.
最大公约数和最小公倍数。请计算两个整型的最大公约数和最小公倍数。
代码见另一篇记录“最大公约数和最小公倍数”
5-16.
家庭财务。给定一个初始金额和月开销数,使用循环,确定剩下的金额和当月的支出数,包括最后的支出数。Payment()函数会用到初始金额和月额度,输出结果应该类似下面的格式(例子中的数字仅用于演示)。
1 #!/usr/bin/env python 2 3 balance = float(raw_input('Enter opening balance:')) 4 payment = float(raw_input('Enter monthly payment:')) 5 print ' Amount Remaining ' 6 print ' Pymt# Paid Balance ' 7 print ' ---- ---- ------- ' 8 pymt = 0 9 paid = 0.00 10 while balance > payment : 11 balance = balance - payment 12 print ' %4d%10.2f%10.2f ' %(pymt,payment,balance) 13 pymt += 1 14 else : 15 print ' %4d%10.2f%10.2f ' %(pymt,balance,0)
5-17.
*随机数。熟读随机数模块然后解下面的题。生成一个有N个元素的由随机数n组成的列表,其中N和n的取值范围分别为(1 < N <= 100)和(0 <= n <= 2**31 - 1)。然后再随机从这个列表中取N(1 <= N <= 100)个随机数出来,对他们排序,然后显示这个子集。
1 #!/usr/bin/env python 2 import random 3 a = random.randint(0,20) 4 print a 5 b = [] 6 for i in range(a): 7 n = random.randint(-1,2**32) 8 b.append(n) 9 b.sort() 10 print b