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

如何在函数中动态保存信息?自制冒险游戏锁状态修改求助

两把锁冒险游戏变量无法动态修改问题排查

核心问题及修复点

  • 变量作用域错误:在左侧储藏室、右侧厨房的分支里,修改SilverLockPosition和GoldLockPosition时,Python默认会创建局部变量而非修改全局变量。需在分支内用global声明这两个变量,才能让修改同步到全局。
  • 条件判断笔误:右侧厨房分支里,有个判断写成了elif SilverLockPosition == 'r',应为GoldLockPosition == 'r',否则金锁无法切换到右侧位置。
  • 输入提示硬编码:银锁的输入提示固定显示Left,应改为用SilverLockPosition变量动态展示当前位置;金锁同理,提示里的Center要换成GoldLockPosition,避免显示与实际锁位不符。
  • 输入变量直接覆盖全局变量:原代码直接把用户输入赋值给全局锁变量,若输入'd'会导致锁变量变成字符串'd',后续判断逻辑失效。需用临时变量接收输入,再根据输入给全局锁变量赋值。
  • 通关后未终止循环:调用win()后游戏循环仍会继续,需在win()内设置game = False结束游戏。
  • 房间标识笔误:右侧厨房分支里CurrentRoom被错误赋值为'l',应改为'r'。

修正后的完整代码

Left = 'Left'
Right = 'Right'
Center = 'Center'

SilverLockPosition = Left
GoldLockPosition = Right

game = True

def win():
    print('你赢了!')
    global game
    game = False  # 通关后终止游戏循环

while game == True:
    print("\n你进来的门在身后消失了。眼前有一扇正门,左右两侧各有一个入口。你要去哪里?")
    HallwayChoice = input("\n(o) 打开正门\n(l) 进入左侧储藏室\n(r) 进入右侧厨房\n选择:")
    if HallwayChoice == 'o':
        CurrentRoom = 'o'
        if SilverLockPosition == Left and GoldLockPosition == Right:
            print("你拧动门把手,门开了!")
            win()
        else:
            print("你用尽全力拉门,但它纹丝不动!是不是有没检查过的房间?")
    elif HallwayChoice == 'l':
        CurrentRoom = 'l'
        global SilverLockPosition  # 声明要修改全局变量
        print(f"\n你在一个堆满食物的储藏室里。面前有个三档位的银锁,当前位置是{SilverLockPosition}。身后是入口的门。你要做什么?")
        choice = input(f"银锁当前位置是{SilverLockPosition}。\n(l) 转到左侧\n(r) 转到右侧\n(c) 转到中间\n(d) 不修改,返回入口\n选择:")
        if choice == 'l':
            SilverLockPosition = Left
            print('你把银锁调到了左侧。')
        elif choice == 'r':
            SilverLockPosition = Right
            print('你把银锁调到了右侧。')
        elif choice == 'c':
            SilverLockPosition = Center
            print('你把银锁调到了中间。')
        elif choice == 'd':
            print('你离开了房间。')
    elif HallwayChoice == 'r':
        CurrentRoom = 'r'  # 修正房间标识笔误
        global GoldLockPosition  # 声明要修改全局变量
        print(f"\n你在一个摆满现代厨具的厨房里。面前有个三档位的金锁,当前位置是{GoldLockPosition}。身后是入口的门。你要做什么?")
        choice = input(f"金锁当前位置是{GoldLockPosition}。\n(l) 转到左侧\n(r) 转到右侧\n(c) 转到中间\n(d) 不修改,返回入口\n选择:")
        if choice == 'l':
            GoldLockPosition = Left
            print('你把金锁调到了左侧。')
        elif choice == 'r':  # 修正条件判断笔误
            GoldLockPosition = Right
            print('你把金锁调到了右侧。')
        elif choice == 'c':
            GoldLockPosition = Center
            print('你把金锁调到了中间。')
        elif choice == 'd':
            print('你离开了房间。')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:15:37