本文详解如何从字典中读取用户输入的房间号,输出对应客人姓名,并**一次性删除该键值对**,避免重复输入导致逻辑错误。重点解决因两次调用 `input()` 引起的键缺失与删除失败问题。
在 Zybooks 的 Python 挑战活动 3.5.1 中,目标是操作一个表示酒店房客关系的字典 room_guest_pairs:根据用户输入的房间号(整数键),查出客人姓名、打印后立即从字典中移除该条记录,最后输出剩余键值对。
你最初的代码存在一个关键缺陷:
name = room_guest_pairs[int(input())] # 第一次 input() —— 成功读取并查值 print(name) room_guest_pairs.pop(int(input())) # 第二次 input() —— 再次等待输入!用户需重复输入同一房间号
这不仅造成交互不友好,更严重的是:若用户第二次输错(如多打空格、输错数字),pop() 会抛出 KeyError;即使输入正确,也违背了“读一次、用多次”的基本编程原则。
✅ 正确做法是:只调用一次 input(),将其转换为整数后保存到变量中,后续统一使用该变量进行查询和删除。推荐使用 del 语句(语义清晰)或 pop()(可选返回值),但务必复用同一键:
room_guest_pairs = {339: 'Sue', 238: 'Eli'}
# ✅ 步骤1:读取一次房间号,并转为整数
room_number = int(input())
# ✅ 步骤2:根据房间号获取并打印客人姓名
print(room_guest_pairs[room_number])
# ✅ 步骤3:使用同一 room_number 删除该键值对
del room_guest_pairs[room_number]
# ✅ 步骤4:输出剩余字典内容
print('Remaining
pairs:')
print(room_guest_pairs)⚠️ 注意事项:
- 输入必须为有效整数,否则 int(input()) 会触发 ValueError。本题默认输入合法,但在实际项目中建议添加 try-except 处理异常;
- 不要对不存在的键执行 del 或 pop(),否则报错。如需健壮性,可先用 if room_number in room_guest_pairs: 判断;
- pop(key) 和 del dict[key] 功能等价(均删除指定键),但 pop() 可返回被删值(如 guest = room_guest_pairs.pop(room_number)),而 del 更简洁明确。
运行示例:
输入:238
输出:
Eli
Remaining pairs:
{339: 'Sue'}至此,字典精准完成“查—显—删”三步操作,逻辑清晰、高效可靠。

pairs:')
print(room_guest_pairs)






