You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python文本冒险游戏get_item物品拾取函数逻辑异常求助

问题根源

你的物品拾取逻辑存在3个明确错误,直接导致方向信息被错误存入物品栏:

  • inventory.update(rooms[location]) 会把当前房间字典的所有键值对(包括东西南北移动方向、反派标识等)全部合并进物品栏字典,而非仅存入物品本身,这是问题的核心诱因
  • get_item 函数内无意义的for playerMove in rooms[location]循环会覆盖传入的参数,且未做存在性判断就直接执行pop('Item'),在无物品的房间调用会直接触发KeyError报错
  • 主循环中拾取逻辑和移动逻辑使用平级if判断,拾取物品后代码仍会继续执行移动校验,平白触发无效指令提示;且用字典结构存储同类型物品条目本身也不符合使用场景,物品栏用列表存储更合理。
修复步骤
  1. 调整物品栏初始结构,将字典改为列表,适配物品存储需求:
# 原代码 inventory = {} 替换为
inventory = []
  1. 重写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("当前区域没有可拾取的物品。")
  1. 调整主循环的分支判断逻辑,将平级的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:15:36