本节书摘来自华章计算机《从问题到程序:用Python学编程和计算》一书中的第2章,练习,作者 裘宗燕,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
练习
概念和理解
1. 复习下面概念:表达式,语句,赋值,控制结构,函数,提示符,值,求值,语法错误,单词,整数,浮点数,运算符,一元运算符,二元运算符,优先级,结合顺序,字面量,语法错误,续行,续行符,尾数,指数,精度,溢出,数值计算,误差,近似计算,对象,类型,整型,浮点型,类型名,数值类型,内置类型(标准类型),类型转换,强制类型转换,内置函数(标准函数),程序包,函数调用,实际参数(实参),返回值,程序包,导入,字符串,下标,下标越界,字符串长度,拼接,切片,变量,标识符,关键字,赋值语句,赋值,赋值符,编程,顺序计算,脚本,文件,扩展名py,输出函数,问题和实例,提示串,程序崩溃,注释,关系表达式,逻辑表达式,条件语句(分支语句,if语句),组合语句中的段,段的头部,段的体,结构的递归性,直线型程序,执行路径,分支程序,重复计算,循环语句(循环结构),迭代器,循环头部,循环体,迭代,牛顿迭代法,break语句,continue语句,三种计算流程模式,值抽象,函数抽象,函数定义,形式参数(形参),函数返回值,函数调用,实际参数(实参,实参表达式),扩展赋值符,条件表达式,
2. 假定首先做下面的赋值:
length = 2.5
width = 4
something = "."
在此之后,下面表达式将给出什么结果:
length * 4
(length + 2) * width
something * 5
something int(width 2)
3. 请用双引号形式写出下面的字符串:
a) '"I'm fine", he said.'
b) """"Is this
the book
of you?", she asked."""
4. 请分别写出对应于下面三个句子的Python字符串字面量,包括所有引号:
"He said 'I do not know that man'", Nancy added.
We'll go to there soon.
"Couldn't you give me a hand?"
5. 首先自己分析下面逻辑表达式的值,再用Python系统检验:
True and not True
False or not False and False or not True or not False
3 > 2 and 5 <= 4 or 4 > 3 and 7 < 9
6. 在下面表达式的计算过程中,哪些地方将发生类型转换,各是从什么类型转换到什么类型,表达式计算的结果是什么?
a) 3 * (2 + 4.5) - 12 + 44
b) 3 int(sqrt(34)) - sin(6) 5 + 3.56
c) cos(2.5 + 4) - 6 * 27 + 1526 - 2.4
7. 下面字符序列中哪些不是合法的变量名:
-abc __aa for pp.288 to be
IBM/PC ms-c #micro m%ust tihs
while r24_s25 __a__b a"bc _345
8. 用Python系统的一个方便的地方就是很容易做试验。请设计一些试验,确认正文中的一个说法:计算中涉及的整数越大,计算进行得越慢。
9. 请通过试验,设法确定Python能表示的最小和最大的正浮点数。其中最小的浮点数要求给出准确的结果,最大浮点数给出10位十进制有效数字的结果。
10. 选择问答题:
a)表达式2 ** 2 ** 3的值是( )。
A. 128 B. 64 C. 256 D. 512
b)表达式6 ** 2 / 9 * 2的值是( )。
A. 2 B. 8 C. 2.0 D. 8.0
c)下面哪些标识符可以用作变量名( )。
A. final B. global C. int D. print
d)下面哪些是Python关键字( )。
A. and B. while C. int D. math
e)下面哪些语句可能导致退出循环( )。
A. return B. continue C. import D. break
f)设x和y是整数,下面表达式中等价于x != y的有( )。
A. not(x == y) B. x > y and x < y
C. x > y or x < y D. x >= y or x <= y
g)下面哪个语句在Python中不合法( )。
A. x = y = z = 1 B. x = (y = z + 1)
C. x, y = y, x D. x += y
h)对下面系统输出的正确解释是( )。
>>> print(1.8 - 0.6*3 == 0)"
False
A. 等于运算符右边应该写 0.0。 B. print不能输出逻辑结果。
C. 浮点数计算有误差。 D. Python系统的实现有问题。
11. 设s的值是字符串"1234567890",请写出下面字符串切片的值( )。
A. s[:30:2] B. s[:-1:-2] C. s[-4:] D. s[-1:1:-3]
12. 请借助于各种字符串操作,用最简洁的方式构造出一个字符串,使得用print输出它将得到一个8×8个格子的棋盘(没有黑白填充的国际象棋棋盘)。
13. 数学知识告诉我们,对于充分大的正整数n,一定有。请利用Python找出使这个不等式成立的最小正整数。
编程练习
1. 用Python计算下面各个表达式的值:
2. 利用Python计算:
a)半径3.4的圆球的体积;
b)底半径2.5,高3.24的圆锥体的体积;
c)一个中空圆柱体,外径3.45,内径2.33,高4.6,求其体积;
d)假定一本书34.5元,目前网上书店打85折,邮费按公斤计每公斤1.8元,不足一公斤按一公斤计费,每本书0.3公斤,问买24本书总共需多少元;
e)目前百米世界纪录是由博尔特于2009年8月17日在德国柏林创造的,按其速度环绕地球赤道一周需要多少时间?从地球跑到月亮呢?从地球跑到太阳呢?(请按天/小时/分/秒给出结果。)
3. 利用Python的math包检验一些三角恒等式。采用具体的数值检验,计算等式两边的值和它们的差。可以在代码里写好具体数值,也可以通过人输入。可以考虑下面写法,以便执行时看到具体情况:
a = ... # 计算恒等式左边的值
b = ... # 计算恒等式右边的值
print(a, b, a - b)
4. 铁的比重为7.86,金的比重为19.3。请写一个程序,给它圆球的半径,它计算并输出具有该半径的铁球和金球的重量。
5. 试验正文中求二次方程根的程序,求几个二次方程的根。
6. 基于正文中求二次方程根的程序写一个程序,它能用于验证初等代数给出的二次方程求根公式是正确的,求根程序给出的结果误差不大。
7. 写一个简单程序,它执行时输出一些有名的英文句子或诗。或输出李白的“望庐山瀑布”和另外几首你喜爱的唐诗宋词。(请注意,字符串引号必须是英文引号。)
8. 如果四边形四个边的长度分别为a、b、c、d,一对对角之和为2α,则其面积为:
9. 修改已知四边长求四边形面积的函数,增加对各种参数错误情况的检查和处理(如返回值0),用各种实例数据检查你的函数能否检查出所有可能出现的错误情况。总结一下你定义的函数有哪些不足之处,应从中吸取哪些教训?
10. 请定义下面函数:
a)已知立方体的边长,求其表面积;
b)已知圆柱体的底半径和高,求其体积,求其表面积;
c)已知圆球半径,求其体积,求其表面积。
11. 请定义函数distance(x1, y1, x2, y2),它计算坐标分别为x1、y1和x2、y2的两个平面点之间的距离。
12. 定义函数:double tmax(double, double, double),它返回三个参数中最大的一个。写一个主函数试验各种参数情况。
13. 查看有关公式,写求解并输出一元三次方程的根的函数。
14. 分析本章正文中给出的求二次方程根的函数,看它缺乏对哪些特殊情况的处理。补充这些处理,在需要时输出适当的信息,使之成为一个更完整的函数。请用各种特殊情况和一般情况测试你完成的函数。
15. 请写程序输出不大于n的所有不能被7整除但能被3整除的自然数。考虑用两种不同的方法完成这一工作。
16. 请写一个程序,从a开始到b按步长d逐一检查math包中sqrt的计算结果,看看其返回值sqrt(x)的平方与x的差。输出一个表格显示有关信息。先考虑固定的a、b和d,而后考虑由输入得到这几个基本参数。
17. 写一个程序,从a开始到b按步长d比较math包的求平方根函数和课堂给出的求平方根程序,在一行里输出这两个函数值和它们之差的绝对值,并在最后输出误差的平均值。请以比较清晰的方式输出。先考虑固定的a、b和d,而后考虑由输入得到这几个基本参数。
18. 请写一个程序,其功能是在一行里输出0到90°之间(包括两端点)每隔5°的角度值以及其正弦、余弦函数值。
19. 在中国,评价汽车的油耗用每100公里耗油升数作为指标,在英美采用的指标是每加仑行驶的英里数(mpg)。请定义两个函数mpg_to_lit100和lit100_to_mpg,它们分别完成两个方向的数据转换。
20. 法律规定每周5个工作日,每天工作时间为8小时。此外,工作日超时工作工资为正常工资的150%;休息日工资为正常工资的200%。请查出你所在地的最低小时工资额,并定义一个函数,计算工作人员的一周工资。
21. 1)不用函数,直接写一个主程序计算并输出直径为100mm和150mm的金、银、铜、铁、锡球的重量(以kg为单位输出)。
2)重做同一个程序,先定义一个函数求直径为x比重为y的圆球的重量,再写程序调用该函数完成所需工作。请比较这一程序与不用函数的程序,它们的长度和易出错程度。假设现在要求修改所用圆周率的精度,考虑用两种方式写程序的修改难度。
3)请写程序,求出边长为100mm和150mm的金、银、铜、铁、锡立方体的重量。你可以利用前面的程序吗?是否很容易修改前面程序,完成这一计算?比较不用函数的解法和使用函数的解法在易修改和重复使用方面的效用。
22. 请查银行1年定期存款的利率和5年定期存款的利率。假定现在存入100元钱,存款到期后立即将利息与本金一起再存入。请写程序计算按每次存1年和按照每次存5年,共存50年后两种存款方式的得款总额。对两种情况每隔5年输出一次当时的总金额。
23. 写一个函数,它以两个电阻的值作为参数,求出并联的电阻值。
24. 费马大定理说对于,不存在实数a,b,c使得。请定义一个函数check_fermat(a, b, c, n),当上述等式成立时它输出Fermat is wrong,否则输出I can not find that Fermat is wrong。再写一段驱动函数,它反复输出提示符,读入数据后调用上面函数,检查费马大定理是否正确。
25. 参考第2题的(d)项,定义一个函数,对任何书籍单价及其重量(及邮费),以及打折率和本数,计算出总价。
26. 请定义一个函数count(s, c),它检查字符串s中单个字符c(用只包含一个字符的字符串表示)出现的次数,返回这个次数。
27. 1939年美国作家Ernest Vincent Wright写了一本超过5万个词的小说Gadsby,其中没用一次字母e(注意,e是英文中使用最多的字母)。请定义函数has_no(s, c),它检查字符串s里是否不出现字符c,如果没有就返回True,否则返回False。
28. 一个单词是字符串里连续的一段非空白字符。请定义函数has(s, w),它检查字符串s里是否出现单词w,如果出现就返回True,否则返回False。注意,这里你可能需要用到字符串长度、字符串切片的操作。只能使用本章介绍的几个字符串操作。
29. 英文句子里用空格分隔不同的英文单词。请写一个程序,它输入一个句子,按从左到右的顺序确定该句子里的一个个单词,分别输出,一行输出一个单词。写程序时只能使用本章介绍的字符串操作。
30. 请编写一个程序,要求用户输入一个大写英文字母,程序根据输入字符在字母表里的顺序位置n输出一个高度为n的金字塔图形,使最下一列的中间字母是用户输入的字母。例如,用户输入E时,程序将产生如下输出:
31. 在计算机上试验本章正文中的一些程序。观察程序运行的情况。对它们做一些你自己想到的修改或扩充,运行它们,设法理解和解释程序的行为。