第9课:时间小管家——让电脑告诉你时间

🎯 本课目标

  • 学习使用datetime模块获取和处理时间
  • 掌握各种时间格式的显示方法
  • 学会计算时间差和进行时间转换
  • 制作倒计时器和计时器程序
  • 创建智能日程提醒系统
  • 综合应用前8课知识解决时间相关问题

⏰ 趣味引入:时间是什么?

小实验:请回答以下问题,不要看钟表!

  1. 现在大概是几点?
  2. 今天星期几?
  3. 这个月有多少天?

你发现了什么?人脑能大概知道时间,但不精确。而计算机是时间管理大师,它能精确到百万分之一秒!

时间的秘密

  • 计算机内部用数字表示时间
  • 从1970年1月1日开始计时(UNIX时间戳)
  • 每过1秒,数字就加1
  • 全世界用统一的时间标准(UTC)

今天,让我们教计算机成为你的时间小管家


🕰️ 第一部分:认识datetime模块

导入datetime模块

# 导入datetime模块
import datetime

print("datetime模块已就绪!")
print("现在可以处理时间了!")

获取当前时间

import datetime

# 获取当前日期和时间
now = datetime.datetime.now()
print("当前完整时间:", now)
print(f"类型:{type(now)}")

# 获取当前日期
today = datetime.date.today()
print("当前日期:", today)

# 获取当前时间
current_time = datetime.datetime.now().time()
print("当前时间:", current_time)

📅 第二部分:时间的各个部分

拆分时间的各个部分

import datetime

# 获取当前时间
now = datetime.datetime.now()

print("🔍 时间的各个部分:")
print("=" * 30)

# 拆解时间
print(f"年份:{now.year}年")
print(f"月份:{now.month}月")
print(f"日期:{now.day}日")
print(f"小时:{now.hour}时")
print(f"分钟:{now.minute}分")
print(f"秒:{now.second}秒")
print(f"微秒:{now.microsecond}微秒")
print(f"星期:星期{now.weekday() + 1}")  # weekday()返回0-6,0是周一

# 判断上午/下午
if now.hour < 12:
    am_pm = "上午"
elif now.hour < 18:
    am_pm = "下午"
else:
    am_pm = "晚上"

print(f"现在是{am_pm}")

练习1:智能问候程序

# 智能问候程序
import datetime

print("🤖 智能问候程序")
print("=" * 20)

# 获取当前时间
now = datetime.datetime.now()
hour = now.hour
minute = now.minute

# 获取用户名字
name = input("你叫什么名字?")

# 根据时间问候
if 5 <= hour < 12:
    greeting = "早上好"
elif 12 <= hour < 14:
    greeting = "中午好"
elif 14 <= hour < 18:
    greeting = "下午好"
elif 18 <= hour < 22:
    greeting = "晚上好"
else:
    greeting = "夜深了"

print(f"{greeting},{name}!")
print(f"现在是{hour:02d}:{minute:02d}")

# 附加提醒
if hour < 6:
    print("💤 天还没亮,再睡会儿吧!")
elif hour < 9:
    print("🌅 美好的一天开始了!")
elif hour < 12:
    print("📚 学习的好时光!")
elif hour < 14:
    print("🍚 午饭时间到!")
elif hour < 17:
    print("💪 下午继续加油!")
elif hour < 20:
    print("🎮 放松一下,但别忘了作业!")
else:
    print("🌙 该准备睡觉了!")

练习2:生日计算器

# 生日计算器
import datetime

print("🎂 生日计算器")
print("=" * 20)

# 获取当前日期
today = datetime.date.today()
print(f"今天是:{today}")

# 输入生日
birth_year = int(input("你的出生年份:"))
birth_month = int(input("你的出生月份:"))
birth_day = int(input("你的出生日期:"))

# 创建生日日期
birthday = datetime.date(birth_year, birth_month, birth_day)
print(f"你的生日是:{birthday}")

# 计算年龄
age = today.year - birthday.year

# 调整如果今年生日还没过
if (today.month, today.day) < (birthday.month, birthday.day):
    age -= 1

print(f"你现在{age}岁")

# 计算下一个生日
next_birthday = datetime.date(today.year, birth_month, birth_day)
if next_birthday < today:
    next_birthday = datetime.date(today.year + 1, birth_month, birth_day)

# 计算距离下一个生日的天数
days_to_birthday = (next_birthday - today).days

print(f"距离你的下一个生日还有{days_to_birthday}天")

# 计算是星期几
weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
birthday_weekday = weekdays[next_birthday.weekday()]
print(f"你的下一个生日是{birthday_weekday}")

🎨 第三部分:格式化时间显示

时间格式化方法

import datetime

now = datetime.datetime.now()

print("🕐 时间格式化展示")
print("=" * 30)

# 方法1:strftime 格式化
print("1. 基本格式:")
print(f"  年-月-日:{now.strftime('%Y-%m-%d')}")
print(f"  时:分:秒:{now.strftime('%H:%M:%S')}")
print(f"  完整时间:{now.strftime('%Y-%m-%d %H:%M:%S')}")

print("\n2. 中文格式:")
print(f"  {now.year}年{now.month}月{now.day}日")
print(f"  星期{now.weekday() + 1}")
print(f"  {now.hour:02d}时{now.minute:02d}分{now.second:02d}秒")

print("\n3. 12小时制:")
hour_12 = now.hour % 12
if hour_12 == 0:
    hour_12 = 12
am_pm = "上午" if now.hour < 12 else "下午"
print(f"  {am_pm}{hour_12}:{now.minute:02d}")

print("\n4. 其他格式:")
print(f"  简写日期:{now.strftime('%y/%m/%d')}")  # 两位年份
print(f"  月份全名:{now.strftime('%B')}")
print(f"  月份简写:{now.strftime('%b')}")
print(f"  星期全名:{now.strftime('%A')}")
print(f"  星期简写:{now.strftime('%a')}")

# 格式化符号表
print("\n📋 常用格式化符号:")
format_codes = [
    ("%Y", "四位年份(2023)"),
    ("%y", "两位年份(23)"),
    ("%m", "月份(01-12)"),
    ("%B", "月份全名(January)"),
    ("%b", "月份简写(Jan)"),
    ("%d", "日期(01-31)"),
    ("%H", "24小时制小时(00-23)"),
    ("%I", "12小时制小时(01-12)"),
    ("%M", "分钟(00-59)"),
    ("%S", "秒(00-59)"),
    ("%p", "上午/下午(AM/PM)"),
    ("%A", "星期全名(Monday)"),
    ("%a", "星期简写(Mon)"),
    ("%w", "星期数字(0-6,0是周日)"),
]

for code, meaning in format_codes:
    result = now.strftime(code)
    print(f"  {code:3} = {meaning:15} → 示例:{result}")

项目1:精美时钟

# 精美时钟程序
import datetime
import time
import os

print("🕐 精美时钟")
print("=" * 30)
print("按 Ctrl+C 停止")

try:
    while True:
        # 清屏(不同系统命令不同)
        os.system('cls' if os.name == 'nt' else 'clear')
        
        # 获取当前时间
        now = datetime.datetime.now()
        
        # 创建美观的时钟界面
        print("\n" + "═" * 40)
        print(" " * 15 + "🕐 数字时钟")
        print("═" * 40)
        
        # 显示日期
        date_str = now.strftime("%Y年%m月%d日")
        weekday_str = ["一", "二", "三", "四", "五", "六", "日"][now.weekday()]
        print(f"📅 日期:{date_str} 星期{weekday_str}")
        
        # 显示时间(大字体效果)
        time_str = now.strftime("%H:%M:%S")
        print("\n" + " " * 12 + "╔══════════╗")
        print(" " * 12 + f"║  {time_str}  ║")
        print(" " * 12 + "╚══════════╝")
        
        # 显示12小时制
        hour_12 = now.hour % 12
        if hour_12 == 0:
            hour_12 = 12
        am_pm = "上午" if now.hour < 12 else "下午"
        print(f"⏰ 12小时制:{am_pm}{hour_12:02d}:{now.minute:02d}:{now.second:02d}")
        
        # 显示秒的小数部分
        print(f"⏱️  毫秒:{now.microsecond // 1000:03d}")
        
        # 进度条显示一天进度
        total_seconds = now.hour * 3600 + now.minute * 60 + now.second
        day_progress = total_seconds / 86400
        bar_length = 30
        filled = int(bar_length * day_progress)
        bar = "█" * filled + "░" * (bar_length - filled)
        print(f"📊 今天进度:[{bar}] {day_progress*100:.1f}%")
        
        # 问候语
        if now.hour < 6:
            greeting = "🌙 夜深了,早点休息"
        elif now.hour < 12:
            greeting = "🌅 早上好,新的一天开始了!"
        elif now.hour < 14:
            greeting = "🍚 中午好,午饭时间到!"
        elif now.hour < 18:
            greeting = "☀️ 下午好,继续加油!"
        elif now.hour < 22:
            greeting = "🌆 晚上好,放松一下!"
        else:
            greeting = "🌃 该准备睡觉了!"
        
        print(f"\n💬 {greeting}")
        print("═" * 40)
        
        # 等待1秒
        time.sleep(1)
        
except KeyboardInterrupt:
    print("\n⏹️ 时钟已停止")

⏱️ 第四部分:时间计算和比较

时间差计算

import datetime

print("⏱️ 时间差计算")
print("=" * 20)

# 创建两个时间
time1 = datetime.datetime(2023, 10, 1, 8, 30, 0)  # 10月1日 8:30
time2 = datetime.datetime(2023, 10, 1, 16, 45, 30)  # 10月1日 16:45:30

print(f"时间1:{time1}")
print(f"时间2:{time2}")

# 计算时间差
time_diff = time2 - time1
print(f"\n时间差:{time_diff}")
print(f"总秒数:{time_diff.total_seconds()}秒")
print(f"总分钟数:{time_diff.total_seconds() / 60:.1f}分钟")
print(f"总小时数:{time_diff.total_seconds() / 3600:.2f}小时")

# 获取时间差的各个部分
print("\n🔍 详细时间差:")
print(f"天数:{time_diff.days}天")
print(f"秒数:{time_diff.seconds}秒")
print(f"微秒:{time_diff.microseconds}微秒")

# 计算时分秒
total_seconds = time_diff.total_seconds()
hours = int(total_seconds // 3600)
minutes = int((total_seconds % 3600) // 60)
seconds = int(total_seconds % 60)
print(f"分解为:{hours}小时{minutes}分钟{seconds}秒")

项目2:倒计时器

# 倒计时器
import datetime
import time

print("⏳ 倒计时器")
print("=" * 20)

# 选择倒计时类型
print("请选择倒计时类型:")
print("1. 特定日期倒计时(如生日、节日)")
print("2. 自定义时间倒计时(如考试、比赛)")
print("3. 简单时间倒计时(小时、分钟、秒)")

choice = input("\n你的选择(1-3):")

if choice == "1":
    # 特定日期倒计时
    print("\n🎯 特定日期倒计时")
    event_name = input("事件名称(如:生日、春节):")
    
    year = int(input("年份:"))
    month = int(input("月份:"))
    day = int(input("日期:"))
    
    target_date = datetime.datetime(year, month, day)
    
elif choice == "2":
    # 自定义时间倒计时
    print("\n🎯 自定义时间倒计时")
    event_name = input("事件名称:")
    
    print("\n请输入目标时间:")
    year = int(input("年份:"))
    month = int(input("月份:"))
    day = int(input("日期:"))
    hour = int(input("小时(0-23):"))
    minute = int(input("分钟(0-59):"))
    
    target_date = datetime.datetime(year, month, day, hour, minute)
    
elif choice == "3":
    # 简单倒计时
    print("\n🎯 简单倒计时")
    event_name = input("事件名称:")
    
    hours = int(input("小时:"))
    minutes = int(input("分钟:"))
    seconds = int(input("秒:"))
    
    # 计算目标时间(当前时间 + 倒计时时间)
    now = datetime.datetime.now()
    target_date = now + datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)
    
else:
    print("❌ 无效选择,使用默认设置")
    event_name = "默认倒计时"
    target_date = datetime.datetime.now() + datetime.timedelta(hours=1)

print(f"\n⏰ 倒计时开始:{event_name}")
print(f"目标时间:{target_date.strftime('%Y-%m-%d %H:%M:%S')}")
print("\n按 Ctrl+C 停止倒计时")

try:
    while True:
        # 获取当前时间
        now = datetime.datetime.now()
        
        # 计算剩余时间
        if now < target_date:
            time_left = target_date - now
            
            # 计算各个部分
            days = time_left.days
            hours = time_left.seconds // 3600
            minutes = (time_left.seconds % 3600) // 60
            seconds = time_left.seconds % 60
            
            # 显示倒计时
            print(f"\r⏳ 剩余时间:{days}天 {hours:02d}:{minutes:02d}:{seconds:02d}", end="")
            
            # 等待1秒
            time.sleep(1)
        else:
            print(f"\n\n🎉 时间到!{event_name}!")
            print("🔔 倒计时结束!")
            break
            
except KeyboardInterrupt:
    print(f"\n\n⏹️ 倒计时已停止")

# 显示统计信息
now = datetime.datetime.now()
if now < target_date:
    time_passed = datetime.datetime.now() - (target_date - (target_date - now))
    print(f"⏱️ 本次倒计时进行了:{time_passed}")
else:
    time_passed = target_date - (target_date - (datetime.datetime.now() - target_date))
    print(f"⏱️ 倒计时准时结束")

项目3:学习计时器

# 学习计时器
import datetime
import time

print("📚 学习计时器")
print("=" * 20)
print("帮助你记录学习时间,科学安排休息")

# 学习任务
task = input("你要学习什么科目?")
study_time = int(input("计划学习多少分钟?"))
break_time = int(input("休息多少分钟?"))

print(f"\n⏰ 学习计划:")
print(f"科目:{task}")
print(f"学习:{study_time}分钟")
print(f"休息:{break_time}分钟")
print("=" * 20)

cycles = 0
total_study_time = 0
total_break_time = 0

try:
    while True:
        cycles += 1
        
        # 学习阶段
        print(f"\n🎯 第{cycles}轮学习开始!")
        print(f"科目:{task}")
        study_end = datetime.datetime.now() + datetime.timedelta(minutes=study_time)
        
        while datetime.datetime.now() < study_end:
            time_left = study_end - datetime.datetime.now()
            minutes = int(time_left.total_seconds() // 60)
            seconds = int(time_left.total_seconds() % 60)
            print(f"\r📖 学习剩余:{minutes:02d}:{seconds:02d}", end="")
            time.sleep(1)
        
        total_study_time += study_time
        print(f"\n\n✅ 学习完成!本轮学习了{study_time}分钟")
        
        # 休息阶段
        print(f"\n☕ 开始休息{break_time}分钟")
        break_end = datetime.datetime.now() + datetime.timedelta(minutes=break_time)
        
        while datetime.datetime.now() < break_end:
            time_left = break_end - datetime.datetime.now()
            minutes = int(time_left.total_seconds() // 60)
            seconds = int(time_left.total_seconds() % 60)
            print(f"\r🌴 休息剩余:{minutes:02d}:{seconds:02d}", end="")
            time.sleep(1)
        
        total_break_time += break_time
        print(f"\n\n⏰ 休息结束!")
        
        # 询问是否继续
        print(f"\n📊 学习统计:")
        print(f"  已完成{cycles}轮学习")
        print(f"  总学习时间:{total_study_time}分钟")
        print(f"  总休息时间:{total_break_time}分钟")
        
        continue_study = input("\n是否继续下一轮学习?(是/否)")
        if continue_study.lower() != "是":
            break
            
except KeyboardInterrupt:
    print(f"\n\n⏹️ 学习计时已停止")

# 最终统计
print(f"\n{'='*30}")
print("📊 最终学习报告")
print("="*30)
print(f"学习科目:{task}")
print(f"完成轮数:{cycles}轮")
print(f"总学习时间:{total_study_time}分钟")
print(f"总休息时间:{total_break_time}分钟")
print(f"总时长:{total_study_time + total_break_time}分钟")

# 建议
if cycles >= 3:
    print("\n💡 建议:你已经学习了很长时间,应该好好休息!")
elif total_study_time >= 60:
    print("\n💡 建议:学习时间超过1小时,可以安排一次长休息!")
else:
    print("\n💡 建议:保持良好的学习节奏!")

📅 第五部分:日程管理和提醒

项目4:智能课程表

# 智能课程表
import datetime

print("📅 智能课程表")
print("=" * 20)

# 定义课程表
schedule = {
    0: ["语文", "数学", "英语", "体育", "美术"],  # 周一
    1: ["数学", "语文", "科学", "音乐", "自习"],  # 周二
    2: ["英语", "数学", "社会", "体育", "班会"],  # 周三
    3: ["语文", "英语", "科学", "美术", "自习"],  # 周四
    4: ["数学", "语文", "英语", "音乐", "大扫除"], # 周五
    5: ["周末", "周末", "周末", "周末", "周末"],  # 周六
    6: ["周末", "周末", "周末", "周末", "周末"],  # 周日
}

# 课程时间
class_times = [
    "08:00-08:40",
    "08:50-09:30", 
    "10:00-10:40",
    "10:50-11:30",
    "14:00-14:40"
]

# 获取当前时间
now = datetime.datetime.now()
weekday = now.weekday()  # 0=周一, 6=周日
current_time = now.time()

# 显示今日课表
print(f"今天是{now.strftime('%Y年%m月%d日')}")
weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
print(f"📅 {weekdays[weekday]} 课程表")

print("\n" + "="*30)
for i, (course, time_slot) in enumerate(zip(schedule[weekday], class_times), 1):
    print(f"第{i}节 {time_slot:12} {course}")
print("="*30)

# 判断当前是什么课
if weekday >= 5:  # 周末
    print("\n🎉 今天是周末!好好休息!")
else:
    # 检查当前时间对应的课程
    current_class = None
    class_index = -1
    
    # 定义课程时间段
    class_periods = [
        (datetime.time(8, 0), datetime.time(8, 40)),   # 第1节
        (datetime.time(8, 50), datetime.time(9, 30)),  # 第2节
        (datetime.time(10, 0), datetime.time(10, 40)), # 第3节
        (datetime.time(10, 50), datetime.time(11, 30)),# 第4节
        (datetime.time(14, 0), datetime.time(14, 40)), # 第5节
    ]
    
    for i, (start, end) in enumerate(class_periods):
        if start <= current_time <= end:
            current_class = schedule[weekday][i]
            class_index = i
            break
    
    if current_class:
        print(f"\n⏰ 现在正在上:第{class_index+1}节 {current_class}")
        print(f"  时间:{class_times[class_index]}")
        
        # 计算距离下课还有多久
        end_time = class_periods[class_index][1]
        time_left = datetime.datetime.combine(datetime.date.today(), end_time) - now
        minutes_left = int(time_left.total_seconds() // 60)
        seconds_left = int(time_left.total_seconds() % 60)
        
        if minutes_left > 0:
            print(f"  ⏳ 距离下课还有:{minutes_left}分钟{seconds_left}秒")
        else:
            print(f"  ⏰ 快下课了!")
    else:
        # 判断是课前还是课后
        if current_time < datetime.time(8, 0):
            print(f"\n🌅 还没开始上课,好好准备!")
        elif current_time > datetime.time(14, 40):
            print(f"\n🎉 今天的课程已全部结束!")
        else:
            # 判断是课间休息
            print(f"\n☕ 现在是课间休息时间")

# 显示明日课表
print(f"\n📅 明日({weekdays[(weekday + 1) % 7]})课程:")
for i, (course, time_slot) in enumerate(zip(schedule[(weekday + 1) % 7], class_times), 1):
    print(f"  第{i}节 {time_slot:12} {course}")

项目5:纪念日提醒器

# 纪念日提醒器
import datetime

print("🎈 纪念日提醒器")
print("=" * 20)

# 重要纪念日
important_dates = {
    "春节": datetime.date(2023, 1, 22),
    "元宵节": datetime.date(2023, 2, 5),
    "清明节": datetime.date(2023, 4, 5),
    "劳动节": datetime.date(2023, 5, 1),
    "儿童节": datetime.date(2023, 6, 1),
    "端午节": datetime.date(2023, 6, 22),
    "中秋节": datetime.date(2023, 9, 29),
    "国庆节": datetime.date(2023, 10, 1),
    "元旦": datetime.date(2024, 1, 1),
}

# 添加个人纪念日
print("是否添加个人纪念日?")
add_personal = input("(输入'是'添加,其他键跳过):")

if add_personal.lower() == "是":
    num_personal = int(input("要添加几个纪念日?"))
    for i in range(num_personal):
        print(f"\n添加第{i+1}个纪念日:")
        name = input("纪念日名称:")
        year = int(input("年份:"))
        month = int(input("月份:"))
        day = int(input("日期:"))
        
        important_dates[name] = datetime.date(year, month, day)

# 获取当前日期
today = datetime.date.today()
print(f"\n今天是:{today.strftime('%Y年%m月%d日')}")

# 检查纪念日
print("\n📅 即将到来的纪念日:")
print("="*40)

upcoming_dates = []
for name, date in important_dates.items():
    # 计算距离纪念日的天数
    days_diff = (date - today).days
    
    if -7 <= days_diff <= 30:  # 过去7天内到未来30天内
        upcoming_dates.append((name, date, days_diff))

# 按天数排序
upcoming_dates.sort(key=lambda x: x[2])

if not upcoming_dates:
    print("近期没有重要纪念日")
else:
    for name, date, days_diff in upcoming_dates:
        weekday = ["一", "二", "三", "四", "五", "六", "日"][date.weekday()]
        
        if days_diff < 0:
            print(f"📅 {name}:{date.strftime('%m月%d日')} 星期{weekday}")
            print(f"  已经过去{abs(days_diff)}天了")
        elif days_diff == 0:
            print(f"🎉 {name}:今天!")
            print(f"  {date.strftime('%m月%d日')} 星期{weekday}")
        elif days_diff == 1:
            print(f"🎯 {name}:明天!")
            print(f"  {date.strftime('%m月%d日')} 星期{weekday}")
        elif days_diff <= 7:
            print(f"⏰ {name}:{days_diff}天后")
            print(f"  {date.strftime('%m月%d日')} 星期{weekday}")
        else:
            print(f"📅 {name}:{days_diff}天后")
            print(f"  {date.strftime('%m月%d日')} 星期{weekday}")
        print("-"*30)

# 最近的一个纪念日
if upcoming_dates and upcoming_dates[0][2] > 0:
    next_name, next_date, next_days = upcoming_dates[0]
    print(f"\n🎯 下一个纪念日是:{next_name}")
    print(f"⏰ 距离还有:{next_days}天")
    print(f"📅 日期:{next_date.strftime('%Y年%m月%d日')}")
    
    # 星期几
    weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
    print(f"📅 星期:{weekdays[next_date.weekday()]}")

🎮 第六部分:时间相关游戏

游戏1:时间猜谜游戏

# 时间猜谜游戏
import datetime
import random

print("⏰ 时间猜谜游戏")
print("=" * 20)
print("测试你对时间的理解!")

score = 0
questions = 5

for q in range(1, questions + 1):
    print(f"\n第{q}题:")
    
    # 随机生成一个时间
    random_hour = random.randint(0, 23)
    random_minute = random.randint(0, 59)
    random_time = datetime.time(random_hour, random_minute)
    
    print(f"时间:{random_hour:02d}:{random_minute:02d}")
    
    # 问题类型
    question_type = random.choice([
        "am_pm",  # 判断上午下午
        "quarter",  # 判断刻钟
        "to_half",  # 差几分钟到整点/半点
        "angle"  # 时钟角度(简化)
    ])
    
    if question_type == "am_pm":
        # 判断上午下午
        print("这个时间是上午还是下午?")
        print("1. 上午")
        print("2. 下午")
        
        correct = 1 if random_hour < 12 else 2
        try:
            answer = int(input("你的选择(1/2):"))
            if answer == correct:
                print("✅ 正确!")
                score += 1
            else:
                print(f"❌ 错误!{random_hour:02d}:{random_minute:02d}是{'上午' if random_hour < 12 else '下午'}")
        except:
            print("❌ 请输入1或2!")
            
    elif question_type == "quarter":
        # 判断刻钟
        if random_minute < 15:
            quarter = "一刻"
        elif random_minute < 30:
            quarter = "两刻"
        elif random_minute < 45:
            quarter = "三刻"
        else:
            quarter = "四刻"
        
        print(f"这个时间是{quarter}吗?(是/否)")
        
        # 随机决定是否正确
        is_correct = random.choice([True, False])
        if not is_correct:
            # 生成错误的quarter
            all_quarters = ["一刻", "两刻", "三刻", "四刻"]
            all_quarters.remove(quarter)
            quarter = random.choice(all_quarters)
        
        print(f"问题:现在是{quarter}吗?")
        answer = input("你的回答(是/否):")
        
        correct_answer = "是" if is_correct else "否"
        if answer == correct_answer:
            print("✅ 正确!")
            score += 1
        else:
            actual_quarter = ""
            if random_minute < 15:
                actual_quarter = "一刻"
            elif random_minute < 30:
                actual_quarter = "两刻"
            elif random_minute < 45:
                actual_quarter = "三刻"
            else:
                actual_quarter = "四刻"
            print(f"❌ 错误!现在是{actual_quarter}")
            
    elif question_type == "to_half":
        # 差几分钟到整点/半点
        if random_minute <= 30:
            target = 30
            target_name = "半点"
        else:
            target = 60
            target_name = "整点"
        
        minutes_to = target - random_minute
        
        print(f"差几分钟到{target_name}?")
        try:
            answer = int(input("你的答案:"))
            if answer == minutes_to:
                print("✅ 正确!")
                score += 1
            else:
                print(f"❌ 错误!还差{minutes_to}分钟")
        except:
            print("❌ 请输入数字!")
    
    else:  # angle
        # 简化版时钟角度
        hour_angle = (random_hour % 12) * 30 + random_minute * 0.5
        minute_angle = random_minute * 6
        angle = abs(hour_angle - minute_angle)
        angle = min(angle, 360 - angle)
        
        # 给出范围
        if angle < 30:
            range_str = "小于30度"
        elif angle < 60:
            range_str = "30-60度"
        elif angle < 90:
            range_str = "60-90度"
        else:
            range_str = "大于90度"
        
        print(f"时针和分针的夹角大概是多少?")
        print(f"1. 小于30度")
        print(f"2. 30-60度")
        print(f"3. 60-90度")
        print(f"4. 大于90度")
        
        correct_choice = 1 if angle < 30 else 2 if angle < 60 else 3 if angle < 90 else 4
        
        try:
            answer = int(input("你的选择(1-4):"))
            if answer == correct_choice:
                print("✅ 正确!")
                score += 1
            else:
                print(f"❌ 错误!实际角度是{angle:.1f}度")
        except:
            print("❌ 请输入1-4的数字!")

# 显示成绩
print(f"\n{'='*30}")
print(f"📊 答题结果:{score}/{questions}")
percentage = (score / questions) * 100
print(f"正确率:{percentage:.1f}%")

if percentage == 100:
    print("🎉 太棒了!你是时间大师!")
elif percentage >= 80:
    print("👍 优秀!继续加油!")
elif percentage >= 60:
    print("😊 不错!继续努力!")
else:
    print("💪 加油!多练习会更好!")

🔧 常见问题解答

Q1:如何获取指定日期是星期几?

import datetime

# 创建指定日期
date = datetime.date(2023, 10, 1)

# 方法1:使用weekday(),返回0-6,0是周一
weekday_num = date.weekday()  # 6表示周日
weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]
print(f"方法1:{weekdays[weekday_num]}")

# 方法2:使用strftime
weekday_str = date.strftime("%A")  # 英文全称
print(f"方法2:{weekday_str}")

# 方法3:自定义格式
weekday_cn = date.strftime("%w")  # 0-6,0是周日
weekday_map = {"0": "日", "1": "一", "2": "二", "3": "三", "4": "四", "5": "五", "6": "六"}
print(f"方法3:星期{weekday_map[weekday_cn]}")

Q2:如何计算两个日期间的天数?

import datetime

# 两个日期
date1 = datetime.date(2023, 1, 1)
date2 = datetime.date(2023, 12, 31)

# 计算天数差
days_diff = (date2 - date1).days
print(f"从{date1}到{date2}有{days_diff}天")

# 包括今天
days_diff_inclusive = days_diff + 1
print(f"包括首尾共有{days_diff_inclusive}天")

Q3:如何在时间计算中处理闰年?

import datetime
import calendar

year = 2024

# 判断是否为闰年
is_leap = calendar.isleap(year)
print(f"{year}年是{'闰年' if is_leap else '平年'}")

# 获取一年的天数
days_in_year = 366 if is_leap else 365
print(f"{year}年有{days_in_year}天")

# 获取二月的天数
feb_days = calendar.monthrange(year, 2)[1]
print(f"{year}年2月有{feb_days}天")

📅 下节课预告

第10课:阶段项目-个性化名片生成器

下节课你将综合应用前9课所有知识:

  1. 制作个人信息系统
  2. 添加时间戳和随机ID
  3. 设计美观的输出格式
  4. 实现多种导出方式
  5. 添加个性化定制功能

准备任务

  1. 收集你的个人信息
  2. 想想你希望名片有什么特色
  3. 准备一些创意设计想法
  4. 复习前9课的知识点

💬 给家长的话

亲爱的家长

今天孩子学习了时间处理的相关知识,这是编程中非常实用和重要的部分。

孩子今天学会了

  1. ✅ 使用datetime模块处理时间
  2. ✅ 格式化显示各种时间格式
  3. ✅ 进行时间差计算
  4. ✅ 制作倒计时器和计时器
  5. ✅ 创建日程管理系统

时间管理的教育价值

| 技能 | 编程知识 | 实际应用 | 教育意义 |

|------|---------|---------|---------|

| 时间获取 | datetime模块 | 时钟、日历 | 时间观念 |

| 时间计算 | 时间差计算 | 倒计时、计时 | 规划能力 |

| 时间格式 | 字符串格式化 | 多格式显示 | 表达能力 |

| 日程管理 | 数据结构 | 课程表、提醒 | 自律能力 |

您可以这样做

实际应用

  1. 家庭日程:用孩子的程序管理家庭日程
  2. 学习计时:帮助孩子合理安排学习时间
  3. 纪念日:记录家庭重要纪念日
  4. 时间游戏:玩时间猜谜游戏

教育引导

  1. 培养孩子的时间管理意识
  2. 讨论时间的重要性
  3. 学习如何合理规划时间
  4. 理解计算机如何处理时间

温馨提示

  • 时间相关程序很实用,鼓励孩子实际使用
  • 帮助孩子将程序应用到学习中
  • 分享时间管理经验和技巧
  • 讨论不同文化对时间的理解

🏆 今日成就

完成了今天的学习,你:

掌握了时间处理的核心技能

📅 创建了智能日程管理系统

⏱️ 实现了倒计时和计时功能

🎮 开发了时间相关游戏

🔧 解决了时间计算的各种问题

挑战任务

  1. 为家人制作一个生日提醒程序
  2. 创建一个学习时间统计工具
  3. 设计一个世界时钟程序
  4. 实现一个番茄工作法计时器

🌟 编程心法

时间是程序的血脉
记录每一刻的变化
计算每一次的间隔
格式化每一次的展示
从获取到计算
从显示到应用
时间让程序有记忆
时间让功能有节奏
掌握时间
就掌握了程序的脉搏

记住:时间是编程中最重要的维度之一。今天你学到的不仅是技术,更是管理时间和生活的能力!


第9课结束。你现在已经能成为时间的主人了!

实践任务:

1. 制作一个个人日程提醒程序

2. 为学习创建番茄钟计时器

3. 设计一个家庭纪念日历

4. 实现一个精美数字时钟

下节课,我们将综合所有知识,制作完整的个人名片系统!

第10课见!🎉