当前位置: 首页 > news >正文

青少年 Python 入门 | 课堂实战——「班级随机点名器」从简单到智能

青少年 Python 入门 | 课堂实战——「班级随机点名器」从简单到智能

适合人群:Python 入门(建议 5~8 年级),学完listrandom后的项目
项目定位:单课时(60 分钟),成品是老师上课能用的点名工具
教学目标list增删改查、random.choice/random.shuffle、防重复机制、time.sleep滚动效果


目录

  1. 课堂的真实需求
  2. 版本一:最简单的点名器——3 行代码
  3. 版本二:滚动特效——像抽奖一样刺激
  4. 版本三:不重复点名——每人只点一次
  5. 版本四:分组模式——随机分小组
  6. 完整代码
  7. 教学指南

1. 课堂的真实需求

编程课最难的是什么?不是语法,是让学生觉得"这东西有用"

这个项目有一个天然的优势:写完当场就能用。老师运行学生写的代码来点名回答问题,全班看着名字在屏幕上滚动——“千万不要点到我!”

更妙的是,这个项目有四个版本,层层递进,每个版本只加一点点新知识,但体验完全不同。


2. 版本一:最简单的点名器——3 行代码

importrandom students=["张三","李四","王五","赵六","孙七","周八"]print("被点到的同学是:"+random.choice(students))

三行代码,已经能用了。这就是最小可行产品——先跑起来,再变好。

关键教学点random.choice(列表)从列表中随机取一个元素。让学生把students换成自己班的名字,立刻就能用。


3. 版本二:滚动特效——像抽奖一样刺激

版本一太快了,没有悬念。版本二加入滚动效果:名字在屏幕上快速跳动,几秒后慢慢停下来。

importrandomimporttime students=["张三","李四","王五","赵六","孙七","周八"]print("===== 随机点名 =====")print()# 滚动阶段:快速切换 20 次foriinrange(20):# 随机显示一个名字(用 \r 回到行首覆盖上一次显示)temp=random.choice(students)print(" >>> "+temp+" <<<",end="\r")time.sleep(0.08)# 暂停 0.08 秒# 最终结果print()print()result=random.choice(students)print("===== 结果 =====")print()print(" 被点到的同学是:「"+result+"」")

效果:屏幕上名字飞快跳动约 1.6 秒,最后揭晓结果——全班盯着屏幕,气氛拉满。

end="\r"是什么\r是"回车符",让光标回到本行开头。下一次print会覆盖这一行的内容,产生"原地刷新"的动画效果。


4. 版本三:不重复点名——每人只点一次

版本二有个问题:同一个人可能被点两次。版本三加入**“已点集合”**,确保公平:

importrandomimporttime students=["张三","李四","王五","赵六","孙七","周八"]called=[]# 已经被点过的同学print("===== 不重复点名 =====")print("输入 'q' 退出,输入 'r' 重置")print()whileTrue:# 检查是否所有人都被点过iflen(called)>=len(students):print("所有同学都已经点过了!")breakinput("按回车开始点名...")# 从还没被点过的同学中随机选available=[]forsinstudents:ifsnotincalled:available.append(s)# 滚动特效foriinrange(20):temp=random.choice(available)print(" >>> "+temp+" <<<",end="\r")time.sleep(0.08)print()print()# 最终结果result=random.choice(available)print(" 被点到的同学是:「"+result+"」")# 加入已点名单called.append(result)print(" 还剩 "+str(len(students)-len(called))+" 人未被点到")print()

核心算法available = [s for s in students if s not in called]
这叫"过滤"——从总名单中筛掉已经出现过的。用自然语言说:把还没被点过的同学放进一个新篮子。


5. 版本四:分组模式——随机分小组

期末做项目汇报、课堂讨论都需要分组。版本四增加分组功能:

importrandomdefmake_groups(students,group_size):"""将学生随机分成若干小组,每组 group_size 人"""# 先打乱顺序shuffled=students[:]# 复制一份,不修改原列表random.shuffle(shuffled)groups=[]current_group=[]forsinshuffled:current_group.append(s)iflen(current_group)>=group_size:groups.append(current_group)current_group=[]# 剩下的不足一组也加入iflen(current_group)>0:groups.append(current_group)returngroups# 使用students=["张三","李四","王五","赵六","孙七","周八","吴九","郑十","冯一","陈二"]groups=make_groups(students,3)print("===== 随机分组(每组 3 人)=====")print()foriinrange(len(groups)):print(" 第"+str(i+1)+"组:"+"、".join(groups[i]))

效果

===== 随机分组(每组 3 人)===== 第1组:王五、冯一、张三 第2组:周八、孙七、郑十 第3组:赵六、李四、陈二 第4组:吴九

random.shuffle():直接在原列表上"洗牌",随机打乱顺序。打乱后按顺序分组,自然就是随机分组。


6. 完整代码

点击展开完整代码(含三个模式,可直接运行)
""" 班级随机点名器 —— 从简单到智能 课堂实用工具 """importrandomimporttime# ==================== 学生名单 ====================# 使用时把这里改成自己班的学生名字students=["张三","李四","王五","赵六","孙七","周八","吴九","郑十","冯一","陈二","褚三","卫四","蒋五","沈六","韩七"]# ==================== 模式1:滚动点名 ====================defroll_call(allow_repeat=True):"""滚动点名,allow_repeat=False 时每人只点一次"""called=[]print()print("===== 滚动点名 =====")ifnotallow_repeat:print("模式:不重复点名(每人只被点一次)")print("按回车点名,输入 r 重置,输入 q 退出")print()whileTrue:# 不重复模式下检查是否全部点完available=[sforsinstudentsifsnotincalled]ifnotallow_repeatandlen(available)==0:print(">>> 所有同学都已点过!输入 r 重置 <<<")print()cmd=input("> ")ifcmd=="q":breakelifcmd=="r":called=[]print(" 已重置!所有人都可以重新被点到。")print()continuepool=availableifnotallow_repeatelsestudents# 滚动特效foriinrange(22):temp=random.choice(pool)print(" >>> "+temp+" <<<",end="\r")time.sleep(0.06+i*0.005)# 越滚越慢print()print()result=random.choice(pool)print(" [结果] 「"+result+"」")ifnotallow_repeat:called.append(result)left=len(students)-len(called)print(" (还剩 "+str(left)+" 人未点到)")print()# ==================== 模式2:随机分组 ====================defgroup_mode():print()print("===== 随机分组 =====")size=int(input("每组几人?"))ifsize<=0:print(" 每组至少 1 人!")returnshuffled=students[:]random.shuffle(shuffled)groups=[]current=[]forsinshuffled:current.append(s)iflen(current)>=size:groups.append(current)current=[]iflen(current)>0:groups.append(current)print()foriinrange(len(groups)):print(" 第"+str(i+1)+"组("+str(len(groups[i]))+"人):"+"、".join(groups[i]))print()# ==================== 模式3:快速点名(无滚动) ====================defquick_pick():print()print("===== 快速点名 =====")times=int(input("一次点几人?"))print()foriinrange(times):result=random.choice(students)print(" "+str(i+1)+". "+result)print()# ==================== 模式4:管理名单 ====================defmanage_list():globalstudentsprint()print("===== 管理名单(当前 "+str(len(students))+" 人)=====")print()foriinrange(len(students)):print(" "+str(i+1)+". "+students[i])print()print(" 1.添加 2.删除 3.返回")c=input(" > ")ifc=="1":name=input(" 姓名:")students.append(name)print(" 已添加:"+name)elifc=="2":num=int(input(" 删除第几个?"))if1<=num<=len(students):removed=students.pop(num-1)print(" 已删除:"+removed)else:return# ==================== 主菜单 ====================defmain():print()print(" +-------------------------------------+")print(" | 随 机 点 名 器 |")print(" | Classroom Picker |")print(" +-------------------------------------+")whileTrue:print()print(" 1. 滚动点名(可重复)")print(" 2. 滚动点名(不重复)")print(" 3. 快速点名(一次点多人)")print(" 4. 随机分组")print(" 5. 管理名单")print(" 0. 退出")print()c=input(" 请选择:")ifc=="0":breakelifc=="1":roll_call(allow_repeat=True)elifc=="2":roll_call(allow_repeat=False)elifc=="3":quick_pick()elifc=="4":group_mode()elifc=="5":manage_list()else:print(" 输入有误~")main()

7. 教学指南

课堂节奏(60 分钟)

时间内容形式
0~3 min老师运行完整版,点几个学生名字——全班注意力瞬间集中演示
3~10 min版本一:3 行代码写出第一个点名器学生跟打
10~20 min版本二:加入滚动特效\r+time.sleep讲解 + 跟打
20~30 min版本三:不重复机制——"可用名单"过滤学生独立
30~45 min版本四:分组算法shuffle+ 切片讲解 + 学生独立
45~55 min完善菜单 + 名单管理功能自由创作
55~60 min实战:用学生自己写的程序现场点人全班互动

教学技巧

  • 名单即动力:让学生把自己班的名字打进去,甚至把老师的名字也放进去——“连老师一起点”
  • 故意制造 bug 讲概念:版本一重复点到同一个人,问学生"这公平吗?"引出防重复的需求
  • \r是个魔术:在黑板上演示"先写 ABC,回到行首写 DEF,结果是 DEF",理解覆盖原理
  • 让代码进真实课堂:后面几节课的点名环节,就用学生自己写的程序。这是一劳永逸的成就感

课后挑战

难度任务技能
1星把名单改成自己班的实际名单列表编辑
2星增加"加权点名"——某人被点过的概率降低概率调节
3星把点名记录保存到文件(日期+被点者)open+ 日期
4星用 Turtle 做转盘动画 + 图片头像Turtle + 三角函数
5星接入语音播报——点名后用pyttsx3读出名字第三方库

评论区:你的学生第一次看到自己写的点名器在课堂上运行时,是什么反应?


Python 3.6+ 直接运行 | 无需第三方库 | 课堂即刻可用

标签#青少年编程#Python入门#课堂工具#随机点名#少儿编程#教培

http://www.jsqmd.com/news/1108270/

相关文章:

  • 微信小程序逆向解析神器:wxappUnpacker轻松解密小程序源码
  • LoRa 无线对讲机-显示1-OLED
  • 完全实战指南:用DB Browser for SQLite可视化操作数据库的深度解析
  • 中小货代用什么管理系统?易境通货代系统功能详解
  • 收藏!小白程序员转行AI工程师的10阶段进阶路线图(附Python入门)
  • 大尺寸钢制防火门工艺的验收标准是什么
  • VMware虚拟机打印配置黄金 checklist:12项生产环境验证项(含HP/Lexmark/Brother主流机型兼容性矩阵)
  • BetterNCM Installer:3分钟搞定网易云音乐插件安装的终极指南
  • 业务系统和分账产品差在哪 → 业务系统与分账系统的5个核心差异:架构与合规对比
  • 小爱音箱终极音乐自由指南:3步实现免费无限听歌体验
  • IIM-42652运动传感器与PIC18LF46K40的6DoF系统设计
  • 2026年AI风口!掌握大模型,年薪百万不是梦,速收藏!
  • VMware虚拟机UEFI启动设置全攻略:5步完成安全启动(Secure Boot)启用与故障排查
  • 初步认识 AI Agent
  • 科普 | 大学校园该不该开放?答案也许藏在数据里
  • 智能安全测试实战:从AI原理到Strix AI工具应用指南
  • PQC-Tool 抗量子密码算法工具
  • 2026公司官网全包开发价格从几千到几万
  • 对于新手小白的第一款三维引擎开发工具(unity与UE)选择建议 附二者的区别与联系
  • 6DoF运动跟踪技术解析与IIM-42652应用实践
  • XUnity.AutoTranslator:Unity游戏实时翻译插件的完整技术指南与实战应用
  • 华硕笔记本性能控制终极指南:如何用GHelper替代Armoury Crate提升30%效率
  • OpenCore Legacy Patcher:让老旧Mac重获新生的技术深度解析
  • VMware虚拟机启用3D加速失败?从vGPU分配到驱动签名绕过,一线工程师连夜复盘的12个致命陷阱
  • XiaoMusic:为小爱音箱带来无版权限制的智能音乐播放解决方案
  • VMware 17+ UEFI启动设置手册:从vSphere 8.0到Workstation Pro 17.6,覆盖全部6种场景的黄金配置清单
  • 华硕天选「BW2026」参展确认!
  • 3dsconv终极指南:轻松完成3DS游戏格式转换的完整教程
  • ClusterGVis:多维度基因表达可视化中的坐标系统一致性优化
  • DB Browser for SQLite:终极免费SQLite数据库可视化工具完整指南