• 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
  • 相关阅读:
    notifyDataSetChanged() 现在不建议用了,删除的时候会导致position不变,导致删除这边,却删除的另一条
    android11 应用未安装:软件包似乎无效
    android room Schema export directory is not provided to the annotation processor so we cannot export the schema.
    git Ignore如何还原、脱离了git,如何连接
    android.enableJetifier 解决包duplicate
    875. 爱吃香蕉的珂珂 (二分应用)
    238. 除自身以外数组的乘积 (前缀和)
    1288. 删除被覆盖区间
    312. 戳气球 (分治、区间 dp)
    988. 从叶结点开始的最小字符串
  • 原文地址:https://www.cnblogs.com/tmyyss/p/3758134.html
Copyright © 2020-2023  润新知