Python文本游戏大小写忽略功能异常求助(附完整代码)
问题修复与大小写忽略实现
核心问题分析
- rooms变量作用域错误:原代码中
Main()函数定义了rooms但未将其暴露到全局作用域,也没有返回值,导致外部代码访问rooms时会报错,这是移动指令失效的核心原因之一。 - 输入大小写未统一处理:直接匹配原始输入字符串,导致用户输入小写命令时无法被识别。
具体修复步骤
- 修正rooms作用域:移除冗余的
Main()函数,直接在全局定义rooms字典,避免局部变量无法访问的问题。 - 统一输入大小写处理:将用户输入全部转为小写后再判断逻辑,对方向、物品名转为首字母大写,匹配字典中的键,实现忽略大小写的输入识别。
- 补充输入合法性校验:处理空输入、指令不完整的情况,提升游戏容错性。
修改后的完整代码
def menu(): print('*' * 20) print("InSIDious: Sid & the Commodore 64") print('*' * 20) print("收集Commodore 64的6个部件,然后直面Death Adder。") print("否则你会被他击败,永远困在这个领域!") print("玩法说明:移动时输入'go North'/'GO NORTH'等任意大小写组合,或输入'Exit'/'exit'退出游戏。") print("拾取物品时输入'get Item Name'(支持任意大小写),物品会加入你的背包。") print("祝你好运!\n") def user_status(current_room, inventory): print('-' * 20) print(f'你现在在:{current_room}') print(f'背包:{inventory}') print('-' * 20) # 全局定义房间数据,解决作用域问题 rooms = { 'Court Yard': {'North': 'Great Hall', 'East': 'Bed Chambers', 'South': 'Gate House', 'West': 'Kitchen'}, 'Great Hall': {'East': 'Throne Room', 'South': 'Court Yard', 'item': 'Sockets'}, 'Bed Chambers': {'North': 'Bathroom', 'West': 'Court Yard', 'item': 'Semiconductors'}, 'Gate House': {'North': 'Court Yard', 'East': 'Chapel', 'item': 'Capacitors'}, 'Kitchen': {'East': 'Court Yard', 'item': 'Connectors'}, 'Throne Room': {'West': 'Great Hall', 'item': 'Resistors'}, 'Bathroom': {'South': 'Bed Chambers', 'item': 'Filters'}, 'Chapel': {} # 改为空字典,保持数据结构统一 } current_room = 'Court Yard' inventory = [] menu() while True: if current_room == 'Chapel': if len(inventory) == 6: print('-----------------') print('恭喜你!') print('-----------------') print('你收集齐了Commodore 64的6个部件,击败了Death Adder,可以回家了!') print('感谢游玩!') break else: print('糟了!你还没收集齐所有部件就被Death Adder找到了!') print('你永远被困在这个领域了!') print('感谢游玩!') break print() user_status(current_room, inventory) current_room_data = rooms[current_room] # 显示房间内未拾取的物品 if 'item' in current_room_data: item = current_room_data['item'] if item not in inventory: print(f'你看到房间里有{item}') # 处理用户输入,统一转为小写 command_input = input('你想做什么?\n').strip().lower() command = command_input.split() if not command: print('无效输入,请重试。') continue # 移动指令处理 if command[0] == 'go': if len(command) < 2: print('请输入完整的移动指令,比如"go north"。') continue direction = command[1].capitalize() if direction in current_room_data: current_room = current_room_data[direction] else: print('你不能往那个方向走。') # 退出指令处理 elif command[0] == 'exit': print('感谢游玩,欢迎再来!') break # 拾取物品指令处理 elif command[0] == 'get': if len(command) < 2: print('请输入完整的拾取指令,比如"get sockets"。') continue item_input = command[1].capitalize() if 'item' in current_room_data and item_input == current_room_data['item']: if item_input not in inventory: inventory.append(item_input) print(f'你捡起了{item_input}') else: print('你已经有这个物品了。') else: print('这个房间里没有这个物品。') # 无效指令处理 else: print('无效输入,请重试。')
关键修改说明
- 修复作用域问题:移除无用的
Main()函数,全局定义rooms,确保代码能正常访问房间数据。 - 大小写兼容:将用户输入统一转为小写,再将方向、物品名转为首字母大写匹配字典键,实现任意大小写输入都能被识别。
- 体验优化:补充空输入、指令不完整的提示,修正
Chapel的数据结构,避免潜在报错。 - 文本汉化:将所有游戏提示翻译成中文,符合需求。
内容的提问来源于stack exchange,提问作者Corey
相关产品推荐
相关产品推荐

