Python随机生成每周餐单代码问题:每日重复同一菜品需修复
修复方案:为一周七天随机分配不同餐食并写入Excel
原代码问题分析
原代码的嵌套循环逻辑完全错误:
- 外层循环遍历每一道菜品,内层循环把当前菜品重复赋值给七天,导致每天都是同一道菜
- 遍历完所有菜品后,会重复输出多组“七天同菜”的结果,完全不符合“每日随机不同餐食”的需求
修复后的代码
import pandas as pd import random def main(): # 读取菜品数据 db = pd.read_excel("meals.xlsx") meals_list = db["meals"].tolist() week_days = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"] # 检查菜品数量是否足够分配七天不重复的餐食 if len(meals_list) < len(week_days): print("警告:菜品数量不足7道,将出现重复餐食") # 数量不足时允许重复随机选择 selected_meals = [random.choice(meals_list) for _ in week_days] else: # 随机选择7道不重复的菜品 selected_meals = random.sample(meals_list, len(week_days)) # 构建每日餐食对应关系 weekly_meals = dict(zip(week_days, selected_meals)) # 打印每日餐食结果 for day, meal in weekly_meals.items(): print(f"{day}: {meal}") # 写入Excel文件用于采购 df = pd.DataFrame.from_dict(weekly_meals, orient="index", columns=["meal"]) df.to_excel("weekly_shopping_list.xlsx") if __name__ == "__main__": main()
关键修复点说明
- 随机选菜逻辑:用
random.sample()从菜品列表选取7个不重复样本(菜品数量≥7时),确保每日餐食不同;若菜品不足7道,退用random.choice()生成允许重复的列表并给出警告 - 数据结构优化:通过
zip()将星期列表与选中菜品配对成字典,清晰对应每日餐食 - Excel写入:把字典转换为DataFrame,直接写入新Excel文件,方便采购使用
内容的提问来源于stack exchange,提问作者charles rushin
相关产品推荐
相关产品推荐

