# -*- coding: utf-8 -*- """小班成长日志批量生成器。 依据《3-6岁儿童学习与发展指南》与小班健康课程全年分周主题(教材/幼儿园/小班/健康/小班健康.md)。 一天一个文件,落在 教材/幼儿园/小班/成长日志/,保留已有手工样本。 """ import os from datetime import date, timedelta import random BASE = os.path.dirname(os.path.abspath(__file__)) OUT = os.path.join(BASE, "教材", "幼儿园", "小班", "成长日志") os.makedirs(OUT, exist_ok=True) random.seed(20240902) # ---------- 幼儿名册(22人,含已写样本小宇/朵朵/浩浩/欣欣)---------- CHILDREN = [ ("小宇", "男", "3岁2个月"), ("朵朵", "女", "3岁4个月"), ("浩浩", "男", "3岁1个月"), ("欣欣", "女", "3岁3个月"), ("阳阳", "男", "3岁5个月"), ("妞妞", "女", "3岁2个月"), ("牛牛", "男", "3岁3个月"), ("贝贝", "女", "3岁1个月"), ("明明", "男", "3岁4个月"), ("乐乐", "男", "3岁2个月"), ("笑笑", "女", "3岁3个月"), ("果果", "女", "3岁5个月"), ("轩轩", "男", "3岁1个月"), ("丫丫", "女", "3岁2个月"), ("洋洋", "男", "3岁4个月"), ("恬恬", "女", "3岁3个月"), ("晨晨", "男", "3岁2个月"), ("可可", "女", "3岁4个月"), ("壮壮", "男", "3岁5个月"), ("囡囡", "女", "3岁1个月"), ("淘淘", "男", "3岁3个月"), ("安安", "女", "3岁2个月"), ] # ---------- 40周主题(周一到周五),取自小班健康全年分周 ---------- WEEKS = { 1: ["我会洗手——学习六步洗手法,儿歌《洗手歌》", "喝水小达人——口渴主动喝水,排队接水", "午睡乖乖——学习脱鞋、盖被、安静入睡", "我要上厕所——区分男女生厕所,便后冲水", "情绪抱抱——想妈妈时找老师抱抱,学习表达情绪"], 2: ["我会坐好——吃饭坐定,一手扶碗一手拿勺", "不挑食——认识青菜、肉、米饭,尝试都吃一点", "细嚼慢咽——一口饭一口菜,不奔跑吃饭", "饭后擦嘴——擦嘴、漱口、放碗筷", "文明进餐——不大声说话,不剩饭"], 3: ["认识红绿灯——红灯停、绿灯行、黄灯等一等", "过马路走斑马线——牵着大人手,左右看", "不在马路上跑——马路危险,不能乱跑", "认识交通标志——注意行人、禁止通行等", "我是小司机——骑小车游戏,遵守规则"], 4: ["认识五官——眼睛、鼻子、耳朵、嘴巴、眉毛", "保护眼睛——不揉眼睛,少看电视", "保护牙齿——早晚刷牙,少吃糖", "我的小手——会洗手、会收拾玩具", "我的小脚——走路稳,不摔跤"], 5: ["走走跑跑——听信号走、跑、停", "钻山洞——弯腰钻过拱门,不碰头", "跳一跳——双脚原地跳,轻轻落地", "投掷小球——向前投掷,对准目标", "爬爬乐——手脚协调爬过垫子"], 6: ["爱吃蔬菜——青菜、胡萝卜、黄瓜都要吃", "水果真好吃——苹果、香蕉、梨,每天一种", "多喝白开水——少喝饮料,多喝温水", "少吃零食——饭前不吃零食", "营养小餐盘——认识主食、菜、肉、水果"], 7: ["不跟陌生人走——陌生人给糖不能要", "记住家长电话——知道爸爸妈妈名字", "找不到大人怎么办——找警察或工作人员", "安全上下楼梯——扶栏杆,不推挤", "尖尖的东西不能碰——剪刀、铅笔尖要小心"], 8: ["平衡木——张开手臂慢慢走", "拍球游戏——学习拍球一下、两下", "绕障碍跑——绕过小桶不碰到", "合作游戏——两人拉小车", "体育小达人——展示本周学到的动作"], 9: ["自己吃饭——不用大人喂,独立进餐", "饭后漱口——漱口三遍,保护牙齿", "吃饭不说话——嘴里有饭不说话", "不剩饭——吃多少盛多少", "整理餐桌——把碗放进水池"], 10: ["勤剪指甲——指甲长了要剪", "擦鼻涕——用纸巾,擦完扔垃圾桶", "咳嗽捂住嘴——不对着人咳嗽", "勤换衣服——衣服脏了换下来", "每天洗脸——早上洗脸,保持干净"], 11: ["天冷加衣——根据天气穿脱衣服", "运动出汗——出汗后擦汗、喝水", "开窗通风——家里和教室要开窗", "生病要休息——不舒服告诉老师", "勤洗手防病菌——饭前便后、回家后都洗手"], 12: ["滑滑梯要排队——不推不挤,轮流玩", "秋千轻轻荡——抓紧绳子,不乱踢", "不爬高处——不爬窗、不爬桌子", "玩具不乱扔——收拾玩具,不绊倒", "户外安全我知道——总结安全规则"], 13: ["认识冬装——棉衣、帽子、手套、围巾", "我会穿衣——先穿袖子,再扣扣子", "穿脱外套——学会自己穿脱外套", "鞋子穿对——左右脚分清,不踩鞋跟", "整理衣物——把帽子手套放固定位置"], 14: ["晨练不怕冷——早上出来做操", "跑步热身——运动前先跑一跑", "跳绳准备——学习握绳,摇绳", "拍球游戏——巩固拍球", "冬季运动会——小组接力赛"], 15: ["多喝温水——冬天也要多喝水", "出门戴口罩——雾霾天戴口罩", "不用手揉眼睛——手上细菌多", "室内安全——远离暖气、热水袋", "健康生活我知道——总结冬季健康习惯"], 16: ["过节也要早睡——不熬夜,按时睡", "少吃糖果——保护牙齿", "安全装饰教室——不碰尖尖物品", "我会排队——表演节目排队上场", "元旦联欢——唱歌跳舞,开心过节"], 17: ["不玩火——火柴、打火机不能玩", "不碰插座——电很危险", "热水要小心——烫的东西不能碰", "不乱吃药——药品不是糖", "不给陌生人开门——在家大人才能开门"], 18: ["牵着大人的手——出门不松手", "不在马路上跑——马路上车多", "认识安全出口——商场里找绿色标志", "走丢怎么办——原地等或找工作人员", "我是安全小卫士——复习安全知识"], 19: ["春节也要按时吃饭——不暴饮暴食", "少吃糖果和零食——保护牙齿", "按时睡觉——不熬夜看烟花", "走亲访友讲礼貌——叫人、不挑食", "假期安全——过年不玩鞭炮"], 20: ["拜年礼仪——学说新年好、恭喜发财", "分享春节趣事——用三句话讲过年", "情绪安定——回到幼儿园不哭", "作息调整——早睡早起,不赖床", "春季健康——脱衣服要适当"], 21: ["小兔跳跳——学小兔双脚跳", "小鸭走路——摇摇摆摆走", "小马跑——跑得快又稳", "小乌龟爬——手脚爬地", "动物运动会——模仿动物动作比赛"], 22: ["我会拍球——学习拍一下接球", "连续拍球——尝试连续拍两下", "边走边拍——边走边拍球", "传球游戏——两人互相传球", "拍球小能手——展示"], 23: ["跳过小河——跳过地上的线", "钻过山洞——钻拱形门", "平衡走——走平衡木", "投掷沙包——向前扔沙包", "综合运动——跑、跳、钻、投"], 24: ["洗手再检查——六步洗手我会了", "饭后刷牙——学习正确刷牙", "整理小书包——把东西放好", "爱护环境——不乱扔垃圾", "卫生小标兵——总结"], 25: ["我会刷牙——上下刷、左右刷", "洗脸的步骤——先擦眼睛,再擦脸", "洗头发——洗头不哭,闭眼睛", "洗脚——睡前洗脚,身体舒服", "洗澡安全——浴室地滑要小心"], 26: ["玩具回家——玩完玩具收好", "衣服叠一叠——学习叠小衣服", "图书摆整齐——书脊朝外摆好", "鞋子摆好——鞋尖朝外放", "我会整理小柜——整理自己的柜子"], 27: ["垃圾分类——认识可回收、厨余、其他垃圾", "节约用水——洗手关小水", "节约用电——离开关灯", "爱护花草——不摘花、不踩草", "环保小卫士——总结"], 28: ["自己的事情自己做——穿衣、吃饭", "帮老师摆椅子——做班级小帮手", "帮妈妈递东西——做家里小帮手", "感谢劳动者——认识清洁工、医生、警察", "劳动节放假安全教育"], 29: ["坐汽车系安全带——坐车要坐安全座椅", "走人行道——不在马路上走", "看交通标志——红灯停、绿灯行", "不在车边玩——停车场危险", "我是交通小警察——游戏"], 30: ["连续拍球——尝试拍3-5下", "单脚站立——练平衡", "跨跳——跨过小河沟", "投掷准——把沙包投进筐", "运动展示——全班展示"], 31: ["我会擦桌子——用小抹布擦桌子", "我会浇花——给植物浇水", "我会叠被子——学习叠小被子", "我会穿鞋子——分清左右", "劳动小能手——表扬"], 32: ["排练节目——排队站好", "舞台安全——上下台小心", "化妆讲卫生——不揉眼睛", "多吃蔬菜——保持体力", "六一联欢——开心表演"], 33: ["多喝水——天热多喝水", "防晒——出门戴帽子", "防蚊虫——穿长袖,喷防蚊液", "不在太阳下久玩——找阴凉处休息", "游泳安全——大人陪同才能下水"], 34: ["少吃冷饮——冷饮吃多了肚子疼", "吃干净水果——水果要洗干净", "饭菜不隔夜——夏天饭菜容易坏", "多喝水不中暑——出汗多补水", "夏季饮食安全——总结"], 35: ["早上运动——避开中午最热", "运动后休息——出汗了歇一歇", "穿透气衣服——穿棉质衣服", "午睡重要——夏天也要午睡", "健康生活过夏天——总结"], 36: ["认识端午节——吃粽子、赛龙舟", "粽子不能多吃——糯米不好消化", "河边安全——看龙舟要跟大人", "挂艾草——认识艾草菖蒲", "端午节放假安全"], 37: ["在家安全——不爬高、不玩火", "不给陌生人开门——不认识的人不开门", "出门找大人——去哪里告诉大人", "不吃陌生人东西——糖果饮料不要", "记住家庭地址——知道小区名、门牌号"], 38: ["按时起床——不睡懒觉", "按时吃饭——三餐规律", "少看电视——每天不超过20分钟", "多喝水——夏天多喝水", "帮妈妈做小事——递东西、擦桌子"], 39: ["开空调要适度——温度不要太低", "出汗换衣服——湿衣服换下来", "中午不出门——最热时在家休息", "吃西瓜适量——西瓜好吃不多吃", "夏季安全总结"], 40: ["复习洗手——六步洗手", "复习吃饭——自己吃、不挑食", "复习安全——红灯停绿灯行", "复习运动——拍球、跳一跳", "我升中班啦——庆祝"], } # 每周首个工作日(周一),依教学日历并避开长假 WEEK_START = [ date(2024,9,2), date(2024,9,9), date(2024,9,16), date(2024,9,23), date(2024,10,8), date(2024,10,14), date(2024,10,21), date(2024,10,28), date(2024,11,4), date(2024,11,11), date(2024,11,18), date(2024,11,25), date(2024,12,2), date(2024,12,9), date(2024,12,16), date(2024,12,23), date(2025,1,6), date(2025,1,13), date(2025,1,20), date(2025,2,24), date(2025,3,3), date(2025,3,10), date(2025,3,17), date(2025,3,24), date(2025,3,31), date(2025,4,7), date(2025,4,14), date(2025,4,21), date(2025,4,28), date(2025,5,6), date(2025,5,12), date(2025,5,19), date(2025,5,26), date(2025,6,2), date(2025,6,9), date(2025,6,16), date(2025,6,23), date(2025,6,30), date(2025,7,7), date(2025,7,14), ] WEEKDAY_CN = ["星期一","星期二","星期三","星期四","星期五"] def holiday_set(): s = set() for d in [(2024,9,15),(2024,9,16),(2024,9,17)]: s.add(date(*d)) # 中秋 for n in range(1,8): s.add(date(2024,10,n)) # 国庆 s.add(date(2025,1,1)) # 元旦 for n in range(20,31): s.add(date(2025,1,n)) # 寒假1月 for n in range(1,23): s.add(date(2025,2,n)) # 寒假2月 for d in [(2025,4,4),(2025,4,5),(2025,4,6)]: s.add(date(*d)) # 清明 for n in range(1,6): s.add(date(2025,5,n)) # 劳动 for d in [(2025,5,31),(2025,6,1),(2025,6,2)]: s.add(date(*d)) # 端午 return s HOLIDAY = holiday_set() WEATHER = { (9,10,11): ["晴","多云","阴","小雨"], (12,1,2): ["晴","多云","晴冷","小雪"], (3,4,5): ["晴","多云","小雨","阴"], (6,7): ["晴","多云","雷阵雨","炎热"], } def weather_of(m): for ks, v in WEATHER.items(): if m in ks: return random.choice(v) return "晴" def guess_domain(t): if any(k in t for k in ["故事","儿歌","说话","表达","礼貌用语","阅读","讲","叫人","拜年"]): return "语言" if any(k in t for k in ["画","唱","舞","表演","美工","音乐","手工","联欢","节目"]): return "艺术" if any(k in t for k in ["分类","数","观察","探索","动物","植物","天气","光影","科学"]): return "科学" if any(k in t for k in ["分享","排队","合作","规则","情绪","走亲访友","交往","社会","值日","劳动(社会性)"]): return "社会" return "健康" # 主领域详写行为池 BEHAVIOR = { "健康": ["能独立完成动作并露出得意笑容", "起初需要教师示范,后慢慢跟做", "动作略显笨拙但坚持完成", "主动向同伴展示自己学会的本领", "在儿歌提示下顺利做到"], "语言": ["能清楚说出相关短句", "愿意在集体前表达", "跟着教师念儿歌声音响亮", "用单词表达需求", "能回答教师的提问"], "社会": ["主动与同伴互动", "在教师引导下学会等待", "把玩具分给朋友", "遵守班级规则", "情绪平稳、乐于参与"], "科学": ["好奇地伸手探索", "观察到变化并指给教师看", "尝试比较与分类", '提出"为什么"的问题', "专注观察不分散"], "艺术": ["随节奏摆动身体", "大胆用声音/动作表现", "专注完成自己的作品", "与同伴合作表演", "用色彩表达心情"], } STAGE_NOTE = { "适应期": "入园初期,以稳定情绪、建立安全感与基本生活常规为主。", "发展期": "情绪稳定后,各项生活自理与交往能力快速发展,活动参与度明显提高。", "巩固期": "习惯基本养成,能在真实情境中迁移运用,并开始为升中班做准备。", } OTHER_DOMAIN_TPL = { "健康": ["户外活动中动作较协调,大肌肉持续发展。", "进餐、如厕等生活环节节奏顺畅。", "午休能安静入睡,精力恢复良好。"], "语言": ["听故事时注意力集中约8分钟。", "能用简单句与教师、同伴交流。", "喜欢跟着念儿歌,语音逐渐清晰。"], "社会": ["愿意靠近同伴,出现平行游戏。", "在提醒下使用礼貌用语。", "初步体验轮流与等待。"], "科学": ["对新鲜事物表现出好奇。", "在操作中感知因果与变化。", "能指认熟悉物品并命名。"], "艺术": ["听到音乐自然会随节奏动作。", "美工活动敢大胆涂画。", "表演时乐于用声音表现情绪。"], } def stage_of(week): if week <= 4: return "适应期" if week <= 20: return "发展期" return "巩固期" def build(week, wd, d, child, theme, stage): theme_short = theme.split("——")[0] domain = guess_domain(theme) weather = weather_of(d.month) attend = min(22, 18 + week // 4) + random.choice([0,0,1,-1]) attend = max(15, min(22, attend)) # 时间线 timeline = ( f"| 8:00-8:30 | 晨检·接待 | 保健医测体温看手口;教师门口微笑迎接,{child[0]}主动问好 |\n" f"| 9:00-9:30 | 集体教学 | 《{theme_short}》——{theme.split('——')[-1]} |\n" f"| 9:30-10:00 | 区域游戏 | 幼儿按兴趣进入娃娃家、建构区、美工区、图书角 |\n" f"| 10:00-10:30 | 户外游戏 | 依据主题开展体育或情景游戏 |\n" f"| 11:00-11:30 | 午餐 | 练习用勺独立进餐,餐后收餐具 |\n" f"| 12:00-14:30 | 午睡 | 听《睡觉歌》安静入睡 |\n" f"| 15:00-15:30 | 离园 | 与家长拥抱道别,说\"明天见\" |" ) # 五大领域 paras = [] order = ["健康","语言","社会","科学","艺术"] for dom in order: if dom == domain: b = random.choice(BEHAVIOR[dom]) line = "- **%s**:今日重点。%s活动中,%s%s。" % (dom, theme_short, child[0], b) else: line = "- **%s**:%s" % (dom, random.choice(OTHER_DOMAIN_TPL[dom])) paras.append(line) domain_block = "\n".join(paras) # 观察笔记 b2 = random.choice(BEHAVIOR[domain]) note = ("- **对象**:%s(%s,%s)\n- **目的**:观察其在「%s」中的%s发展。\n" "- **情景描述**:%s在活动中%s,教师及时鼓励,情绪积极。\n" "- **分析**:符合《指南》小班\"%s\"典型表现,后续保持家园一致强化。") % ( child[0], child[1], child[2], theme_short, domain, child[0], b2, {"健康":"动作协调与自理","语言":"倾听与表达","社会":"人际交往","科学":"好奇与探究","艺术":"感受与表现"}[domain]) # 家园联系 advice = { "健康":"在家也用同样的步骤/儿歌巩固,不包办代替。", "语言":"每天亲子共读,鼓励孩子用完整话说出需求。", "社会":"创造与同伴玩耍机会,练习轮流与分享。", "科学":"带孩子观察自然与生活现象,保护好奇心。", "艺术":"多听儿歌、鼓励大胆涂画与表演,不追求像不像。", }[domain] # 明日 if wd < 4: nxt = WEEKS[week][wd+1].split("——")[0] else: nxt = WEEKS[week+1][0].split("——")[0] if week < 40 else "升中班准备" md = ( "# 小班成长日志 · %d年%d月%d日(%s)%s\n\n" "> 本月主题衔接小班健康课程第%d周。阶段特点:%s\n" "> 记录人:主班教师 林老师 | 当日出勤:应到22人,实到%d人。\n\n" "---\n\n## 一、今日概览\n\n| 项目 | 内容 |\n|------|------|\n" "| 天气 | %s |\n| 当日主题 | %s |\n| 重点领域 | %s |\n| 重点观察幼儿 | %s(%s,%s) |\n\n" "---\n\n## 二、一日活动流程(时间线)\n\n| 时间 | 环节 | 内容与观察 |\n|------|------|-----------|\n%s\n\n" "---\n\n## 三、五大领域观察记录\n\n%s\n\n" "---\n\n## 四、教师观察笔记\n\n%s\n\n" "---\n\n## 五、教师评语\n\n本周教学围绕「%s」展开,%s多数幼儿能在教师支持下参与并完成目标," "个别幼儿尚需反复练习,属正常发展规律,循序渐进即可。\n\n" "---\n\n## 六、家园联系\n\n- **今日分享给家长**:%s活动照片与视频片段。\n" "- **家庭延伸建议**:%s\n\n---\n\n## 七、明日计划\n\n1. 明日主题:《%s》。\n2. 延续今日重点,在游戏中巩固。\n" ) % (d.year, d.month, d.day, WEEKDAY_CN[wd], weather, week, STAGE_NOTE[stage], attend, weather, theme, domain, child[0], child[1], child[2], timeline, domain_block, note, theme_short, stage, theme_short, advice, nxt) return md def main(): cnt = 0 skip = 0 idx = 0 for wi, ws in enumerate(WEEK_START, start=1): for wd in range(5): d = ws + timedelta(days=wd) if d in HOLIDAY: continue fname = "%04d-%02d-%02d.md" % (d.year, d.month, d.day) fpath = os.path.join(OUT, fname) if os.path.exists(fpath): skip += 1 continue child = CHILDREN[idx % len(CHILDREN)] idx += 1 theme = WEEKS[wi][wd] stage = stage_of(wi) md = build(wi, wd, d, child, theme, stage) with open(fpath, "w", encoding="utf-8") as f: f.write(md) cnt += 1 print("生成 %d 篇,跳过已存在(手工样本) %d 篇。" % (cnt, skip)) if __name__ == "__main__": main()