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

Python开发问题:如何校验用户输入的所有配料均在菜单列表内?

问题解决:确保用户输入的所有食材均在菜单内才执行后续逻辑

原代码的核心问题

  1. 分割逻辑无效:split(', ' or ' , ') 实际只会按, 分割,无法处理用户输入中逗号后带空格(比如Mushroom , Bacon)的情况,导致分割后的元素带空格,匹配失败。
  2. 判断条件错误:x_set & menu_set 只要用户输入和菜单有交集就执行后续逻辑,完全忽略了输入中存在菜单外元素的情况。
  3. 缺失错误处理:没有检测并提示用户输入的非法元素,也没有退出程序的逻辑。

修正后的代码实现

import time

# 定义菜单食材列表
menu = ["Mushroom", "Bacon", "Sausage", "Pepperoni", "Chicken"]
menu_set = set(menu)

# 获取并处理用户输入:先按逗号分割,再去除每个元素的前后空格并统一为标题格式
user_input = input("Your desired ingredients: ")
user_ask = [item.strip().title() for item in user_input.split(',')]

# 检查是否有非法食材
invalid_items = [item for item in user_ask if item not in menu_set]
if invalid_items:
    print(f"错误:以下食材不在菜单内:{', '.join(invalid_items)}")
    exit()

# 所有食材合法,执行后续逻辑
print("\nYou have chosen: ")
for item in user_ask:
    print(item)

# 处理蘑菇添加逻辑(示例)
if "Mushroom" in user_ask:
    print("Adding Mushroom...")
    for waiting_time in range(3, 0, -1):
        time.sleep(1)
        print(waiting_time)
    time.sleep(0.7)
    print("Mushroom added!")

# 可继续添加其他食材的处理逻辑

关键改进点

  • 输入处理优化:用列表推导式先分割再strip()去除空格,再统一为title()格式,确保输入格式和菜单一致,同时兼容不同的逗号分隔写法(比如a,b、a , b、a, b)。
  • 非法元素检测:通过列表推导式筛选出不在菜单中的元素,存在则直接提示并退出程序。
  • 集合高效匹配:将菜单转为集合menu_set,利用集合的O(1)查找效率提升判断速度。
  • 逻辑顺序调整:先完成所有合法性检查,再执行后续的食材添加逻辑,符合需求要求。

内容的提问来源于stack exchange,提问作者Toriqul_Islam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:30:41