内容正文:
《Python程序编写入门》(高教版) 教案
课 题
实战:红包模拟
课 型
理论
课 时
2
授课班级
授课时间
授课教师
教材分析
本节以"发红包、抢红包"这一贴近学生日常生活的场景为载体,引导学生综合运用循环结构、列表存储、random模块随机数、格式化输出等知识,编写一个"发红包"模拟程序:由用户输入红包总金额和红包个数,程序按一定算法将总金额随机拆分成若干份并逐一发放。本节一方面巩固了第3章所学的程序结构,另一方面渗透了"将现实生活问题抽象为程序模型"的算法设计思想,同时引导学生关注随机数的"随机性"与"边界条件"等编程细节,对提升学生综合编程能力和解决实际问题能力具有重要意义。
学情分析
中职计算机应用专业已系统学习了Python的输入输出、数据类型、运算符,以及顺序结构、选择结构和循环结构,具备编写简单分支、循环程序的基础能力。但学生此前所学多以单一语法结构的小程序为主,尚缺乏将循环、列表、模块导入等知识综合运用的经验,对random模块、列表的随机取值、循环体内累加/更新变量等综合逻辑较为陌生。学生对微信抢红包等生活场景非常熟悉、兴趣浓厚,适合采用"生活情境导入—算法拆解—上机实战—小组互评"的方式组织教学,让学生在动手实践中体会程序的乐趣与实用价值。
学习目标
知识目标:
1.理解random模块中uniform()函数的随机数生成逻辑;
2.掌握迭代器的核心概念、iter()与next()方法的调用规则;
3.熟悉生成器的定义方式、yield关键字的作用及惰性执行的运行机制。
技能目标:
1.能够编写Python程序实现普通红包均分与拼手气红包随机分配的核心算法;
2.可自定义类实现迭代器协议以支持自定义对象的遍历操作;
3.能利用生成器高效处理流式数据,解决大数据量场景下的内存占用问题。
素养目标:
1.通过红包算法模拟案例培养逻辑推理与随机数应用能力,深入理解Python迭代与生成的底层运行原理;
2.在代码实现中提升抽象思维与代码复用能力,逐步养成模块化设计、规范化编码的专业编程习惯。
学习重难点
重点:
1.import random模块及random.randint()随机函数的正确使用;
2.利用循环和列表保存并遍历随机生成的每一份红包金额;
3.红包模拟程序"输入总额与个数→随机拆分→输出"的完整流程设计。
难点:
1.保证所有红包金额之和恰好等于总金额(余额处理、最后一份直接取余额);
2.随机数生成范围的合理设定,避免出现0元红包或金额出现大量小数;
3.循环结构、列表存储与随机数生成三类知识在同一个程序中的综合协调运用。
教学方法
案例分析、讲授法、小组讨论法
课前准备
1.查找random模块随机数运行演示、红包拆分算法演示、列表遍历示例等教学资料,课堂演示使用。
2.准备课堂任务单、红包代码填空练习、小组讨论题,安排机房上机环境。
3.学生课前预习3.6节内容,思考"如何用程序把一笔钱随机分成若干份",了解微信抢红包的现象与规则。
2.学生课前预习。
教学媒体
电子课件、多媒体视频
教学过程
教学环节
教师活动设计
学生活动设计
设计意图
活动一:
创设情境
生成问题
【课程导入】
1.生活化案例导入:展示微信"抢红包"界面截图,抛出现象问题:大家每天都在抢红包,所有人抢到的金额加在一起恰好等于包的总金额,而且似乎"随机",这个"随机拆分"是如何用代码实现的?由此引出本节课实战项目"红包模拟"。
2.下发课堂任务单,逐条解读三维学习目标:知识目标掌握random模块、列表、循环;技能目标独立完成红包模拟完整代码;素质目标建立"生活问题转代码"的编程思维,明确本节课重难点。
【新知识传授】
1.播放配套教学短视频:random随机数生成演示、for循环遍历列表动画、红包拆分过程演示。
2.梳理本节课内容主线:导入random模块→构建随机拆分算法→用列表保存金额→循环遍历输出。
【练一练】
观看视频后提问:1、Python要生成随机数需要先做什么?2、random.randint(a,b)生成的数范围是什么?3、用什么结构可以一次性存放多份红包金额?
1.接收并查看本节课堂任务书。
2.通读三层学习目标,带着本节课重难点开展学习。
3.完整观看配套教学视频,观察随机数、列表、循环运行逻辑,思考红包拆分的实现思路。
4.主动举手回答教师提问,分享自己对随机数、列表的初步理解。
5.跟随教师标注重难点,明确本节课学习目标。
1.以学生熟悉的"抢红包"场景导入,贴近生活,让学生带着实际需求针对性学习。
2.下发任务单明确学习方向,通过视频可视化随机数与列表运行逻辑,调动学生编程学习积极性。
3.口头提问快速摸底学生预习基础,为新课讲授铺垫。
活动二:
调动思维
探究新知
【新知识传授】
1.模块一 random随机数与列表基础讲授
①讲解import random模块的导入方法,random.randint(a,b)返回[a,b]区间随机整数、random.uniform(a,b)返回区间随机小数的用法;
②讲解列表的定义、append()添加元素、索引访问与for遍历列表的基本方法;
③结合生活实例演示:如何随机生成一个"抢到的红包金额"。
【练一练】
1.填空题:完善导入语句、随机数生成、列表添加红包金额的空白代码;
2.单选题:random.randint(1,100)可能生成的数值范围是?
1.自主梳理random模块与列表的语法,在草稿纸上手绘"先随机后存表"的流程。
2.独立完成课堂填空、单选习题,完成后同桌互相对答案。
3.遇到模块导入、随机函数参数、列表索引混淆问题举手请教老师。
4.自主整理random与列表笔记,搭建红包程序知识框架。
1.依托学生已有循环基础,讲解random模块与列表这一"新工具",摸清学生现有知识储备。
2.配套随堂习题巩固随机函数、列表语法知识点,当堂巩固新知。
3.同桌互助交流,引导学生自主梳理程序逻辑,构建完整编程知识体系。
活动三:
调动思维
探究新知
【新知识传授】
1.模块二 红包拆分算法与完整程序实现
①讲解"发红包"需求分析:输入总金额total和红包个数num,将total随机拆成num份;
②讲解核心算法思路:循环num-1次,每次在当前剩余金额内随机生成一份(保留一定余额),最后一份直接取剩余余额,保证金额之和恰好等于总额;
③讲解用列表保存每一份金额、用for循环遍历输出、保留两位小数格式化输出(round());
④强调边界处理:随机范围要合理避免0元红包、最后一份取余额防止金额不对。
2.布置小组实操任务:
①小组手绘红包拆分程序流程图;
②小组小型讨论:随机数和"保底+随机"两种拆红包方式各有什么优缺点。
3.课堂巡回指导学生机房实操,一对一解答代码报错问题,监督小组绘图、讨论进度,鼓励小组互相交流代码思路。
【练一练】
小组合作完善红包模拟完整空白代码,讨论:为什么要"最后一份直接取余额"而不是每次都随机?
1.4人小组分工完成流程图绘制、讨论素材整理。
2.小组内交流代码填空答案,统一答题逻辑。
3.上机编写、调试红包模拟代码,遇到逻辑bug主动向老师求助。
4.推选小组代表上台展示流程图、分享讨论观点,吸收其他小组思路修正自身错误。
5.小组之间互相分享代码调试技巧,共同验证"金额之和=总金额"的正确性。
1.通过生活化"发红包"需求,发散学生编程思维,引导学生主动思考随机拆分的算法思路。
2.流程图绘制、代码实操锻炼学生发现、排查程序问题的能力,强化"余额校验"的严谨意识。
3.讨论对比不同拆红包方式,帮助学生理解算法设计的取舍。
4.小组协作、上机实操结合,多层次提升逻辑、实操表达多种能力。
5.在代码调试实操中验证循环、列表、随机数综合应用,培养独立解决编程问题的能力。
活动四:
巩固练习
素质提升
【知识点总结】
1.整体梳理本节课知识脉络:import random→random.randint随机生成→列表保存金额→for循环遍历输出→保证余额之和正确。
2.点评各小组流程图、上机代码实操成果,集中强调高频易错点:忘记import random、随机范围越界、最后一份金额不对、列表索引越界、未保留两位小数。
3.布置课后作业:绘制本节课思维导图;完成课件配套单选、代码填空练习题;自主优化红包程序,增加对金额、个数的合法性校验和对"1个红包"等边界情况的处理。
【分组讨论】
讨论话题1:红包程序如何增加对总金额、红包个数非法的容错代码?
讨论话题2:随机拆红包虽然"随机",但如何才能让金额分布更均匀、更合理?
学生活动:
1.各组交换课堂习题、上机代码互相核对答案交流纠错;
2.围绕程序优化、随机分布话题分组深度讨论;
3.分析红包程序编写难点、运行效果;
4.探讨random随机数可以拓展的其他生活类编程题目;
5.课后绘制思维导图梳理全课知识;
6.结合发红包案例,思考循环、列表、随机数在生活程序中的应用。
整体目标:课堂习题、实操、讨论结合,完成本节课知识检测与巩固。
1.跟随教师完整复盘红包模拟全部知识点,补充流程图、代码笔记,标记易错点。
2.认真听取小组成果点评,修正代码、流程图里的逻辑错误。
3.全员参与分组话题讨论,整理小组统一观点结论。
4.记录课后作业,规划完成顺序。
5.课后独立完成思维导图、配套习题、程序优化拓展任务。
1.课堂整体复盘,串联循环、列表、random模块全部核心知识点,当堂完成知识检测与巩固。
2.针对性点评实操高频错误,规范代码书写、逻辑编写习惯,强化边界校验意识。
3.分组讨论覆盖代码容错、随机分布两大拓展方向,引导学生深度思考程序优化。
4.思维导图绘制锻炼逻辑梳理、空间思维;拓展讨论引导学生把课堂代码知识迁移到更多生活编程场景。
5.理论+实操+拓展多层任务,全面提升学生逻辑思维与代码工程素养。
课堂小结
作业布置
课堂小结:
作业布置:
1.绘制本节课完整思维导图(涵盖random模块、列表、循环、红包拆分算法、边界处理)。
2.完成课件配套单选、代码填空练习题。
3.自主优化红包模拟程序,增加对总金额、红包个数非法输入的容错处理,以及对"1个红包""金额与个数不匹配"等边界情况的处理,并提交运行结果。
板书设计
3.6 实战:红包模拟
一、核心知识
· 导入模块:import random
· 随机数:random.randint(a,b) 随机整数 / uniform 随机小数
· 列表:list=[] · append() 追加 · 索引/遍历
二、程序流程
输入总额total、个数num
→ 循环 num-1 次随机拆分一份(保留余额)
→ 最后一份直接取剩余余额
→ 列表保存 → for遍历输出(保留两位小数)
三、算法要点
· 保证金额之和 = 总金额(最后取余额)
· 随机范围合理,避免0元红包
· 边界:1个红包 / 金额与个数不匹配
教学反思
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$