
本文详解 codehs 电话簿问题的正确解法:使用 while true 循环持续接收姓名输入,对空输入退出、已存在姓名直接输出号码、新姓名则提示录入并存入字典,最后统一打印完整字典。
本文详解 codehs 电话簿问题的正确解法:使用 while true 循环持续接收姓名输入,对空输入退出、已存在姓名直接输出号码、新姓名则提示录入并存入字典,最后统一打印完整字典。
要正确实现 CodeHS 的“Phone Book”问题,关键在于严格遵循题干的交互逻辑流程:程序必须持续等待用户输入姓名,根据输入内容动态执行三种操作(退出、查询、新增),且所有判断和处理必须包裹在同一个循环内——而非预先录入固定条目或仅单次查询。
以下是符合要求的完整、可运行的 Python 解决方案:
my_dict = {}
while True:
name = input("Enter a name: ")
if name == "":
break
elif name in my_dict:
print(my_dict[name])
else:
phone_num = input("Enter a phone number: ")
my_dict[name] = phone_num
print(my_dict)
✅ 核心要点解析:
- while True: 是必需结构:题目要求“Repeatedly ask the user for a name”,即无限循环,直到用户主动终止。使用 break 响应空输入,比 exit() 更安全、更符合题意(exit() 会强制终止进程,且未执行最终的 print(my_dict))。
- 顺序判断不可颠倒:先检查 name == "",再查 in my_dict,最后处理新增——确保空字符串被第一时间捕获,避免误判为新键。
- 无预设数据:题干未要求初始化任何联系人,因此不应像原代码中用 for i in range(3) 硬编码录入。所有数据均由用户在主循环中按需提供。
- 最终字典只打印一次:位于循环之外,确保无论用户添加多少条记录,都只在退出后输出最终状态,符合 “Print out the final dictionary” 要求。
⚠️ 常见错误规避:
- ❌ 不要在循环外提前 input() 或重复调用 input("Enter a name: ") 多次;
- ❌ 避免使用 exit() 或 sys.exit() ——它会跳过最后一行 print(my_dict),导致测试失败;
- ❌ 不要将新增逻辑(如二次 input("Enter a phone number: "))放在 if name in my_dict 分支中,否则新用户无法录入。
这个解法简洁、健壮,完全匹配 CodeHS 自动评测系统的预期行为:精准响应每一次输入、正确分支处理、完整终态输出。作为初学者,掌握这种“循环 + 条件嵌套 + 字典增查”模式,是迈向实用 Python 编程的重要一步。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











