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

Python电话簿程序查询字典内号码返回空结果,求问题排查与解决

问题分析与解决

核心问题点

  • 变量作用域冲突:函数serch里的namey是局部变量,没有修改外部的全局namey,导致外部的namey始终是空字符串,最后打印空结果。
  • 类型不匹配:输入的电话号码是字符串(input()返回值默认是字符串),但字典里存的是整数,y == h的比较永远不成立,自然找不到匹配项。
  • 循环逻辑错误:就算某次循环找到了匹配号码,后续循环遇到不匹配项时,会把namey重新设为“未找到”,正确结果会被覆盖。

修正后的代码

namephone = {'Amal':1111111111, 
             'Mohammed':2222222222,
             'Khadijah':3333333333,
             'Abdullah':4444444444,
             'Rawan':5555555555,
             'Faisal':6666666666,
             }

def search(number):
    # 把输入的字符串号码转成整数,和字典内类型统一
    num = int(number)
    for name, phone in namephone.items():
        if phone == num:
            # 找到结果直接返回,终止循环
            return name
    # 循环结束没找到,返回提示
    return 'Sorry, the number is not found'
    
question = input("Please enter number: ")

if question.isdigit() and len(question) == 10:
    result = search(question)
    print(result)
else:
    print('This is invalid number')

关键修改说明

  1. 移除全局变量namey,改用函数返回值传递结果,彻底避免作用域问题。
  2. 将输入的字符串号码转为整数,确保和字典内的号码类型一致,匹配逻辑生效。
  3. 优化循环逻辑:找到匹配项立即返回,不会被后续循环覆盖结果;循环结束后再返回“未找到”提示。
  4. 修正了拼写错误(serch→search、qustion→question等),提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:15:00