请求协助:实现随机为每周日期分配动物的Python动物园日历脚本
解决动物园日历脚本:随机关联动物到一周日期的问题
看起来你已经有了不错的起步,但代码里有几个小问题,还有逻辑上的缺失导致没法完成「随机遍历周并给日期分配动物」的功能。我来帮你梳理并修正:
先说说现有代码的问题
- 变量名错误:你定义了
animallist22但调用了animallist2,运行时会报NameError - 重复冗余的变量:多次获取
today和my_date,可以简化成一次获取 - 缺少一周日期的生成逻辑:你只拿到了当前周的周一日期,但没有遍历生成一周的所有7天
- 动物数量不匹配:你的动物列表只有6种,一周有7天,直接随机抽样会不够用(
random.sample要求样本数量不超过列表长度)
修正后的完整代码
下面是调整后的脚本,包含详细注释,解决了上述问题,并且实现了「为当前周每一天随机分配唯一动物」的功能:
import datetime import calendar import random # 1. 获取当前日期,简化变量定义 today = datetime.date.today() # 2. 计算当前周的起始日期(周一,weekday()返回0=周一,6=周日) start_of_week = today - datetime.timedelta(days=today.weekday()) # 3. 生成当前周的所有7个日期(周一到周日) week_dates = [start_of_week + datetime.timedelta(days=offset) for offset in range(7)] # 4. 动物列表:补充了一种动物来匹配一周7天(你也可以换成自己需要的动物) animal_types = ['Dog', 'Cat', 'Parrot', 'Donkey', 'Snake', 'Fish', 'Rabbit'] # 5. 从动物列表中随机抽取7个不重复的动物 random_animal_list = random.sample(animal_types, len(animal_types)) # 6. 将日期和随机动物关联成字典,形成日历 zoo_weekly_calendar = {date: animal for date, animal in zip(week_dates, random_animal_list)} # 7. 格式化输出结果 print("本周动物园日历:") for date, animal in zoo_weekly_calendar.items(): day_name = calendar.day_name[date.weekday()] print(f"{date.strftime('%Y-%m-%d')} ({day_name}): {animal}")
可选的调整方案
如果不想补充动物,也可以用以下方式处理6种动物对应7天的情况:
- 允许重复动物:把第5步换成
random_animal_list = [random.choice(animal_types) for _ in range(7)],这样可能会有重复的动物分配到不同日期 - 循环填充动物:先打乱现有6种动物,再随机选一个补充,保证尽量少重复:
shuffled_animals = random.sample(animal_types, len(animal_types)) random_animal_list = shuffled_animals + [random.choice(animal_types)]
运行效果示例
输出会类似这样:
本周动物园日历: 2024-05-20 (Monday): Rabbit 2024-05-21 (Tuesday): Donkey 2024-05-22 (Wednesday): Fish 2024-05-23 (Thursday): Cat 2024-05-24 (Friday): Parrot 2024-05-25 (Saturday): Snake 2024-05-26 (Sunday): Dog
内容的提问来源于stack exchange,提问作者whatevs200
相关产品推荐
相关产品推荐

