如何在函数中动态保存信息?自制冒险游戏锁状态修改求助
两把锁冒险游戏变量无法动态修改问题排查
核心问题及修复点
- 变量作用域错误:在左侧储藏室、右侧厨房的分支里,修改
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
相关产品推荐
相关产品推荐

