Python新手求助:全名查重循环程序无法正常运行问题
问题分析与修正代码
原代码的核心问题:
- 误用Python内置关键字
list作为变量名,建议换成自定义名称(比如existing_names) - for循环里的
break位置错误,导致只检查列表第一个元素就终止循环,无法完成全列表查重 - 循环逻辑混乱:重复时没触发重新输入,不重复时也没退出while循环,还会错误重复打印提示
修正后的代码:
# 原有姓名列表,避免使用内置关键字list当变量名 existing_names = ["M T", "Smith Jenkins", "P T", "C P"] # 预先把列表里的姓名处理成无空格格式,存为集合(查重效率更高) processed_names = {"".join(name.split()) for name in existing_names} while True: user_input = input("Your full name :") # 处理用户输入,移除所有空格 user_check = "".join(user_input.split()) # 检查是否重复 if user_check in processed_names: print("Duplicated! Please enter new name") # 回到循环开头,重新获取用户输入 continue else: # 无重复,打印感谢并退出循环 print("Thanks") break
代码逻辑说明:
- 预先处理原有姓名列表,转成无空格的集合,后续查重更高效
- 用户输入后统一处理成无空格字符串,保证比对标准一致
- 用
in直接判断是否重复,无需手动遍历循环 - 重复时用
continue回到循环开头重新输入;不重复时用break退出循环,确保只打印一次提示
内容的提问来源于stack exchange,提问作者Pmt0916
相关产品推荐
相关产品推荐

