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

Python新手求助:如何关联两个独立字典实现过敏食物查询?

问题解决:关联参与者过敏原与需规避食物的字典处理

你的需求是输入参与者姓名后,输出其过敏原及需避开的食物,原代码存在几个明显问题,下面是修正后的完整代码和说明:

原代码的问题

  • 变量名拼写不一致:定义的字典是participants_and_allergens,但代码里写成了participants_og_allergener(挪威语og对应英文and,但代码里要统一命名)
  • 变量未定义就引用:在赋值allergens = ...之前就打印allergens,会触发报错
  • 食物匹配逻辑错误:allergens_and_foods.get("allergens")完全不对,这个字典的键是食物名,需要遍历所有食物,检查是否包含参与者的过敏原

修正后的代码

participants_and_allergens = {
    "Ole": ["gluten", "egg"],
    "Silje": ["shellfish", "nuts"],
    "Ragnar": ["milk", "fish"]
}

allergens_and_foods = {
    "Garlic bread": ["gluten", "egg"],
    "Fish soup": ["shellfish", "fish"],
    "Chocolate Cake": ["milk", "egg"]
}

def check_allergies():
    name = input("What is your name?\n> ")
    # 检查姓名是否在注册表中
    allergens = participants_and_allergens.get(name)
    if not allergens:
        print(f"Sorry, {name} does not exist in the registry")
        return
    
    # 收集需要避开的食物:遍历所有食物,只要食物含任一过敏原就加入列表
    forbidden_foods = []
    for food, food_allergens in allergens_and_foods.items():
        # 检查当前食物的过敏原是否和参与者的过敏原有交集
        if any(allergen in food_allergens for allergen in allergens):
            forbidden_foods.append(food)
    
    # 格式化字符串,把列表转成自然语言(比如用and连接最后一项)
    allergens_str = ' and '.join(allergens)
    # 处理egg变eggs的小细节,符合示例输出
    allergens_str = allergens_str.replace("egg", "eggs")
    foods_str = ' and '.join(forbidden_foods)
    
    # 输出最终结果
    print(f"Hi {name}, you have allergies to {allergens_str} and should stay away from the foods {foods_str}")

check_allergies()

代码逻辑说明

  1. 先通过participants_and_allergens.get(name)获取参与者的过敏原列表,不存在则直接提示
  2. 遍历食物字典的每一项(食物名+对应过敏原),用any()函数判断该食物是否包含参与者的任一过敏原,是的话加入禁吃食物列表
  3. 用' and '.join()把列表转成符合口语习惯的字符串,比如["gluten", "egg"]变成"gluten and egg"
  4. 最后用f-string拼接成完整的输出句子,和你想要的示例格式一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:15:43