Python文本冒险游戏物品使用代码触发失败问题咨询
解决你的Python文本冒险游戏库存物品判断问题
看起来你遇到的核心问题是输入的物品没有被正确识别为库存中存在的物品,导致代码总是走到else分支。结合你给出的信息,我来帮你定位问题并修复:
可能的错误原因
你的代码片段里if item.upper()...没有写完,但根据现象推测,大概率是以下两种情况之一:
- 判断逻辑错误:你可能直接用
==判断某个固定物品(比如if item.upper() == "SWORD"),而没有检查输入是否在整个inventory列表中;或者判断的物品名称和inventory里的格式不一致(比如漏写了空格)。 - 输入未处理空格:用户输入时可能不小心加了前后空格(比如
" STONE MARBLE "),即使转成大写,也和inventory里的"STONE MARBLE"不匹配。
修复后的完整代码示例
这里给你写一个能正确触发预期分支的版本:
inventory = ["GOLD", "SWORD", "STONE MARBLE"] def statue_item_room(): print("Which item do you wish to use?") # 处理输入:转大写+去除前后空格,避免空格和大小写问题 item = input("> ").upper().strip() # 检查输入的物品是否在库存中 if item in inventory: print(f"You used the {item.lower()}! Expected logic triggered.") # 这里写你需要执行的预期逻辑,比如物品效果、剧情推进等 else: print(f"You don't have a {item.lower()} in your inventory!") # 这里写物品不存在时的提示逻辑 # 测试函数 statue_item_room()
关键修复点说明
- 输入预处理:用
.upper().strip()处理输入,既统一转为大写(和inventory里的格式一致),又去除了用户可能误输入的前后空格,避免匹配失败。 - 正确的存在性判断:用
item in inventory直接检查输入是否在库存列表中,这样不管用户输入的是库存里的哪一个物品,都能触发if分支。
如果你的预期逻辑是针对不同物品有不同的处理(比如用STONE MARBLE触发雕像机关,用SWORD砍东西),可以在if分支里再嵌套判断:
if item in inventory: if item == "STONE MARBLE": print("You place the stone marble into the statue's hand. The wall opens!") # 雕像相关逻辑 elif item == "SWORD": print("You swing the sword at the statue... it doesn't do anything.") # 剑的相关逻辑 elif item == "GOLD": print("You offer the gold to the statue. It ignores you.") # 金币的相关逻辑 else: print("You don't have that item!")
这样就能完美处理不同物品的分支逻辑啦。
内容的提问来源于stack exchange,提问作者TerrorMing
相关产品推荐
相关产品推荐

