本文详解如何从字典中读取用户输入的房间号,输出对应客人姓名,并**一次性删除该键值对**,避免重复输入导致逻辑错误。重点解决因两次调用 `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)⚠️ 注意事项:
运行
示例:
输入:238
输出:
Eli
Remaining pairs:
{339: 'Sue'}至此,字典精准完成“查—显—删”三步操作,逻辑清晰、高效可靠。