Python核心编程2第五章课后练习

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

5-1 整型,讲讲python普通整型与长整型区别

python整形一共有三种:布尔型,长整型和标准整型。普通整型与长整型的区别在于标准整形的取值范围是-2^31到2^31-1,长整型所能表达的数值与机器自身的内存有关。

5-2 定义一个函数,用于两个数相乘,并调用这个函数

#!/usr/bin/env pythondefMultiply(number1,number2):returnnumber1*number2if__name__=="__main__":

number1=input("please enter the number1:")

number2=input("please enter the number2:")PRintMultiply(number1,number2)

5-3 标准类型运算符. 写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分

成绩(A-F)。

A: 90–100

B: 80–89

C: 70–79

D: 60–69

F: <60

(以下脚本,最好在增加对输入数据的判断!!!!!)

#!/usr/bin/env pythondefscore(number):

number=number/10ifnumber==9|number==10:return'A'ifnumber==8:return'B'ifnumber==7:return'C'ifnumber==6:return'D'else:return'F'if__name__=="__main__":

number=input("please enter the number:")printscore(number)

5-4 取余。判断给定年份是否是闰年。使用下面的公式:

一个闰年就是指它可以被 4 整除,但不能被 100 整除, 或者它既可以被400整(我觉得既可以被4整除又可以被100整除又问题,这样1900年什么的都是闰年了)

除。比如 1992,1996 和 2000 年是闰年,但 1967 和 1900 则不是闰年。下一个是闰年的整世

纪是 2400 年。

#!/usr/bin/env pythondefisleapyear(year):if(year%4==0andyear%100 !=0)or(year%4==0andyear%400==0):return"%d is a leap year"%yearelse:return"%d is not a leap year"%yearif__name__=="__main__":

year=input("please enter the year:")printisleapyear(year)

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 美分这样的结果都是不符合要求的。

#!/usr/bin/env pythondefchangecoin(number):

result=[]

meifen=[25,10,5]foriinmeifen:

result.append(number/i)

number=number%i

result.append(number)return"25 Cent is %d,10 Cent is %d,5 Cent is %d,1 Cent is %d"%(result[0],result[1],result[2],result[3])if__name__=="__main__":

number=input("please enter the number:")printchangecoin(number)

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

#!/usr/bin/env pythondefcalculator(number1,i,number2):ifi=='+':returnnumber1+number2ifi=='-':returnnumber1-number2ifi=='*':returnnumber1*number2ifi=='/':returnnumber1/number2ifi=='%':returnnumber1%number2ifi=='**':returnnumber1**number2

caozuo=['+','-','**','/','%','*']

string=raw_input("please enter the string:")forobjincaozuo:ifstring.find(obj)>-1andstring.count(obj)<2:

number=string.split(obj)

list=[]foriinnumber:

list.append(i)

number1=int(list[0])

i=obj

number2=int(list[1])printcalculator(number1,i,number2)

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

#!/usr/bin/env pythondeftax(number):returnnumber*0.8if__name__=="__main__":

number=input("Please enter the number:")printtax(number)

5-8 几何。计算面积和体积。

(a)正方形和立方体

(b)圆和球

#!/usr/bin/env pythonimportmathdefSquare_and_cube(length):print"The area of the square is %d"%pow(length,2)print"The volume of a cube is %d"%pow(length,3)defCircle_and_sphere(length):print"The area of the Circle is %d"%pow(length,2)*math.piprint"The volume of a sphere is %d"%pow(length,3)*math.pi*4/3if__name__=="__main__":print"""(1)Calculate square and cube

(2)Calculate Circle and sphere

(3)exit()"""length=input("please enter the length:")

choice=input("please make the choice number:")ifchoice==1:

Square_and_cube(length)ifchoice==2:

Circle_and_sphere(length)ifchoice==3:

exit

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

(a) 为什么下面的例子里 17+32 等于 49, 而 017+32 等于 47, 017+032 等于 41?

17+32均为十进制数值相加:49

017+32为八进制数加十进制数:15+32=47

017+032均为两个八进制数相加:15+26=41

(b)为什么下面这个表达式我们得到的结果是 134L 而不是 1342 ?

两个长整型数相加,l与数字1相似,提倡长整型用大写L

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

#!/usr/bin/env pythonfrom__future__importdivisiondefcelcius(F):

C=F-32*(5/9)returnCif__name__=="__main__":

F=input("please enter the Fahrenheit degree:")printcelcius(F)

5-11 取余。

(a)使用循环和算术运算,求出0~20之间的所有偶数。

#!/usr/bin/env pythonforiinrange(21):ifi%2==0:printi

(b)同上,不过这次输出所有的奇数。

#!/usr/bin/env pythonforiinrange(21):ifi%2==1:printi

(c)综合(a)和(b),请问辨别奇数和偶数的最简单的方法是什么?

看是否能够被2整除

(d)使用(c)的成果,写一个函数,检测一个整型是否被另一个整型整除。先要求用户输入两个数,然后你的函数判断两者是否有整除关系,根据判断结果分别返回True和False。

#!/usr/bin/env pythondefdiv(num1,num2):ifnum1%num2==0:return"True"else:return"False"if__name__=="__main__":

num1=input("please type the num1:")

num2=input("please type the num2:")print"%d divided %d is %s"%(num1,num2,div(num1,num2))

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

print sys.maxint

print -sys.maxint-1

print sys.float_info

print sys.long_info

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

#!/usr/bin/env pythondeftime(h,t):

h=int(h)

t=int(t)

t=h*60+tprint"The minutes is",tif__name__=="__main__":

s=raw_input("please input the time in HH:MM...\n")

s=s.split(":")

time(s[0],s[1])

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

#!/usr/bin/env pythonday_rate=float(raw_input("please type the day rate:\n"))

year_rate=(1+day_rate)**365-1print"Annual return is %f"%year_rate

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

#!/usr/bin/env pythondefgcd(num1,num2):

i=1whileTrue:

i+=1if(i%num1==0)&(i%num2==0):

breakreturn"the gcd is %d"%ideflcm(num1,num2):

i=max(num1,num2)whileTrue:

i-=1if(num1%i==0)&(num2%i==0):

breakreturn"the lcm is %d"%iif__name__=="__main__":

num1=input("please enter the number1:")

num2=input("please enter the number2:")printgcd(num1,num2)printlcm(num1,num2)

5-16 家庭财务。给定一个初始金额和月开销数,使用循环,确定剩下的金额和当月的支出数,包括最后的支出数。Payment()函数会用到初始金额和月额度,输出结果应该类似下面的格式(列子中的数字仅用于演示)。

Enter opening balance:100.00

Enter monthly payment: 16.13

Amount Remaining

Pymt# Paid Balance

----- ------ ---------

0 $ 0.00 $100.00

1 $16.13 $ 83.87

2 $16.13 $ 67.74

3 $16.13 $ 51.61

4 $16.13 $ 35.48

5 $16.13 $ 19.35

6 $16.13 $ 3.22

7 $ 3.22 $ 0.00

#!/usr/bin/env pythondefpay(paid,balance):print"Pymt# Paid Balance"print"----- ----- ------"i=0

b=balancewhile(balance>paid):

balance=balance -paid

i+=1print"%d $%f $%f"%(i,paid,balance)

i+=1print"%d $%f $%f"%(i,balance,0)if__name__=="__main__":

balance=raw_input("please enter the balance:")

paid=raw_input("please enter the paid:")

balance=float(balance)

paid=float(paid)

pay(paid,balance)

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

#!/usr/bin/pythonimportrandom

num= random.randint(1,100)

lst=[]foriteminrange(num):

tmp= random.randint(0,(pow(2,31)-1))

lst.append(tmp)

lst.sort()printlst

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航