Python实现州首府字典增查功能时出现无限循环问题排查
问题根因
- 仅在「州缩写不存在于字典」的分支中写了更新用户输入的代码,当输入的州缩写已存在时,
state变量的值不会被更新,while state !=''的循环条件始终满足,因此触发无限打印逻辑。 - 额外注意:原代码中的
count(sc)如果没有提前自定义实现,运行时会直接抛出NameError。
修复后代码
def main(): sc = { 'FL': 'Tallahassee', 'AK': 'Juneau', 'AZ': 'Phoenix', 'CA': 'Sacramento', } # 若未定义count()函数请删除下一行 # count(sc) print("我们来补充更多州首府信息吧") state = input('请输入州缩写,直接按回车可退出程序:') while state != '': if state in sc: print(f'已收录该州,{state}的首府是{sc[state]}') else: capital = input('请输入该州的首府名称:') sc[state] = capital # 无论分支逻辑如何,统一获取下一次输入 state = input('请输入州缩写,直接按回车可退出程序:') sc_len = len(sc) print(f'当前共收录{sc_len}个州的首府信息,清单如下:') for key, value in sc.items(): print(f'{key}的首府是{value}') if __name__ == '__main__': main()
修复说明
- 将输入更新逻辑从分支内移到循环体末尾,所有分支执行完成后都会等待用户下一次输入,彻底解决死循环问题
- 把两个独立的
if判断改成if-else结构,减少一次重复的字典key存在性校验,逻辑更简洁 - 完全匹配需求:已有缩写直接输出首府,无匹配提示录入首府,空输入退出后打印全量州与首府对应关系
- 已将交互提示替换为中文,如果你需要英文交互,直接替换代码中print、input内的中文文本即可。
内容的提问来源于stack exchange,提问作者HakunaMutata
相关产品推荐
相关产品推荐

