编程教育公益活动
《泰山版初中信息技术教材编写说明及编程教育与人工智能教育的教学建议》
教材编写组 2019年3月
声 明
本材料仅供教材分析、教学参考使用,具体教学要求和教学评价请按当地教研部门相关规定实施。
本材料可用于教学研究等公益活动,请勿进行商业活动,在百度文库等网络传播敬请免费、无扣点数、金币等条件提供,蓝调百香果保留版权。
编写人员
孙波 王爱胜 程强 邢攸林 张渤 丛兴滋 杨伟 杨梅
刘子妍 段金英 苏澎 等
(随时增加)
有志参加编程指导公益活动的请邮件:347679968@qq.com
发现错误或有更好建议也请邮件给我们,谢谢!
目前正在开展的活动:针对初学Python课程,设计有趣、实用的小程序,以学习算法为主,以编程技巧为辅。
微项目3 用迭代算法探究数据变化的规律
理解迭代思想并运用循环结构完成迭代算法的编程实现,掌握迭代变量、迭代表达式的识别技巧,学会利用迭代算法设计程序进行问题推导,能够利用迭代算法分析问题,了解Python中的数学函数模块。
迭代思维:
迭代是一种渐渐进步的思维,是一中增长,是一种递进,可累加、可累乘、可进化、可增值... ...
迭代算法:
(1)累加迭代 (2)自动迭代
预计:1课时
1.观察数据累加的迭代算法
探索识别数据累加规律,然后用顺序结构的程序表述出来,就是最简单的迭代算法程序。
【程序范例】
甲乙两位同学制定了跳绳计划:
甲同学第一天跳绳100下,第二天开始每天增加5下;
乙同学也决定第一天跳绳100下,以后每隔一天增加10下。
教学建议:
(1)可让学生使用纸上推演计划的执行。
(2)特别建议提前一周安排学生预先选择一种这群,每天进行跳绳练习, 提高项目学习的价值。
采用顺序结构求解运动量的程序如下(前3天示例):
#!/usr/bin/env python3#甲同学每天的跳绳次数a1=100 #第1天a2=a1+5 #第2天a3=a2+5 #第3天#乙同学每天的跳绳次数b1=100 #第1天b2=b1 #第2天b3=b2+10 #第3天# 显示甲乙同学3天跳绳的总数print("甲同学3天共跳绳:",a1+a2+a3,"下")print("乙同学3天共跳绳:",b1+b2+b3,"下")
【知识了解】
迭代是重复反馈过程的活动,其目的通常是为了渐渐达到所需目标或结果。
每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
值得注意的是:简单的重复,没有新值的产生不算迭代。
【学习指导】
①体验用旧值重复递推新值的过程,体会迭代的思想,观察甲乙同学跳绳数次数差异。
②引导学生在练习本上推算后续天数的跳绳次数,更新代码补充第4天、第5天的数据。
③提出计算第10天甚至第30天跳绳次数要求,引出循环结构缩减代码行数的设想。
2.用循环结构实现自动迭代
采用循环结构程序提高迭代算法的效率。
【程序范例】
教学建议
循环是比较难的程序结构,可以从自动化功能分析程序代码的意义:
While是符合情况的就一直做。
循环条件的设计是关键的一步。
用迭代算法求解运动量,采用条件循环(while循环)的思路,程序代码如下:
#!/usr/bin/env python3# 甲乙同学第i天当天的跳绳次数分别用a、b表示a=100 # 甲同学第1天当天的跳绳次数b=100 # 乙同学第1天当天的跳绳次数# 甲乙同学第n天累加的跳绳次数分别用x、y表示x=a # 甲同学第1天累加的跳绳次数y=b # 乙同学第1天累加的跳绳次数i=2 # 从第二天开始迭代计算n=30 # 跳绳的总天数
while i<=n: # 当前天数小于等于总天数时开始迭代计算
a=a+5 # 甲同学每天都增加5次
if i%2==1: # 当前天数为奇数时 b=b+10 # 乙同学的跳绳次数增加10次 # 计算甲乙同学跳绳的次数迭代——累加 x=x+a y=y+b # 当天计算完毕,推进到下一天
i=i+1
# 显示甲乙同学n天跳绳的总数print("甲同学",n,"天共跳绳",x,"下")print("乙同学",n,"天共跳绳",y,"下")
【技术体验】
条件循环(while)和计数循环(for)。
教学建议:条件是预判情况运行。计数循环是按次数运行。可以通过一定 活动类比。
(1)条件循环:如吃自助餐,吃饱为止,可以多次少取。
(2)计数循环:如吃配餐,数量有限制。
其他更多比喻也可同学之间相互分享。
# 条件循环i=1while i<100: if i%2 == 1: print("条件奇数",i) else: print("条件偶数",i) i=i+1 # 必须要有累加,否则死循环# 计数循环for i in range(1,100): if i%2 == 1: print("计数奇数",i) else: print("计数偶数",i)
【知识了解】
迭代算法是用计算机解决问题的一种基本方法,它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,所以特别合适采用循环结构编写程序代码。
【学习指导】
在使用迭代算法解决问题时,需要注意:
① 确定迭代变量。在可以使用迭代算法解决的问题中,至少存在一个迭代变量。
② 建立迭代关系式。这是解决迭代问题的关键。
③ 控制迭代过程。要用循环结构程序让迭代自动进行。
【程序实验】
日本数学家谷角静夫在研究自然数时发现了一个奇怪现象:对于任意一个自然数 n ,若 n 为偶数,则将其除以 2; 若 n 为奇数,则将其乘以 3 ,然后再加 1 。如此经过有限次运算后,总可以得到自然数 1 。人们把谷角静夫的这一发现叫做『谷角猜想』。
要求:编写一个程序,由键盘输入一个自然数 n ,把 n 经过有限次运算后,最终变成自然数 1 的全过程打印出来。
# 谷角猜想的验证程序n=int(input("请输入一个自然数:"))
print("输入的自然数n=",n)
while n>1: if n%2 == 1: n=3*n+1 print("奇数(乘三再加一)n=",n) else: n=n//2 print("偶数(除以二)n=",n)
print("结束")
科学探究:迭代器
迭代还是一种访问集合元素的方式,迭代器是一个对象,它可以记住访问的位置,表示可迭代的数据集合。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束(如果想访问中间的某个元素,需要把它前面的所有元素都遍历后,才能访问)。迭代器只能往前不会后退。
技术探索:Python中数学函数的使用
Python内置了一些库,称之为标准库,相关模块可以直接导入使用。math库(或称数学函数模块)是一个Python标准库,它封装了一组数学函数。
教材采用故事法以『国王的麦粒』为例引入了计算问题。故事中,有一句很关键的话『每一小格都比前一小格多一倍』,由于『第一小格放1个麦粒』,所以第n个格中的麦粒数为『2的n-1次方个』。
#!/usr/bin/env python3from math import * # 导入math模块s=0k=int(input("前多少格?"))for n in range(1,k+1): m=int(pow(2,n-1)) #调用pow()函数 s=s+m #累加求和
print("第%2d格:%d粒,当前总数%d"%(n,m,s)) #显示过程数据
print("前%d格总共%d粒"%(k,s))
以数学函数模块为例介绍Python内置标准模块的使用。
结合麦粒质量计算程序的输出结果,探讨提高数据可读性的意义和方法。
注:关于int()的意义比较深奥,涉及数据类型的存储位数,不建议学习,应用即可。
学习评测
按2种不同层次水平评测。
★ 一星难度
① 迭代是用旧值重复递推新值的过程,下述事例哪些属于迭代?( )(多选)
A、 荡秋千 B、微信跳一跳小游戏
C、累加计算(例:从1加到100)
D、累乘计算(例:求解100的阶乘)
② 我们采用以下哪种结构实现自动迭代最为合适()
A、 顺序结构 B、选择结构 C、循环结构 C、迭代结构
参考答案:①ACD ②C
★ 二星难度
① 以下关于迭代器的描述,不正确的是()
A、迭代器可以记住访问位置
B、迭代器对象从集合的第一个元素开始访问
C、迭代器访问元素可以往前也可以后退
D、可以使用next()函数来访问下一个数据
② 以下哪项不属于迭代算法解决问题的注意事项:
A、确定迭代变量
B、建立迭代关系式
C、控制迭代过程
D、尽量避免使用循环结构
参考答案:①C ②D