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

Python字典结合while循环实现多轮ID匹配的问题排查

Python ID匹配程序:循环版本的识别问题修复

问题说明

需要实现以下功能的Python程序:

  • 接收用户输入的ID(对应字典中的value)
  • 匹配成功后返回对应的用户名(字典的key)
  • 最多支持3次输入尝试

修改为while循环版本后出现异常:首次输入错误时,后续输入正确ID也会被判定错误,直至耗尽所有尝试次数。

初始单轮代码

def get_name(entry):
    customer_id = {'Fayyad':2314,
                'Faysal':9031}
    
    for key, value in customer_id.items():
        if entry == value:
            return f"Welcome {key}!"
        
        return "Sorry, the ID entered is wrong. Try again."
    

res = get_name(int(input("Enter your ID: ")))
print(res)

错误的循环版本代码

def get_name(entry):
    customer_id = {'Fayyad':2314, 'Faysal':9031}
    
    entry_limit = 3

    entry_count = 0

    while entry_count < entry_limit:
        for key, value in customer_id.items():
            if entry == value:
                return f"Welcome {key}!"
        else: 
            int(input("Sorry wrong ID. Please reenter your 4-digit ID number: "))
            entry_count += 1
    
    return "Sorry, you've exceeded your trial limit. Your card will be retained."
        

res = get_name(int(input("Enter your 4-digit ID number: ")))
print(res)

错误输出示例

Enter your 4-digit ID number: 2115
Sorry wrong ID. Please reenter your 4-digit ID number: 2314
Sorry wrong ID. Please reenter your 4-digit ID number: 9031
Sorry wrong ID. Please reenter your 4-digit ID number: 2456
Sorry, you've exceeded your trial limit. Your card will be retained.

问题根源

  1. entry值未更新:函数接收的entry参数仅为首次输入的值,后续循环中重新输入的ID没有赋值给entry,导致每次循环都在判断最初的错误ID。
  2. for循环逻辑缺陷:原函数的for循环在第一次不匹配时就直接返回错误,不会检查字典中的其他键值对。

修复后的代码

def get_name():
    customer_id = {'Fayyad':2314, 'Faysal':9031}
    entry_limit = 3
    entry_count = 0

    while entry_count < entry_limit:
        # 每次循环重新获取用户输入
        try:
            entry = int(input("Enter your 4-digit ID number: "))
        except ValueError:
            print("Please enter a valid 4-digit number.")
            entry_count += 1
            continue
        
        # 遍历所有键值对检查匹配
        matched = False
        for key, value in customer_id.items():
            if entry == value:
                print(f"Welcome {key}!")
                return
        # 遍历完无匹配才提示错误
        print("Sorry wrong ID. Please try again.")
        entry_count += 1
    
    print("Sorry, you've exceeded your trial limit. Your card will be retained.")

# 直接调用函数
get_name()

修复说明

  • 将输入逻辑移到函数内部的循环中,确保每次尝试都能获取新的ID并更新判断值。
  • 修正for循环逻辑:遍历所有键值对后再判定是否匹配失败,避免提前返回错误。
  • 添加异常处理,防止用户输入非数字导致程序崩溃。
  • 调整函数结构,无需传入初始entry参数,逻辑更简洁清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:07:50