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

Python文本游戏大小写忽略功能异常求助(附完整代码)

问题修复与大小写忽略实现

核心问题分析

  1. rooms变量作用域错误:原代码中Main()函数定义了rooms但未将其暴露到全局作用域,也没有返回值,导致外部代码访问rooms时会报错,这是移动指令失效的核心原因之一。
  2. 输入大小写未统一处理:直接匹配原始输入字符串,导致用户输入小写命令时无法被识别。

具体修复步骤

  • 修正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('无效输入,请重试。')

关键修改说明

  1. 修复作用域问题:移除无用的Main()函数,全局定义rooms,确保代码能正常访问房间数据。
  2. 大小写兼容:将用户输入统一转为小写,再将方向、物品名转为首字母大写匹配字典键,实现任意大小写输入都能被识别。
  3. 体验优化:补充空输入、指令不完整的提示,修正Chapel的数据结构,避免潜在报错。
  4. 文本汉化:将所有游戏提示翻译成中文,符合需求。

内容的提问来源于stack exchange,提问作者Corey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:54:16