Python如何用循环、字典、if语句过滤字典列表并修复电话簿代码错误
Python电话簿程序错误排查与实现方案
原有代码的错误清单
- 关键字误用与拼写错误:将条件判断关键字
if错写为大写开头的While,同时混淆了循环关键字while和条件判断关键字的使用场景,后续elif没有对应的if开头,语法完全不成立 - 输入类型不匹配:
input()函数默认返回字符串类型,直接和字典中存储的整数类型手机号做等值判断,永远不会得到匹配结果 - 字典匹配逻辑错误:判断号码不存在时直接写
guide_number != numbers,是将输入字符串和整个字典对象对比,逻辑完全无效 - 缩进规则不符合要求:
else分支下的print语句没有做缩进,违反Python的语法规范 - 缺少合法性校验逻辑:你需要的「不足10位、非数字输入提示非法号码」的逻辑完全没有实现
- 输出内容拼写错误:匹配到3333333333时输出的
khadijah首字母小写,和字典中存储的Khadijah不一致 - 匹配逻辑冗余:不需要挨个写
elif判断号码对应名称,直接遍历字典即可实现匹配,后续新增号码也不需要修改判断逻辑
修复后的完整代码
def phone_guide(): guide_number = input("请输入号码:") # 先校验号码是否合法:必须是纯数字且长度为10位 if not guide_number.isdigit() or len(guide_number) != 10: print("这是无效号码") return # 转成整数和字典中存储的数值类型对齐 input_num = int(guide_number) numbers = {"Amal": 1111111111, "Mohammed": 2222222222, "Khadijah": 3333333333, "Abdullah": 4444444444} # 遍历字典匹配对应名称 is_found = False for name, phone_num in numbers.items(): if phone_num == input_num: print(name) is_found = True break if not is_found: print("抱歉,号码未找到") phone_guide()
循环搭配if筛选字典列表的通用方法
如果是处理字典列表(格式为[ {"name":"xxx", "num":xxx}, ... ]),可以按照以下逻辑排除不需要的取值:
- 遍历列表中的每个字典元素
- 用if语句判断当前元素是否符合保留条件
- 不符合条件的直接跳过,符合条件的存入结果列表或者直接做对应操作
示例代码:
# 字典列表示例 phone_list = [ {"name": "Amal", "num": 1111111111}, {"name": "Mohammed", "num": 2222222222}, {"name": "Test", "num": 12345} ] # 排除号码不足10位的无效数据,只保留合法记录 valid_list = [] for item in phone_list: if len(str(item["num"])) == 10: valid_list.append(item) print(valid_list)
内容的提问来源于stack exchange,提问作者Zahra ali
相关产品推荐
相关产品推荐

