Python-更新For循环中的变量

Python-更新For循环中的变量,python,Python,所以我决定用Python编写垄断,但是我在更新玩家位置时遇到了一些问题。我编写了一个for循环,循环遍历玩家,为每个玩家掷骰子,然后更新他们的位置。问题在于location变量没有保留最新的位置,而是在for循环开始时一直重置回0。这是我的密码: player1location = 0 def turn(numberPlayers, player, player1location, Board): for player in range(numberPlayers):

所以我决定用Python编写垄断,但是我在更新玩家位置时遇到了一些问题。我编写了一个for循环,循环遍历玩家,为每个玩家掷骰子,然后更新他们的位置。问题在于location变量没有保留最新的位置,而是在for循环开始时一直重置回0。这是我的密码:

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位置。