4.12 上机实践

1. 完成本书中的例4.1~例4.23,熟悉Python语言中常用内置数据类型的运算和操作。

2. 编写程序,格式化输出杨辉三角。杨辉三角即二项式定理的系数表,各元素满足如下条件:第一列及对角线上的元素均为1;其余每个元素等于它上一行同一列元素与前一列元素之和。运行效果参见图4-3所示。

提示

用户可以使用“print("1".center(20))”的语句形式在一行上打印20个字符,并且居中对齐。

3. 输入直角三角形的两个直角边,求三角形的周长和面积,以及两个锐角的度数。结果均保留一位小数。其运行效果如图4-4所示。

图4-3 杨辉三角运行效果

图4-4 直角三角形运行效果

提示

(1)math.asin()函数返回正弦值为指定数字的弧度;math.acos()函数返回余弦值为指定数字的弧度。

(2)将弧度转换为角度的公式为

(3)可以使用“round(asin(sinA)*180/pi,0)”的语句形式求锐角A的度数。

(4)可以使用“print(str.format("三角形的周长={0:1.1f},面积={1:1.1f}",p,area))”的语句形式按题目要求输出三角形的周长和面积。

4. 编程产生0~100(包含0和100)的3个随机数a、b和c,要求至少使用两种不同的方法,将3个数按从小到大的顺序排序。其运行效果如图4-5所示(其中,a、b和c的值随机生成)。

提示

(1)方法一:先比较a和b,使得a<b;然后比较a和c,使得a<c,此时a最小;最后比较b和c,使得b<c。

(2)方法二:利用max()函数和min()函数求a、b、c中的最大数、最小数,而3个数之和减去最大数和最小数就是中间数。

(3)利用random.randint(0,100)生成0~100(包含0和100)的随机数。

(4)利用max(a,b,c)返回a、b和c的最大值;利用min(a,b,c)返回a、b和c的最小值。

5. 编程计算有固定工资收入的党员每月所交纳的党费。工资基数3000元及以下者,交纳工资基数的0.5%;工资基数3000~5000元者,交纳工资基数的1%;工资基数在5000~10000元者,交纳工资基数的1.5%;工资基数超过10000元者,交纳工资基数的2%。运行效果如图4-6所示。

图4-5 3个数比较大小的运行效果

图4-6 党费交纳运行效果

图4-7 袖珍计算器运行效果

6. 编程实现袖珍计算器,要求输入两个操作数和一个操作符(+、-、*、/、%),根据操作符输出运算结果。注意“/”和“%”运算符的零除异常问题。其运行效果如图4-7所示。

7. 输入三角形的3条边a、b、c,判断此3边是否可以构成三角形。若能,进一步判断三角形的性质,即为等边、等腰、直角或其他三角形。本题的判断准则参见表4-16。其运行效果如图4-8所示。

表4-16 各类三角形的判断准则

图4-8 判断三角形运行效果

8. 编程实现鸡兔同笼问题。已知在同一个笼子里共有h只鸡和兔,鸡和兔的总脚数为f,其中h和f由用户输入,求鸡和兔各有多少只?要求使用两种方法:一是求解方程;二是利用循环进行枚举测试。其运行效果如图4-9所示。

图4-9 鸡兔同笼运行效果

提示

(1)已知鸡和兔的总头数为h、总脚数为f,假设鸡有c只、兔有r只。

(2)方法一:求解方程法。由公式:

解得:

由公式推得,鸡和兔的总脚数f必须是偶数,并且鸡和兔的只数必须是非负整数。

(3)方法二:利用循环进行枚举测试。鸡的只数c的取值范围为0~h,则兔的数量r为(h-c),如果满足条件(2c+4r==f),则求得解。

9. 输入任意实数x,计算ex的近似值,直到最后一项的绝对值小于10-6为止。其运行效果如图4-10所示。

10. 输入任意实数a(a≥0),用迭代法求,要求计算的相对偏差小于10-6。其运行效果如图4-11所示。求平方根的迭代公式为:

图4-10 ex运行效果

图4-11 平方根运行效果

11. 我国汉代有位大将,名叫韩信。他每次集合部队,只要求部下先后按l~3、1~5、1~7报数,然后再报告一下各队每次报数的余数,他就知道到了多少人。他的这种巧妙算法被人们称为“鬼谷算”,也叫“隔墙算”,或称为“韩信点兵”,外国人还称它为“中国余数定理”。即有一个数,用3除余2,用5除余3,用7除余2,请问0~1000中这样的数有哪些?其运行效果如图4-12所示。

12. 一球从100米的高度自由落下,每次落地后反弹回原高度的一半,再落下。求小球在第10次落地时共经过多少米?第10次反弹多高?其运行效果如图4-13所示。

图4-12 韩信点兵运行效果

图4-13 自由落体运行效果

13. 猴子吃桃问题。猴子第一天摘下若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃了前一天剩下的桃子的一半多一个。到第8天发现只剩一个桃子了。请问猴子第一天共摘了多少个桃子?其运行效果如图4-14所示。

提示

这是一个递推问题。假设第n天的桃子数为Pn,前一天(第n-1天)的桃子数为Pn-1,则,即Pn-1=2(Pn+1)。现在已知第8天(n=8)的桃子数P8=1,根据公式得第7天的桃子数P7=4,依此类推,可以求得第1天的桃子数P1

14. 计算Sn=1+11+111+1111+…+1111…111(最后一项是n个1)。提示:第1项T1=1;第2项T2=T1*10+1;…;第n项=T(n-1)*10+1。n是一个随机产生的1~10(包括1和10)中的正整数。其运行效果如图4-15所示。

图4-14 猴子吃桃运行效果

图4-15 计算Sn(其中n为随机数)的运行效果