Python如何让用户通过列表索引选择选项配置每周餐食
实现方案
你需要的功能可以通过enumerate()遍历餐食列表生成动态编号,配合输入校验完成,无需单独维护自增索引字典,核心优化点如下:
- 展示可选餐食时自动生成对应数字编号,用户仅需输入数字即可完成选择,无需拼写完整餐食名
- 新增循环校验逻辑,用户输入错误时自动提示重输,不会直接抛出异常终止运行
- 使用
list.pop()方法直接根据索引移除选中餐食,操作比先查元素再删除更简便
完整可运行代码示例
# 可替换为你自己的实际数据 week_meals = {"周一": None, "周二": None, "周三": None, "周四": None, "周五": None, "周六": None, "周日": None} week_meals_list = ["Szechuan pork stir-fry", "番茄炒蛋", "宫保鸡丁", "清蒸鱼", "牛肉面", "蔬菜沙拉", "牛肉汉堡"] for day in week_meals: print(f"\n=== 选择{day}的餐食 ===") # 打印带编号的可选餐食列表 for idx, meal in enumerate(week_meals_list): print(f"{idx} - {meal}") # 循环校验输入,直到用户输入合法值 while True: user_input = input("请输入对应餐食的编号:") # 校验是否为数字 if not user_input.isdigit(): print("输入不合法,请输入数字编号!") continue select_idx = int(user_input) # 校验索引是否在可选范围 if select_idx < 0 or select_idx >= len(week_meals_list): print(f"编号超出范围,请输入0到{len(week_meals_list)-1}之间的数字!") continue break # 更新餐食数据 selected_meal = week_meals_list.pop(select_idx) week_meals[day] = selected_meal print(f"已为{day}选择:{selected_meal}") # 打印最终的周餐食安排 print("\n====================\n本周餐食安排如下:") for day, meal in week_meals.items(): print(f"{day}:{meal}")
可选优化(支持同时输入编号或餐食名)
如果需要兼容用户输入完整餐食名的使用习惯,可将输入校验部分修改为如下逻辑:
while True: user_input = input("请输入对应餐食的编号或完整名称:") # 先判断是否为数字索引 if user_input.isdigit(): select_idx = int(user_input) if 0 <= select_idx < len(week_meals_list): break print(f"编号超出范围,请输入0到{len(week_meals_list)-1}之间的数字!") # 再判断是否为餐食名称 elif user_input in week_meals_list: select_idx = week_meals_list.index(user_input) break else: print("输入不合法,请输入正确的编号或餐食名称!")
内容的提问来源于stack exchange,提问作者Goose
相关产品推荐
相关产品推荐

