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

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}, ... ]),可以按照以下逻辑排除不需要的取值:

  1. 遍历列表中的每个字典元素
  2. 用if语句判断当前元素是否符合保留条件
  3. 不符合条件的直接跳过,符合条件的存入结果列表或者直接做对应操作

示例代码:

# 字典列表示例
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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:06:04