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')
关键修改说明
- 移除全局变量
namey,改用函数返回值传递结果,彻底避免作用域问题。 - 将输入的字符串号码转为整数,确保和字典内的号码类型一致,匹配逻辑生效。
- 优化循环逻辑:找到匹配项立即返回,不会被后续循环覆盖结果;循环结束后再返回“未找到”提示。
- 修正了拼写错误(
serch→search、qustion→question等),提升代码可读性。
内容的提问来源于stack exchange,提问作者coder
相关产品推荐
相关产品推荐

