zoukankan      html  css  js  c++  java
  • Python 核心编程 课后习题 第五章

    2. 操作符.

      (a) 写一个函数, 计算并返回两个数的乘积.

      (b) 写一段代码调用这个函数, 并显示它的结果.

    def multi(a,b):
        return a * b
    
    result = multi(10,2)
    print result

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

      A: 90~100

      B: 80~80

      C: 70 ~ 79

      D: 60 ~69

      F: < 60

    def scoreCalculate(score):
        if score < 60:
            rank = 'F'
        elif score < 70:
            rank = 'D'
        elif score < 80:
            rank = 'C'
        elif score < 90:
            rank = 'B'
        else:
            rank = 'A'
        return rank
    
    yourScore = int(raw_input("Enter your score -->"))
    yourRank = scoreCalculate(yourScore)
    print yourRank

    4. 取余. 判断给定的年份是否为闰年. 使用下面的公式.

      一个闰年就是指它可以被4整除,但不能被100整除. 或者它既可以被4整除又可以被100整除.

     1 def leapYear(year):
     2     if (year % 4 == 0 and year % 100 != 0) or (year % 100 == 0 and year % 400 == 0):
     3         return True
     4     else:
     5         return False
     6     
     7 aYear = int(raw_input("Ener a year -->"))
     8 isLeap = leapYear(aYear)
     9 print isLeap
    10 if isLeap:
    11     print '%d is a leap year.' % aYear
    12 else:
    13     print '%d is not a leap year.' %aYear
    14     

    5 取余, 取任意小于1美元的金额, 然后计算可以换成最少多少枚硬币. 硬币有1美分, 5美分, 10美分, 25美分四种.

     1 def coinNum(totalMoney):        
     2         totalCoin = 0
     3         denomination = [25,10,5,1]
     4         for currency in denomination:
     5                 coin,left = divmod(totalMoney,currency)
     6                 totalCoin += coin
     7                 totalMoney = left
     8         return totalCoin
     9 
    10 yourMoney = float(raw_input('Enter your money -->')) * 100
    11 coinNumbers = coinNum(yourMoney)
    12 print "You got %d coins" %int(coinNumbers)

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

     1 def calculator(str1):
     2     lt = str1.strip().split(' ')
     3     if (lt[0].count('.') == 1 or lt[2].count('.')==1):
     4         lt[0], lt[2] = float(lt[0]),float(lt[2])
     5     else:
     6         lt[0], lt[2] = int(lt[0]),int(lt[2])
     7     if lt[1] == '+':
     8         return lt[0] + lt[2]
     9     elif lt[1] == '-':
    10         return lt[0] - lt[2]
    11     elif lt[1] == '*':
    12         return lt[0] * lt[2]
    13     elif lt[1] == '/':
    14         if lt[2] == 0:
    15             print "divide by zero error."
    16             
    17         else:
    18             return lt[0] / lt[2]
    19     elif lt[1] == '%':
    20         if lt[2] == 0:
    21             print "Divide by zero error"
    22         else:
    23             return lt[0] % lt[2]
    24     elif lt[1] == '**':
    25         return lt[0] ** lt[2]
    26     else:
    27         print "not such calculation method"
    28 str1 = raw_input("Enter two numbers and a operator(eg: 1.0 + 2.0 ) -->")
    29 cal = calculator(str1)
    30 print cal

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

    1 tax = {'trans':0.03,'assets':0.05}
    2 trade_mode = raw_input("Enter your trade-mode(trans: transport, assets: real eatate) -->")
    3 sales = float(raw_input("Enter your sales -->"))
    4 
    5 tax = tax[trade_mode] * sales
    6 print 'You must pay %.1f taxes' % tax

    8. 几何, 计算面积和体积

     (a) 正方形和立方体

     (b) 圆和球.

     1 from math import pi
     2 def calArea(shape, length):
     3     if shape == 'rectangle':
     4         return length **2
     5     elif shape == 'circle':
     6         return pi * (length **2)
     7     else:
     8         print "WTF"
     9 
    10 
    11 def calVolume(shape,length):
    12     if shape == 'rectangle':
    13         return length ** 3
    14     elif shape == 'circle':
    15         return 4.0 / 3 * pi * (length ** 3)        
    16     else:
    17         print 'WTF'
    18 
    19 
    20 
    21 aShape = raw_input("which shape do you wanna to calculate? -->")
    22 aLength = float(raw_input("enter the length -->"))
    23 area = calArea(aShape,aLength)
    24 volume = calVolume(aShape,aLength)
    25 print "%s has a area of %.2f, volume of %.2f" %(aShape,area,volume)

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

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

    1 >>>17 + 32
    2 49
    3 >>>017 + 32
    4 47
    5 >>>017 + 032
    6 41

    # 第一个里面 数字17 和 32 都是十进制整形数字, 所以相加自然是49. 第二个例子中017表示的是八进制数字,
    换算成十进制就是15 + 32 自然是17, 同理 017 和032 两个八进制数字相加为41.

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

      

    1 >>>65l + 78l
    2 134L

    #上面例子中, 错误的将1写成了小写的L, 即表示两个长整形数字 65 和 78的和自然是134L.
    所以在表示长整形是强烈建议是用L. 而不是小写l 以区分'l' 数字1

    10. 转换, 写一对函数来进行华氏度到摄氏度的转换. 转化公式为 C = (F-32) * (5 / 9)应该在这个联系中使用真正的除法

     1 def c2f(celsius):
     2     return (9.0 / 5) * celsius + 32
     3 
     4 def f2c(fahrenheit):
     5     return (fahrenheit - 32) * (5.0 / 9)
     6 
     7 celsius = float(raw_input("Enter a celsius you wanna to trans to F -->"))
     8 fah = c2f(celsius)
     9 print fah
    10 fahrenheit = float(raw_input("Enter a fahrenheit you wanna to trans to C -->"))
    11 cel = f2c(fahrenheit)
    12 print cel

    11. 取余.

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

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

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

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

    # _*_ coding:utf-8_*_
    # answer for (a) & (b)
    
    for i in xrange(1,21):
        if i % 2 == 0:
            print i,
    print 
    for i in xrange(0,21):
        if i % 2 != 0:
            print i,
    print
    # answer for (c): 从(a) 和 (b) 来看, 辨别奇数和偶数醉简单的方法"貌似" 是用该数对2 求余, 若等于0则是偶数, 若不为0则是奇数. 
    #不过在xrange中直接定义步长就可以求出奇数和偶数.
    
    def divisionJudge(num1,num2):
        if num1 % num2 == 0:
            return True
        else:
            return False
    
    num1 = int(raw_input('Enter the num1 -->'))
    num2 = int(raw_input('Enter the num2 -->'))
    divisonresult = divisionJudge(num1,num2)
    if divisonresult:
        print u"%d 能整除 %d" %(num1, num2)
    else:
        print u"%d 不能整除%d" %(num1,num2)

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

     1 # _*_ coding:utf-8_*_
     2 import sys
     3 
     4 #int
     5 sys.maxint
     6 
     7 #float
     8 sys.float_info
     9 
    10 #long
    11 sys.long_info

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

    1 def timetrans(time):
    2     hour,mins = time.split(':')
    3     return int(hour) * 60 + int(mins)
    4 
    5 aTime = raw_input('Enter your time(format: HH:MM) -->')
    6 minutes = timetrans(aTime)
    7 print minutes

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

    1 def rate(yearRate):
    2     return (1 + yearRate/360) ** 360
    3 nowRate = float(raw_input("Enter the bank rate -->"))
    4 yearRate = rate(nowRate)
    5 print yearRate

    #银行利息计算公式不知道对不对..

    15. 最大公约数和最小公倍数, 请计算两个整型的最大公约数和最小公倍数.

      最大公约数计算: 有两整数 a 和 b, a % b =c

      ① 若c = 0 则b 为最大公约数.

      ②若c != 0 则a=b,b=c在执行求余.

      最小公倍数为两数的乘积/最大公约数

     1 def get_GCD(a,b):
     2     while True:
     3         c = divmod(a,b)[1]
     4         if c == 0:
     5             return b
     6         else:
     7             a,b = b,c
     8 
     9 def get_LCM(a,b):
    10     return (a * b) // get_GCD(a,b)
    11 
    12 num1 = int(raw_input('Enter the num1 -->'))
    13 num2 = int(raw_input('Enter the num2 -->'))
    14 gcd = get_GCD(num1,num2)
    15 lcm = get_LCM(num1,num2)
    16 print gcd,lcm

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

     1 def payment(balence,paid):
     2     #print the title.
     3     print "Pymt#",' '*2,'Paid',' '*4,"Balance"
     4     print '-----',' '*2,'------',' '*2,'---------'
     5     times,left = divmod(int(balence), int(paid))
     6     if left == 0:
     7         times += 1
     8     else:
     9         times += 2
    10     for i in xrange(1,times):
    11         if balence > paid:
    12             balence -= paid
    13             paid_i = '$' + str(paid)
    14             balence_i = '$' + str(balence)
    15             print "%5d%8s%10s" %(i,paid_i,balence_i)
    16         else:
    17             paid = balence
    18             paid_i = '$' + str(balence)
    19             balence_i = '$' + str(balence-paid)
    20             print "%5d%8s%10s" %(i,paid_i,balence_i)
    21 
    22 payment(100.00,16.13)

    17. *随机数. 生成一个又N个元素的由随机数n组成的列表, 其中N和n的取值范围分别为(1 < N <=100) 和 (0 <=n <=2**31-1), 然后再随机从这个列表中取N(1 <=N <=100)个随机数出来, 对他们排序,然后显示这个子集.

     1 import random
     2 lt = []
     3 numbers = random.randint(1,100)
     4 for i in xrange(numbers):
     5     numrange = random.randint(1,2**31-1)
     6     lt.append(numrange)
     7 
     8 lt2 = []
     9 numberstoget = random.randint(1,len(lt))
    10 for i in xrange(1,numberstoget):
    11     lt2.append(lt[i])
    12 lt2.sort()
    13 print lt2
  • 相关阅读:
    Delphi 2009增强之Exit函数
    带小数的10进制转16进制
    产生指定长度的随机字符串
    在delph 2009中,利用Build Events调用UPX
    WMI信息获取
    MYSQL 存储过程学习笔记
    将窗体透明化
    倒计时
    通过程序开启XP的ClearType显示效果
    使用ODAC调用ORACLE的自定义函数和存储过程
  • 原文地址:https://www.cnblogs.com/chen0427/p/5443606.html
Copyright © 2011-2022 走看看