思考再三,还是决定在blog记录下练习《Python核心编程第二版》习题的过程。
英文原版书后是有有些习题答案的,但是基本上都是一些简单问题的答案,而且较少。练习是最好的学习,所以我打算尽可能把能练手的习题做一遍。
我手头只有第一版的印刷版,第二版是电子版,目前无法得知电子版是否和印刷版本一致。
不过每章的习题我打算和第一版都比较一下,如果第一章有一些好的习题在第二章去掉了,我也会贴出来。
希望Pythoner能帮我指出代码中非Pythonic的地方。
我练习的环境是Ubuntu 10.04 X86,python的版本是2.6.5。安装了一堆的modules。 所以代码中我可能不会判断module引入是否失败。
另外,我利用了Python 2.6.5 标准库的doctest模块来做测试,测试用例写在函数说明性文档里,如果运行脚本没有报错,且退出代码是0,表示测试通过,否则会给出大量的报错,更详细的信息请参考官方文档。
前四章都是一些概念性的说明,习题也是一些理论性的说明,就跳过了。
从第五章开始。
5-3 标准类型运算符. 写一段脚本,输入一个测验成绩,根据下面的标准,输出他的评分 成绩(A-F)
A: 90–100 B: 80–89 C: 70–79 D:60–69 F: <60
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e5-3.py could not be found
5-4 取余。判断给定年份是否是闰年。使用下面的公式:
一个闰年就是指它可以被 4 整除,但不能被 100 整除, 或者它既可以被 4 又可以被100 整除。
比如 1992,1996 和 2000 年是闰年,但 1967 和 1900 则不是闰年。 下一个是闰年的整世纪是2400 年。
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e5-4.py could not be found
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 美分这样的结果都是不符合要求的。
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e5-5.py could not be found
5-6 算术。 写一个计算器程序 你的代码可以接受这样的表达式,
两个操作数加一个运算符:
N1 运算符 N2. 其中 N1 和 N2 为整数或浮点数,
运算符可以是+, -, *, /, %, **
分别表示加法,减法, 乘法, 整数除,取余和幂运算。
计算这个表达式的结果,然后显示出来。
提示:可以使用字符串方法 split(),但不可以使用内建函数 eval().
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e5-6.py could not be found
5-8 几何。计算面积和体积:
(a) 正方形 和 立方体
(b) 圆 和 球
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e5-8.py could not be found
5-10 转换。写一对函数来进行华氏度到摄氏度的转换。
转换公式为 C = (F - 32) * (5 / 9)
应该在这个练习中使用真正的除法, 否则你会得到不正确的结果。
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e5-10.py could not be found
5–15. 最大公约数和最小公倍数。请计算两个整数的最大公约数和最小公倍数
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e5-15.py could not be found
5-17 随机数。熟读随机数模块然后解下面的题:
生成一个有 N 个元素的由随机数 n 组成的列表, 其中 N 和 n 的取值范围分别为: (1< N <= 100), (0 <= n <= 231 -1)。
然后再随机从这个列表中取 N (1 <= N <= 100)个随机数出来,对它们排序,然后显示这个子集。
File /Users/wgzhao/Sites/blog.wgzhao.com/source/downloads/code/cpp2nd/e5-17.py could not be found
最后这个题目耍了一点小技巧。