新教材习题解析之python循环结构
说在前面
下学期开始,绝大多数学校就要开始上新教材内容了,必修一《数据与计算》的主要内容是Python语言学习。新教材的理念是编程教学不应该只教语法,更重要的是教学生如何解决问题,如何使用计算机编程解决实际问题。所以命题的思路不应该是抠语法,应尽量避免考查语法细节,要把重点放在数学建模和解决问题上面。
受《新时代领航技术同步用书》编委会的邀请,我也尝试着编制了一些题目,尽可能按照新课标的要求,力求能够激发学生思考和考查学生的计算思维。今天主要和大家分享2道关于Python循环结构的开放性题目。
由于新教材是块新大陆,我们都是在摸索前行,加之本人水平有限,在描述题目用语和控制题目难度方面都存在不足,敬请大家批评指正。
例4.(开放题)计算S = 1/4 + 1/16 + 1/64+ 1/256 + …的值。
(1)这道题目是求无穷级数的和,其各项的变化规律是什么?
(2)设计算法要遵循有穷性原则,在本题中不能让程序永远执行下去,你打算如何设计算法以避免出现死循环?
(3)请编写程序实现你设计的算法,并添加必要的注释。
(4)除了编程计算S的值,你是否还能想到其他的巧妙方法?
解析:(1)各项的变化规律是:第n项的值为4的n次幂的倒数。
(2)我们可以发现当n越大时,该项对S的影响越小。故可以通过设置n的值来控制循环的次数,或者比较相邻的两项的值,当它们的差值小于某个数时,说明S的精确度已经很高了,可以退出循环。
(3)算法1:我们可以发现,当n=30时,1/4^30的数量级为10^(-19),这是一个非常小的数了,所以我们可以让循环执行30次,就可以得到S较为精确的值。参考代码如下:
s = 0
#计算前30项,即可获得较为精确的S值
for i in range(1, 31):
s += 1 / 4 **i #或s += 4 ** -i
print(s)
算法2:我们可以规定当相邻两项的差小于10^(-20)时退出循环,这样也能获得精确度已经很高的S值。参考代码如下:
s = 0
d = 10 ** -20 #最小差值
a, b = 1/4, 1/16#前两项
#当相邻两项的差小于d时退出循环
while a - b >= d:
s += a
a, b = b, b / 4
print(s)
(4)除了编程计算S的值,我们还可以使用等比数列求和公式来计算S的值。因为等比数列的公比q=1/4,故当n值很大时q^n约等于0,故可以将求和公式简写为S=a1/(1-q),代入数据得到S=1/3。
还可以使用作图法来解决本题。如下图所示,画一个平分为4份的正方形,将正方形的右上角的1/4部分再次划分为4份,以此类推。可知每个黑色的小正方形面积刚好依次为1/4,1/16,1/64,…。而黑色部分面积刚好是总面积的1/3,故S=1/3。
拓展思考:
11.(开放题)“海龟作图”是一款神奇的软件,只需简单的几行代码,就可以画出各种复杂的图形,有时候只要更改一下画笔转折的角度,就能做出各种不同的漂亮图形。在下面的程序中,我们用变量angle存储画笔转折的角度,以下就是角度angle分别为90,120和144时作出的图形。
你知道如此美妙的图案是如何画出来的吗?
下面的代码能够实现上述功能,请仔细阅读代码,回答以下问题,并思考能否修改参数angle或者修改代码,画出更多漂亮的图形。
(1)变量w中存储的值用来表示什么?若将其初值设置成50,图像有何变化?
(2)内层循环变量j可以取到哪些值?若将语句for j in range(6)改成for j in range(10)会对程序产生什么影响?
(3)内层循环中语句w = w+ 2的作用是什么?若将其改成w = w + 10,图像会有何变化?
(4)修改参数angle的值分别为60,150和180,观察生成的图像,你能想象出angle=180时的图像是什么样子的吗?
import turtle as tt
tt.TurtleScreen._RUNNING = True # 启动绘图,在IDE中运行加这句可避免报错
c = [(18,242,13), (255,0,0), (136,209,46), (132,104,22),(0,200,200), (243,236,86)]
tt.ht()
tt.speed(0)
tt.colormode(255)
w = 5 #①
angle = 144
tt.pensize(2)
for i in range(20):
for j in range(6): #②
tt.pencolor(c[j])#设置不同颜色
tt.fd(w)
tt.rt(angle)
w = w + 2 #③
tt.done()
需要本文word版和拓展思考答案的,可以加入“Python算法之旅”知识星球参与讨论和下载文件,“Python算法之旅”知识星球汇集了数量众多的同好,更多有趣的话题在这里讨论,更多有用的资料在这里分享。
我们专注Python算法,感兴趣就一起来!
相关优秀文章: