Python文本冒险游戏get_item物品拾取函数逻辑异常求助
问题根源
你的物品拾取逻辑存在3个明确错误,直接导致方向信息被错误存入物品栏:
inventory.update(rooms[location])会把当前房间字典的所有键值对(包括东西南北移动方向、反派标识等)全部合并进物品栏字典,而非仅存入物品本身,这是问题的核心诱因get_item函数内无意义的for playerMove in rooms[location]循环会覆盖传入的参数,且未做存在性判断就直接执行pop('Item'),在无物品的房间调用会直接触发KeyError报错- 主循环中拾取逻辑和移动逻辑使用平级
if判断,拾取物品后代码仍会继续执行移动校验,平白触发无效指令提示;且用字典结构存储同类型物品条目本身也不符合使用场景,物品栏用列表存储更合理。
修复步骤
- 调整物品栏初始结构,将字典改为列表,适配物品存储需求:
# 原代码 inventory = {} 替换为 inventory = []
- 重写
get_item函数,移除无意义的循环和错误的字典更新逻辑,增加存在性校验、拾取提示和防重复拾取处理:
def get_item(): current_room = rooms[location] if 'Item' in current_room: picked_item = current_room.pop('Item') inventory.append(picked_item) print(f"已拾取物品:{picked_item}") else: print("当前区域没有可拾取的物品。")
- 调整主循环的分支判断逻辑,将平级的
if改为elif避免拾取后误触发移动校验,同时移除get_item不必要的传参:
# 原代码中对应分支部分替换为以下内容 # Call function to retrieve item if playerMove == 'Item': get_item() # Call function to move between rooms elif playerMove in rooms[location]: location = rooms[location][playerMove] elif playerMove != 'Exit': print('无效移动指令。')
修复后表现
- 拾取物品时仅会将对应物品名称加入物品栏,不会再混入方向、房间属性等无关内容
- 物品拾取后会从当前房间移除,不会出现重复拾取的问题
- 无物品的房间执行拾取操作不会触发报错
- 拾取操作不会再误触发无效移动提示
内容的提问来源于stack exchange,提问作者eFixia
相关产品推荐
相关产品推荐

