教学重点:
枚举算法,生活中问题多个解的推理过程与编程算法之间认识观念的过渡
教学难点:
生活中问题多个解的推理过程与编程算法之间认识观念的过渡
解决方法:
1.游戏情景导入新概念。2.枚举类似的事例解释概念。3. 用相同事例加深理解。
课前准备:
给学生机发送Python-3.4.4.msi,让学生完成安装。
学习要求:
完成“明7暗7姓名“程序得50分,选做并完成”明8暗8姓名“程序额外加20分。
完成”密码18姓名“程序得50分,选做并完成”密码26姓名“程序额外加20分。
以上作业以程序输出正确结果并上交到教师服务器为准,教师将根据收到的作业评分。
教学课时:
1课时
教学过程:
一、情景导入:5分钟
同学们好!我现在开始上课。我们先做一个游戏。请大家看前面的大屏幕:
PPT展示游戏规则是:从A1开始逐个1,2,3报数,每当遇到7或7的倍数同学不出声站起来然后坐下,记下自己的数字。下一个同学继续报8,A7结束后B7接上,循环报数直到结束。
逢7或7的倍数出声没起立的同学站一会直到游戏结束,报错数的同学站一会直到游戏结束。
我们要统计报7的同学和7的倍数的同学。
要求:报数的同学要大声,其余同学请保持安静。
报7的同学我们称为“明7”,7的倍数的同学我们称为“暗7”。我们通过游戏选出了“明7” 和“暗7”,一共有9个。如果我们编程序来筛选“明7” 和“暗7”,应该怎样做呢?这就是我们今天要探究的知识:枚举算法。
PPT展示课题:Python算法入门——用枚举算法寻找问题的多个解
Python算法入门是一个非常挑战性的话题,很多人一听到算法就头大,看到枚举算法更是头疼,感到很难!但今天我将用巧妙的方法给大学解释枚举算法。我们今天的课程同学们要完成至少两个程序的编写python保留三位小数,完成两个程序的编写的同学将得到100分,完成额外两个程序的同学将得到额外40分。我想看看有多少同学完成或超额完成今天的学习任务。同学们有没有信心?
那么我们就先来看看枚举算法的定义!
二、枚举算法的概念:3分钟
PPT展示:把问题的所有可能的“解”都一一列举出来,并按照要求的条件逐个判断每个答案是否是正确的解。这就是枚举算法。
如我们刚才找“明7” 和“暗7”,我们采用的方法是请每个同学把每一个数都报了一遍,最后选出了“明7” 和“暗7”,这个一一列出的过程就是枚举,采用这样的方法就是枚举算法。
PPT展示:再如:我们做选择题:你将四个选项逐个放到题干中测试是否是正确答案,这个过程就是枚举,这种方法就是枚举算法。
那么枚举算法如何编程呢?
三、枚举算法的编程:PPT展示
1. 要判断“明7” 和“暗7”,如何写语句呢?请同学们看大屏幕,请同学们思考:
“明7”就是要在数中看到______?“暗7”就是要求数能被______整除?即余数为0。
PPT展示:请学生讨论1分钟。
如何表示“明7”的语句表示法是我们这节课要学习的内容,请同学们记住:
‘7’ in str(i) 即字符“7”在 i 所代表的数字字符里。 PPT展示
下面请同学们思考:“明8”如何用Python语言表示?我们改动什么地方?
PPT展示:“明8”:‘8’ in str(i)即字符“8”在 i 所代表的数字字符里。
如何表示“暗7”的语句表示法也是我们这节课要学习的内容,请同学们记住:
i%7==0 即在i 所代表的数字用7取余后,余数为0,当余数为0时, i所代表的数就是7的倍数。
下面请同学们思考:“暗8”如何用Python语言表示?我们改动什么地方?
PPT展示:“暗8”: i%8==0
在这里,
% 是取余运算符,结果输出余数。22%7的运算结果是:1 即:22除以7的余数
22的运算结果是: 2
18的运算结果是: 8 PPT展示:
%的输入方法:英语状态按下大写键Shift,再按5,就输入了%。 3分钟
我们用下面的语句完成程序的编写, PPT展示程序,老师演示6分钟
for i in range(1,41): 41指我们现有40个人,range()函数的范围小于第2个结束数的值。
If ‘7’ in str(i) or i%7==0: or的意思是或者; or前后两个条件具备1个即可。
print(i)
下面老师给你们演示程序的录入、保存和执行。还有程序的另存为、改名和执行。
请同学们录入上面的程序,然后按F5执行程序,将程序以 “明7暗7+姓名” 为文件名保存在桌面上,可得结果是:4个明7,4个暗7。 学生练习5分钟
启动IDLE的过程:
开始→所有程序→Python3.4文件夹→IDLE→File→New File→输入程序→按F5→执行程序→先保存程序→输入文件名:“明7暗7自己的姓名” →保存位置先桌面→单击“保存”→可看到输出结果。
提示:
程序必须用英文输入法录入。
正确完成本项练习后不要关闭你们编写的程序窗口!可以关闭程序执行的窗口。
学有余力的同学完成本项作业后可做额外的练习,老师将根据你们上交的作业额外给你们加分。选做练习请你们另打开你们计算机桌面上的《Python算法入门用枚举算法寻找问题的多个解选做练习》查看具体要求。现在老师给你们作示范。
选做练习。请将100以内含有明8和暗8的数找出来。方法是将“明7暗7+姓名”程序另存为“明8暗8+姓名”,保存在桌面上,然后修改程序内容,再执行。
你将怎样修改程序?
老师查看学生机器上程序的执行情况,总结学生完成情况。
2.我们再来看内容变化稍微大一点的问题:有个同学密码锁的三位数密码忘了,他只记得个位数是8,其他位含有1但不知道在哪一位置。参考上面的实例,你能编写程序枚举出可能的密码呢? PPT展示问题。
讨论一:
上面的实例是在1到40之间找明7暗7,range()函数中括号内的起始和终止数字分别是range(1,41)。现在是三位数密码,我想问大家:
最小的三位数是什么? 100
最大的三位数是什么? 999
请你们讨论一下:range()函数中的起始数和结束数应该如何设定?
range(100,999)
由于range()函数的终止数本身不执行,我们应该将数据范围设为:
range(100,999+1) 或者直接就设为:range(100,1000)
讨论二:百位和十位有1应如何处理?即如何表示“1”在百位和十位?或者说:我们要把三位数字变为两位数字,那么如何把三位数字变为两位数字呢?
如123如何让它只留下 12,请你们想想:有什么方法?谁知道?
那我告诉你们:每个编程语言都有很多方法实现上述要求,我今天告诉你们最简单的:
把这个三位数除以10后,只保留整数。
Python有一个运算符专门做这样事情:“//”表示整除。
如 123//10 就得到了12 非常方便。
再如216//10 就得到了21
如果用字母代替数字,我们可以用 i//10 来表示。
图1用10对列表中的数整除
讨论三:i%7==0 是取7的倍数,即余数应为0,现在最后一位数为8,即余数要求为8,如何表示?
显然 ==后面应改为:8
一个三位数,要把它的个位数都能用取余运行符取出来,应该用什么数来取余数? 10
如101,102,103,104,105,106,107,108,109,110,我们用一个数来取余,能把上述三位数字中的个位数都能余下,需要用什么数来取余数?
图2用10对列表中的数取余
i==8 6分钟
请你们将“明7暗7+姓名”程序或“明8暗8+姓名”,程序另存为“密码18+姓名”,然后按上面的讨论结果修改程序,按F5保存后执行程序,看看程序为我们枚举了多少个可能的解?
教师示范:
for i in range(100,1000):
if ‘1’ in str(i//10) and i==8:
print (i)
将上述程序输入计算机,试着保存为“密码18+姓名”,运行下看看枚举的结果 2分钟
如果密码锁的三位数密码个位数是6,其他位有个2,我们如何修改程序。请你们改改试一下。
for i in range(100,1000):
if ‘2’ in str(i//10) and i==6:
print (i) 2分钟
将上述程序输入计算机,试着保存为“密码26+姓名”,运行下看看枚举的结果
四、小结: 2分钟
1.我们今天探究了枚举算法,枚举算法就是将可能的答案一一列举出来,然后用条件语句判断出正确的答案。正确的答案可能不止一个!
2.在探究枚举算法的时候,我们还用到了’7’ in str(i) ,str()是将数字格式转换为字符格式。
or 是或,意思是前后两个条件有一个为真就可以。
and是与,意思是前后两个条件必须同时为真。
i%7==0: %是取余运算符, ==是逻辑运算符,=是赋值运算符。
逻辑运算符判断是否相等。赋值运算符是将后面的值赋给前面。
a=10 a=a+10
i//10://是整除运算符。 /除法运算符,/后的结果可能有小数。这些你们课下都可以试试。
五、上传作业:
请将你们编写的四个程序上传到老师的服务器。请注意需要添加4个文件。
2分钟
六、课后作业:
现有足量的1克、2克、5克、10克砝码python保留三位小数,现在要求称100克食盐,共允许取用40枚砝码,要求每种砝码至少使用1枚,共有多少种称量方案?
请编写程序枚举可能的方案。 你们班级的QQ群里有我上传的书,里面第56页有编写好的程序。
我这儿有改进后的程序供你们参考。你们将这两个程序输入计算机后分别执行一下试试,看看有什么区别?
图3砝码称量方法改进
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: wxii2p22