Python核心编程(第二版) 第五章习题答案

w5-1.整型。讲讲Python普通整型和长整型的区别。

答:Python 的标准整数类型是最通用的数字类型。在大多数 32 位机器上,标准整数类型的取值范围是-2**31到 2**31-1,也就是-2,147,483,648 到 2,147,483,647。如果在 64 位机器上使用 64 位编译器编译 Python,那么在这个系统上的整数将是 64 位。

Python 的长整数类型能表达的数值仅仅与你的机器支持的(虚拟)内存大小有关。

5-2.操作符。
(a)写一个函数,计算并返回两个数的乘积。
(b)写一段代码调用这个函数,并显示它的结果。

 1 #!/usr/bin/python
 2 
 3 def p(a,b):
 4         c=a*b
 5         print c
 6 
 7 
 8 p(2,3)
 9 p(2,3.)
10 p(2,2.0+1J)

5-3.标准类型操作符。写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分成绩(A-F)。
A:90~100

B:80~89

C:70~79

D:60~69

F:<60

 1 #!/usr/bin/python
 2 
 3 def value(num):
 4         if 90<=num<=100:
 5                 print 'A'
 6         elif 80<=num<=89:
 7                 print 'B'
 8         elif 70<=num<=79:
 9                 print 'C'
10         elif 60<=num<=69:
11                 print 'D'
12         elif num>=0 and num<60:
13                 print 'F'
14         else:
15                 print  "The num is invalid."
16 
17 try:
18         num=int(raw_input("Enter a num:"))
19         value(num)
20 except ValueError,v:
21         print 'You must input digits.'

5-4.取余。判断给定年份是否是闰年。使用下面的公式。
一个闰年就是指它可以被4整除,但不能被100整除,或者它既可以被4又可以被100整除。比如1992年、1996年和2000年是闰年,但1967年和1900年则不是闰年。下一个是闰年的整世纪是2400年。

 

 1 #!/usr/bin/python
 2 
 3 try:
 4         year=int(raw_input("Enter a year:"))
 5         if year%4==0 and year%100<>0:
 6                 print "%d is a leap year."%year
 7         elif year%400==0:
 8                 print "%d is a leap year."%year
 9         else:
10                 print "%d is not a leap year."%year
11 except ValueError,v:
12         print "You must Enter a integre digits."

5-5.取余。取一个任意小于1美元的金额,然后计算可以换成最少多少枚硬币。硬币有1美分、5美分、10美分、25美分4种。1美元等于100美分。举例来说,0.76美元计算结果应该是3枚25美分,1枚1美分。类似于76枚1美分,2枚25美分+2枚10美分+1枚5美分+1枚1美分这样的结果都是不符合要求的。

 1 #!/usr/bin/python
 2 try:
 3         dollar=float(raw_input("Enter a money that is liter than 1 dollars:"))
 4         if dollar>=1:
 5                 print "You input is too large."
 6         elif dollar>0 and dollar<1:
 7                 dollarTocents=int(dollar*100)
 8                 (numTo25,dollarTocents)=divmod(dollarTocents,25)
 9                 print "%d 25 coins."%numTo25
10                 (numTo10,dollarTocents)=divmod(dollarTocents,10)
11                 print "%d 10 coins."%numTo10
12                 (numTo5,dollarTocents)=divmod(dollarTocents,5)
13                 print "%d 5 coins."%numTo5
14                 numTo1=dollarTocents/1
15                 print "%d 1 coins."%numTo1
16         else:
17                 print "You input must large than 0."
18 except ValueError,v:
19         print "You must enter a digits."

 

5-6   算术。写一个计算器程序。你的代码可以接受这样的表达式,两个操作数加一个操作符:N1操作符N2。其中N1和N2为整型或浮点型,操作符可以是+、-、*、/、%、**,分别表示加法、减法、乘法、整型除、取余和幂运算。计算这个表达式的结果,然后显示出来。提示:可以使用字符串方法split(),但不可以使用内建函数eval()。

1 #!/usr/bin/python)
 2 
 3 print "Enter a expression and I will tell you the answer."
 4 exp=raw_input('>')
 5 if len(exp.split('-'))==2 and len(exp.split('+'))==2:
 6         try:
 7                 elist=exp.split('-')
 8                 a=float(elist[0])
 9                 b=float(elist[1])
10                 print a-b
11         except ValueError,v:
12                 try:
13                         elist=exp.split('+')
14                         a=float(elist[0])
15                         b=float(elist[1])
16                         print a+b
17                 except ValueError,v:
18                         print "Input invalid 1"
19 elif len(exp.split('-'))==2 and len(exp.split('+'))<>2:
20         elist=exp.split('-')
21         try:
22                 a=float(elist[0])
23                 b=float(elist[1])
24                 print a-b
25         except ValueError,v:
26                 print "Input invalid 2"
27 elif len(exp.split('-'))==3:
28         elist=exp.split('-')
29         try:
30                 a=float(elist[1])
31                 b=float(elist[2])
32                 print -a-b
33         except ValueError,v:
34                 print "Input invalid 3"
35 elif len(exp.split('+'))==2 and len(exp.split('-'))<>2:
36         elist=exp.split('+')
37         try:
38                 a=float(elist[0])
39                 b=float(elist[1])
40                 print a+b
41         except ValueError,v:
42                 print "Input invalid 4"
43 
44 elif len(exp.split('+'))==3:
45         elist=exp.split('+')
46         try:
47                 a=float(elist[1])
48                 b=float(elist[2])
49                 print a+b
50         except ValueError,v:
51                 print "Input invalid 5"
52 elif len(exp.split('*'))==2:
53         elist=exp.split('*')
54         try:
55                 a=float(elist[0])
56                 b=float(elist[1])
57                 print a*b
58         except ValueError,v:
59                 print "Input invalid 6"
60 elif len(exp.split('/'))==2:
61         elist=exp.split('/')
62         try:
63                 a=float(elist[0])
64                 b=float(elist[1])
65                 print a/b
66         except ValueError,v:
67                 print "Input invalid 7"
68 elif len(exp.split('%'))==2:
69         elist=exp.split('%')
70         try:
71                 a=float(elist[0])
72                 b=float(elist[1])
73                 print a%b
74         except ValueError,v:
75                 print "Input invalid 8"
76 elif len(exp.split('**'))==2:
77         elist=exp.split('**')
78         try:
79                 a=float(elist[0])
80                 b=float(elist[1])
81                 print a**b
82         except ValueError,v:
83                 print "Input invalid 9"
84 else:
85         print "Input error"

5-7.营业税。随意取一个商品金额,然后根据当地营业税额度计算应该交纳的营业税。

 1 #!/usr/bin/python
 2 #encoding=utf8
 3 
 4 """ 计算营业税 """
 5 
 6 index=0.05
 7 print "Enter a price."
 8 try:
 9         p=float(raw_input('>'))
10         tax=p*index
11         print ">tax=%.2f"%tax
12 except ValueError,v:
13         print "Input Error."

5-8.几何。计算面积和体积。
(a)正方形和立方体
(b)圆和球

 

 1 #!/usr/bin/python
 2 
 3 
 4 def squre_area(length):
 5         area=length**2
 6         print "Area of squre is %0.2f" %area
 7 
 8 def cube_volume(length):
 9         volume=length**3
10         print "Volume of cube is %0.2f" %volume
11 
12 def circle_area(radius):
13         area=3.14*radius**2
14         print "Area of circle is %0.2f" %area
15 
16 def sphere_volume(radius):
17         volume=(4*3.14*radius**3)/3
18         print "Volume of sphere is %0.2f" %volume
19 
20 if __name__=="__main__":
21         try:
22                 d=float(raw_input("Enter a num:"))
23                 squre_area(d)
24                 cube_volume(d)
25                 circle_area(d)
26                 sphere_volume(d)
27         except ValueError,v:
28                 print "Input a invalid value."

5-9.
数值形式回答下面关于数值格式的问题

答:略。

5-10.转换。写一对函数来进行华氏度到摄氏度的转换。转换公式为C = (F - 32) * (5 / 9)应该在这个练习中使用真正的除法,否者你会得到不正确的结果。

 1 #!/usr/bin/python
 2 
 3 def convert(f):
 4         c=(f-32)*5/9
 5         print "The Temperature of C is:%.2f"%c
 6 
 7 if __name__=="__main__":
 8         #Enter f temperature
 9         try:
10                 ft=float(raw_input("Enter a f temperature:"))
11                 convert(ft)
12         except ValueError:
13                 print "Input error."

5-11.取余。
(a)使用循环和算术运算,求出0~20之间的所有偶数。
(b)同上,不过这次输出所有的奇数。
(c)综合(a)和(b),请问辨别奇数和偶数的最简单的办法是什么?
(d)使用(c)的成果,写一个函数,检测一个整型能否被另一个整型整除。现要求用户输入两个数,然后你的函数判断两者是否有整除关系,根据判断结果分别返回True和False。

 1 #!/usr/bin/python
 2 
 3 even=[i for i in range(0,21) if i%2==0]
 4 print even
 5 odd=[j for j in range(0,21) if j%2<>0]
 6 print odd
 7 
 8 def div(a,b):
 9         if a%b==0:
10                 print "TRUE"
11         else:
12                 print "FALSE"
13 
14 num1=float(raw_input("Enter a num:"))
15 num2=float(raw_input("Enter an another num:"))
16 div(num1,num2)

5-12.系统限制。写一段脚本确认一下你的Python所能处理的整型、长整型、浮点型和复数的范围。

答:

>>> import sys
>>> sys.maxint
9223372036854775807
>>> sys.float_info.max
1.7976931348623157e+308
>>> sys.float_info.min
2.2250738585072014e-308

5-13 转换。写一个函数把由小时和分钟表示的时间转换为只用分钟表示的时间。

 1 #!/usr/bin/python
 2 
 3 def Convert(a,b):
 4         min=60*a+b
 5         print "min=%d"%min
 6 
 7 if __name__=="__main__":
 8         hour=raw_input("Enter a time:")
 9         try:
10                 (h,m)=hour.split(":")
11                 Convert(int(h),int(m))
12         except ValueError,v:
13                 print "Input error."

5-14 银行利息。写一个函数,以定期存款利率为参数, 假定该账户每日计算复利,请计
算并返回年回报率。

答:略

5–15.
最大公约数和最小公倍数。请计算两个整数的最大公约数和最小公倍数。

 

 1 def common_divisor(a,b):
 2 
 3         for i in range(1,min(a,b)+1):
 4                 if a%i==0 and b%i==0:
 5                         m=i
 6         print "The common divisor is %d"%m
 7 
 8 def common_mutiple(i,j):
 9         #method 1
10         maxnum=max(i,j)
11         while True:
12                 if maxnum%i==0 and maxnum%j==0:
13                         print "The common multiple is %d"%maxnum
14                         break
15                 else:
16                         maxnum=maxnum+1
17         #method 2
18         for k in range(1,min(i,j)+1):
19                 if i%k==0 and j%k==0:
20                         n=k
21         print n
22         print i*j/n
23 if __name__=="__main__":
24         try:
25                 num1=int(raw_input("Enter a num:"))
26                 num2=int(raw_input("Enter a num again:"))
27                 common_divisor(num1,num2)
28                 common_mutiple(num1,num2)
29         except ValueError,v:
30                 print "Value Invalid."

5-16 家庭财务。给定一个初始金额和月开销数, 使用循环,确定剩下的金额和当月的支
出数, 包括最后的支出数。

 1 #!/usr/bin/python
 2 
 3 def payment(balance=100,monthpayment=16.13):
 4         print "Amount Remainint"
 5         print "Pymt#  Paid    Balance"
 6         print "_____ _______ _________"
 7         print "0      $0.00   $%.2f"%balance
 8         month=0
 9         remain=balance
10         while remain>=monthpayment:
11                 month=month+1
12                 remain=remain-monthpayment
13                 print "%d    $%.2f    $%.2f"%(month,monthpayment,remain)
14         else:
15                 print "%d    $%.2f    $0.00"%(month,remain)
16 if __name__=="__main__":
17         try:
18                 balance=float(raw_input("Enter opening balance:"))
19                 monthpayment=float(raw_input("Enter monthly payment:"))
20                 payment(balance,monthpayment)
21         except ValueError,v:
22                 print "Input Error."
23                 payment()

5-17 随机数。熟读随机数模块然后解下面的题:
生成一个有 N 个元素的由随机数 n 组成的列表, 其中 N 和 n 的取值范围分别为: (1 <
N <= 100), (0 <= n <= 231 -1)。然后再随机从这个列表中取 N (1 <= N <= 100)个随机数
出来, 对它们排序,然后显示这个子集。

 1 #!/usr/bin/python
 2 
 3 import random
 4 
 5 #the len of list
 6 N=random.randint(2,100)
 7 randlist=random.sample(xrange(0,2**31-1),N)
 8 print randlist
 9 randlist.sort()
10 print randlist

 

posted @ 2014-05-28 23:43  tmyyss  阅读(2405)  评论(0编辑  收藏  举报