青少年 Python 入门 | 暑假必备——「每日作息表生成器」从固定模板到智能排表适合人群Python 入门建议 4~8 年级掌握print/input/for/ 字符串后项目定位单课时60 分钟成品是一张可打印的暑假作息表核心大概念字符串是程序员的积木——你看到的任何格式化输出都是字符串拼接、乘法、对齐的组合目录为什么做作息表版本一固定模板——3 分钟跑通第一个版本版本二互动问答——让作息表属于你自己版本三智能排表——程序帮你算时间版本四保存 美化——打印出来贴墙上完整代码教学指南1. 为什么做作息表暑假开始了家长最常说的一句话“别整天玩手机做个计划”但手写计划表容易丢、不好改。用 Python 做一个——想改就改随时重新生成还能打印出来贴在书桌前。更重要的是这个项目背后藏着编程的一个核心大概念一切格式化输出本质上都是字符串操作。表格的边框字符串乘法。内容的对齐字符串的format。时间的计算简单的加减法。一旦学生理解了这个print在他们眼里就从一个打印命令变成了一个排版引擎。2. 版本一固定模板——3 分钟跑通第一个版本先不写任何交互。用纯print画一张作息表print()print( ----------------------------------------)print( | 暑 假 每 日 作 息 表 |)print( ----------------------------------------)print( | |)print( | 07:00 - 07:30 起床、洗漱 |)print( | 07:30 - 08:00 晨读语文/英语 |)print( | 08:00 - 08:30 早餐 |)print( | 08:30 - 10:30 学习时间数学 |)print( | 10:30 - 11:00 休息、吃点水果 |)print( | 11:00 - 12:00 学习时间英语 |)print( | 12:00 - 14:00 午餐 午休 |)print( | 14:00 - 15:30 阅读 / 暑假作业 |)print( | 15:30 - 16:30 自由活动 / 运动 |)print( | 16:30 - 17:30 学习时间科学 |)print( | 17:30 - 19:00 晚餐 帮忙家务 |)print( | 19:00 - 20:30 亲子时间 / 散步 |)print( | 20:30 - 21:00 洗漱、准备睡觉 |)print( | 21:00 熄灯睡觉 |)print( | |)print( ----------------------------------------)print()print( 执行人________ 日期____月____日)运行即所得。这时候学生已经可以看到一张完整的作息表。但问题也很明显所有时间都是写死的。教学停顿点问学生——如果你想 8 点起床而不是 7 点要改几处学生一数至少改 12 处。这就是硬编码的代价。引出变量的必要性。3. 版本二互动问答——让作息表属于你自己用input收集学生的起床时间、学习科目然后用字符串拼接生成专属作息表print( 制作你的专属作息表 )print()# 收集信息nameinput(你的名字)wake_upinput(打算几点起床如 7:30)math_subjectinput(上午主要学科目)eng_subjectinput(下午主要学科目)print()print( ----------------------------------------)print( | name 的暑假作息表)# 补足右边空格使表格对齐right_padding *(32-len(name)*2)print( | name 的暑假作息表right_padding|)print( ----------------------------------------)print( | |)print( | wake_up 起床、洗漱 |)print( | |)print( | ... 以此类推 ... |)print( ----------------------------------------)但手动补空格太累。引入字符串格式化# 用 .format() 自动对齐# {:^40s} 居中对齐占 40 个字符宽# {:10s} 左对齐占 10 个字符宽# {:6s} 右对齐占 6 个字符宽titlename 的暑假作息表print( |{:^40s}|.format(title))print( |{:40s}|.format())print( | {:10s} - {:10s} {:16s}|.format(wake_up,07:30,起床、洗漱))这个语法对学生来说有点难所以放在了解即可档位。基础版用手动空格也能做格式化的目的是让对齐更优雅。老师可以根据学生水平决定讲到什么深度。4. 版本三智能排表——程序帮你算时间版本二是你告诉程序每个时间点版本三是你只告诉程序每件事做多久程序自动算时间。defadd_minutes(time_str,minutes_to_add):给一个时间字符串加上指定分钟数返回新的时间字符串# 拆分 7:30 为小时 7 和分钟 30partstime_str.split(:)hourint(parts[0])minuteint(parts[1])# 加上分钟total_minuteshour*60minuteminutes_to_add# 转回小时:分钟格式new_hourtotal_minutes//60new_minutetotal_minutes%60# 用 {:02d} 保证分钟总是两位数8:5 → 8:05returnstr(new_hour):str(new_minute).zfill(2)# 测试print(add_minutes(7:30,30))# 8:00print(add_minutes(8:00,120))# 10:00print(add_minutes(11:50,30))# 12:20关键教学点这是整个项目唯一涉及算法思维的地方。让学生在白纸上手动算一遍7:30 30 分钟 8:00然后用split、整除//、取余%把手工计算翻译成代码。有了add_minutes就可以这样生成作息表了# 任务列表每个任务是 (名称, 时长分钟)tasks[(起床、洗漱,30),(晨读,30),(早餐,30),(学习时间上午,120),(休息 水果,30),(学习时间英语,60),(午餐 午休,120),(阅读 / 暑假作业,90),(自由活动 / 运动,60),(学习时间下午,60),(晚餐 家务,90),(亲子时间 / 散步,90),(洗漱、准备睡觉,30),]# 从起床时间开始逐个计算每个任务的开始和结束时间current_timewake_up# 例如 7:00fortask_name,durationintasks:start_timecurrent_time end_timeadd_minutes(current_time,duration)print( | start_time - end_time task_name)current_timeend_time# 下一个任务从这结束时间开始print( | current_time 熄灯睡觉)这比版本一短了很多但功能更强——想改起床时间改一行变量整个表自动重算。这就是数据结构的力量把要做的事变成一个列表循环处理。加一个任务多写一行 tuple。删一个任务删一行即可。程序结构完全不用动。5. 版本四保存 美化——打印出来贴墙上最后一步把生成的作息表保存成 txt 文件可以打印出来贴在书桌前defsave_schedule(content,name):保存作息表到文件filenamename_暑假作息表.txtwithopen(filename,w,encodingutf-8)asf:f.write(content)print()print( 作息表已保存为filename)print( 快去打印出来贴在墙上吧)完整流程输入信息 → 生成表格 → 屏幕预览 → 保存文件 → 打印张贴。6. 完整代码点击展开完整代码三个版本合一可直接运行 暑假每日作息表生成器 从固定模板到智能排表 使用方式 1. 输入起床时间和任务 2. 程序自动计算每个任务的时间段 3. 生成表格 → 屏幕预览 → 保存文件 defadd_minutes(time_str,minutes_to_add):时间加法7:30 30 分钟 → 8:00partstime_str.split(:)hourint(parts[0])minuteint(parts[1])totalhour*60minuteminutes_to_add new_hourtotal//60new_minutetotal%60returnstr(new_hour):str(new_minute).zfill(2)defbuild_schedule(name,wake_up,tasks):根据起床时间和任务列表生成完整的作息表字符串lines[]line_width46# 表头titlename 的暑假作息表# 中文一个字约占 2 个英文字符宽度居中需要估算偏移title_widthlen(title)*2left_pad(line_width-title_width)//2lines.append( -*line_width)lines.append( | *left_padtitle *(line_width-left_pad-title_width)|)lines.append( -*line_width)lines.append( | *line_width|)# 逐个任务currentwake_upfortask_name,durationintasks:startcurrent endadd_minutes(current,duration)# 格式: | 07:00 - 07:30 起床、洗漱 |time_partstart - end line | time_part task_name# 补足右边空格line_width_usedlen(time_part)len(task_name)7remainingline_width2-line_width_usedifremaining0:lineline *remaining lineline|lines.append(line)currentend# 熄灯sleep_line | current 熄灯睡觉lines.append(sleep_line *(line_width2-len(sleep_line))|)lines.append( | *line_width|)lines.append( -*line_width)# 底部签名lines.append()lines.append( 执行人________ 日期____月____日)return\n.join(lines)defchoose_template():选择预设任务模板或自定义print()print( 选择模板)print( 1. 学霸模式上午主学习)print( 2. 均衡模式学习运动)print( 3. 自由模式自己配任务)print()choiceinput( 你的选择)ifchoice1:return[(起床、洗漱,30),(晨读语文/英语,30),(早餐,30),(学习时间数学,120),(休息、吃点水果,30),(学习时间英语,60),(午餐 午休,120),(暑假作业,90),(自由活动 / 运动,60),(学习时间科学,60),(晚餐 帮忙家务,90),(亲子时间 / 散步,90),(洗漱、准备睡觉,30),]elifchoice2:return[(起床、洗漱,30),(晨跑 / 运动,30),(早餐,30),(学习时间上午,90),(休息,30),(阅读,60),(午餐 午休,120),(兴趣班 / 自由探索,90),(户外运动,60),(学习时间下午,60),(晚餐 家务,90),(自由阅读 / 听音乐,60),(洗漱、准备睡觉,30),]else:# 自由模式自己输入任务tasks[]print()print( 输入你的任务每行一个格式任务名 分钟数)print( 例如写数学作业 60)print( 输入 完成 结束)print()whileTrue:lineinput( )ifline完成:breakpartsline.rsplit( ,1)# 从右边分割一次iflen(parts)2andparts[1].isdigit():tasks.append((parts[0],int(parts[1])))else:print( 格式不对请重试。示例写数学作业 60)returntasksdefmain():print()print( ----------------------------------------)print( | 暑 假 作 息 表 生 成 器 |)print( ----------------------------------------)print()nameinput( 你的名字)wake_upinput( 打算几点起床如 7:30)taskschoose_template()iflen(tasks)0:print( 任务列表为空无法生成作息表。)return# 生成schedulebuild_schedule(name,wake_up,tasks)# 显示print()print(schedule)print()# 保存saveinput( 是否保存到文件(y/n))ifsave.lower()y:filenamename_暑假作息表.txtwithopen(filename,w,encodingutf-8)asf:f.write(schedule)print( 已保存为filename)print( 可以打印出来贴在书桌前)print()print( 祝你度过一个充实的暑假)main()7. 教学指南分层教学路径[全部学生] 版本一改 print 模板 (10 min) ↓ [大部分学生] 版本二加入 input代入自己的信息 (15 min) ↓ [进阶学生] 版本三add_minutes 任务列表循环 (20 min) ↓ [挑战学生] 版本四模板切换 文件保存 美化 (15 min)课堂节奏60 分钟时间内容形式0~3 min运行最终版本展示效果演示3~12 min版本一固定模板——理解排版的基本原理学生跟打12~25 min版本二input收集信息 替换模板中的变量讲解 跟打25~40 min版本三add_minutes时间计算 任务列表遍历讲解 学生独立40~50 min版本四模板选择 文件保存学生独立50~60 min互看作息表 调整优化展示 讨论常见错误与引导学生常犯的错引导方式split(:)返回的是字符串列表直接拿来加减“7 30和7 30一样吗记住int()把字符串变成数字”忘记zfill(2)导致8:5而不是8:05“把分钟想象成电子表——永远两位数。zfill(2)就是在左边补 0”表头中文对齐总是不准“中文一个字 ≈ 两个英文字符宽。对齐时把中文字数 × 2 估算即可不要求完美”//和%搞混“61 // 60 1是问’有几个完整的 60 分钟’61 % 60 1是问’剩下几分钟’”课外延伸让学生把生成的作息表带回家给家长看。家长的正面反馈是最好的学习动力。有些学生会发现原来我计划一天学 6 个小时根本不可能——这是自我认知的开始比编程更重要。Python 3.6 直接运行 | 无需第三方库 | 成品可打印标签#青少年编程#Python入门#暑假计划#字符串操作#少儿编程#教培#时间管理