Python-更新For循环中的变量
所以我决定用Python编写垄断,但是我在更新玩家位置时遇到了一些问题。我编写了一个for循环,循环遍历玩家,为每个玩家掷骰子,然后更新他们的位置。问题在于location变量没有保留最新的位置,而是在for循环开始时一直重置回0。这是我的密码:Python-更新For循环中的变量,python,Python,所以我决定用Python编写垄断,但是我在更新玩家位置时遇到了一些问题。我编写了一个for循环,循环遍历玩家,为每个玩家掷骰子,然后更新他们的位置。问题在于location变量没有保留最新的位置,而是在for循环开始时一直重置回0。这是我的密码: player1location = 0 def turn(numberPlayers, player, player1location, Board): for player in range(numberPlayers):
player1location = 0
def turn(numberPlayers, player, player1location, Board):
for player in range(numberPlayers):
player = 'Player'+str(player+1)
print 'It\'s', player, 'turn!'
print player1location
rollDice = raw_input('Press Enter to roll the dice!')
diceRoll = random.randint(1,6)
print player, 'rolled a', diceRoll
player1location = player1location + diceRoll
print 'You landed on', player1location
print '\n'
while True:
turn(numberPlayers, player, player1location, Board)
如果有必要,我可以提供更多的代码,但我认为这是控制玩家位置的一切。谢谢
编辑:很明显,我改变了局部变量而不是全局变量。如何更改全局变量?您的函数参数与要更新的目标变量同名。 因此,您所做的任何更改都是对函数参数进行的,而不是对全局变量进行的。这是因为
函数
为传递给该函数的参数创建了一个局部范围。因此,它在全局上覆盖了使用相同名称定义的变量
因此,请更改函数参数的名称或全局变量的名称。请注意,有两个变量名为
player1location
——其中一个在第一行全局定义(在任何函数之外):player1location=0
,第二个是每次调用函数时在本地创建的:def turn(numberPlayers、player、player1位置、Board)
。尽管它们有相同的名称,但在python中它们是两个不同的变量,因为它们是在中定义的
有几种方法可以解决这个问题
您可以从函数定义中删除player1location
,然后始终更改全局范围的变量。然而,根据您的命名约定,我猜您也希望为其他玩家重用该函数(尽管尝试它仍然没有什么坏处,以帮助您了解它是如何工作的)
更好的方法可能是在函数末尾返回新的玩家位置(
returnplayer1location
),然后在返回时将其分配到全局范围的位置(player1location=turn(numberPlayers,player,player1location,Board)
).您在循环中的调用使用的是全局player1location
,而在函数中,您正在更改退出作用域时丢弃的局部变量。在使用全局变量时,您不应该使用global
关键字吗?(还有,为什么你只跟踪一个玩家的位置,并为游戏中的每个玩家移动它呢?)尽管您可以使用turn()
中的global player1location
语句更改函数中的全局变量(并删除该段),让函数返回更新的值并让调用方更新它会更好。我不太明白你的意思。我尝试更改变量的名称,但仍然不起作用。它说变量是局部变量和全局变量。@emagdnim。你从哪里得到的错误?啊!你需要使用global lplayer1location
使用全局变量。@emagdnim.好吧,最好不要使用全局变量。只需返回对局部变量所做的更改,并将while循环的返回值存储在外部定义的变量中。使用全局变量几乎从来都不好。这通常是设计不好的标志。@emagdnim global va变量通常是要避免的,因为它们太容易了——你可以在任何地方修改它们。正因为如此,在更大的程序中,跟踪任何可能与它们相关的错误变得很困难。例如,如果你以其他函数都不期望的方式更改全局变量,这可能会导致许多不可预见的错误,而这些错误将不会发生在运行这些特定函数之前,您不会打开。什么意思是“您可以从函数定义中删除player1位置?”如下:def turn(numberPlayers,player,Board)
。然后,您像这样调用您的函数:turn(numberPlayers,player,Board)
.Python应该能够从全局范围中选择player1位置。