最近闲时学点python,教材是电子版的<Python核心编程(第二版)>,以下是我学习期间自己做的练习题,可能解答有误,也许不是最佳思路,希望大家多提宝贵意见,优化优化.

10-17 题解答: 

 

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

 
#!/usr/bin/env python
## -*- coding -*-
## Author:
 
fahrenheit = float(raw_input("Enter Fahrenheit:\n"))
celsius = (fahrenheit - 32) * (5.0/9)
 
print "%s %.2f %s %.2f" % ("You have entered Fahrenheit:",fahrenheit,"\nCorresponding Celsius is :",celsius)
 
 
11. 取余.
    (a) 使用循环和算术运算, 求出0~20之间的所有偶数.
    (b) 同上, 不过这次输出所有的奇数.
    (c) 综合(a) 和 (b), 请问辨别奇数和偶数的最简单的方法是什么?
    (d) 使用(c)的成果, 写一个函数, 检测一个整型能否被另一个整型整除.先要求用户输入两个数, 然后你的函数判断两者是否有整除关系, 根据判断结果分别回True 和 False.
 
a. print [nu for nu in xrange(21) if nu % 2 == 0]
 
b. print [nu for nu in xrange(21) if nu % 2 == 1]
 
c. 被2整除
 
d. 
def exact(p,y):
    sigP = "False"
    sigY = "False"
    if p % y == 0:
        sigP = "True"
    if y % p == 0:
        sigY = "True"
    print (sigP or sigY)
 
if __name__ == "__main__":
    import sys
    p = float(sys.argv[1])
    y = float(sys.argv[2])
    exact(p,y)
 
 
13. 转换. 写一个函数把由小时和分钟表示的时间转换为只用分钟表示的时间.
#!/usr/bin/env python
## -- coding: UTF-8 --
## Author:
 
if __name__ == "__main__":
    import time
    nowTime = time.ctime().split()[3]
    mins = int(nowTime.split(":")[0]) * 60 + int(nowTime.split(":")[1])
    print mins
 
 
15. 最大公约数和最小公倍数. 请计算两个整型的最大公约数和最小公倍数.
 
#!/usr/bin/env python
## -- coding: UTF-8 --
## Author:
 
import sys
def getGCD(p,y):  ## GCD, Greatest Common Divisor, 最大公约数
    while not y == 0:
        if p < y:
            p,y = y,p
        else:
            p,y = min(p,y),p-y
    return p
 
def getLCM(p,y):  ## LCM, Lowest Common Multiple, 最小公倍数
    return p * y / getGCD(p,y)
 
if __name__ == "__main__":
    p = int(sys.argv[1])
    y = int(sys.argv[2])
    print "the Greatest Common Divisor of %d and %d is %d" % (p,y,getGCD(p,y))
    print "the Lowest Common Multiple of %d and %d is %d" % (p,y,getLCM(p,y))
 
 
 
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 python
## -- coding: UTF-8 --
## Author:
 
remainder = float(raw_input("Enter a number AS TotalCost every month:\n"))
payCost = float(raw_input("Enter a number AS payCost every month:\n"))
 
print "%23s %25s" % ("Amount","Remaining")
print "%s %16s %25s" % ("Pymt#","Paid","Balance")
print "%s %16s %25s" % ("-------","-------","------------")
print "%3d %18s%.2f %15s%.2f" % (0,"$",0,"$",remainder)
 
for count in xrange(int(remainder)):
    if remainder <= payCost:
        payCost = remainder
        print "%3d %16s%.2f %15s%.2f" % (count,"$",payCost,"$",(remainder-payCost))
        break
    else:
        print "%3d %16s%.2f %15s%.2f" % (count,"$",payCost,"$",(remainder-payCost))
        remainder -= payCost
 
 
 
17. 随机数. 熟读随机数模块然后解下面的题.
    生成一个有 N 个元素的由随机数 n 组成的列表, 其中 N 和 n 的取值范围分别为(1 < N <= 100)和(0 <= n <= 2的31次方 - 1). 然后再随机从这个列表中取 N (1 <= N <= 100) 个随机数出来, 对它们排序, 然后显示这个子集.
 
#!/usr/bin/env python
## -*- coding: UTF-8 -*-
## Author: 
 
import random
 
range = []
unitNu = random.randint(0,100)
 
for unit in xrange(unitNu):
    range.append(random.randint(0,2**31-1))
    
#print range,len(range)
List = random.sample(range,random.randint(1,unitNu))
#print List,len(List)
List.sort()
print List