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