You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:18:01