如何使用参数更改函数中的全局变量
问题描述:
我正在制作文本冒险游戏,并且正在尝试改变房间的功能。我的房间由布尔人制成,因此当我换房时,我退出的房间变成虚假的,新房变成真实的。每个房间都包含if语句,因此某些事情将依赖于您所处的房间而运行。房间的布尔值在这样的代码顶部显示。如何使用参数更改函数中的全局变量
spawn = True
living_room = True
etc...
所以我决定做这样的函数
def change_room(room, new_room):
room = False
new_room = True
然后调用该函数以下列方式
if spawn:
if spawn_input == "door":
change_room(spawn, living_room)
elif living_room:
do something
的问题是,该功能不会改变全局变量到我选择的布尔值。我明白,这可以通过改变功能这一
def change_room():
global spawn
global living_room
spawn = False
living_room = True
是固定的,但我不想这样做,因为我想的功能有参数,这样的功能,可用于任何房间的任何房间。如果有人帮助我,这将会很棒。谢谢!
答
勉强解决方案
我个人不和你正在服用,这是不好的,因为要修改的全球空间而不是通过修改抽象数据结构,代表你的游戏世界的路线一致。您应该将此信息存储在某个对象中,例如字典。尽管如此,这里是你所寻求的解决方案...
def change_room(room, new_room):
g = globals()
g[room] = False
g[new_room] = True
...
if spawn:
if spawn_input == "door":
change_room('spawn', 'living_room')
elif living_room:
# do something
合适的解决方案
封装你的游戏世界中Game
对象和执行工作中所述的游戏对象。
SPAWN_ROOM = 'spawn'
LIVING_ROOM = 'living_room'
class Game:
def __init__(self):
self.current_room = SPAWN_ROOM
def change_room(self, new_room):
self.current_room = new_room
print('You entered {}'.format(new_room))
game = Game()
...
if game.current_room == SPAWN_ROOM:
if user_input == 'door':
game.change_room(LIVING_ROOM)
elif game.current_room == LIVING_ROOM:
# do something
你可以发布你的整个代码,以便我们知道你错在哪里。 – Keval