函数不更新全局变量

npb*_*224 0 python

我正在为compSci类编写一个模拟Bunko游戏的程序,但是我在scoreCalc修改全局变量时遇到了问题playerScore.游戏使玩家对抗计算机,所以我希望能够使用一个函数来确定分数,并且只是通过一个参数来分别增加正确的分数.但是,该功能不会保存playerScore多个播放的值,每轮重置为0.我是新手,所以我确定这个问题很可能是微不足道的,但我感谢所有人的帮助!

dieList = []
sixCount = 0
playerScore = 0


def rollDice():    
    global sixCount
    sixCount = 0
    dieList.clear()

    die1 = random.randint(1,6)
    die2 = random.randint(1,6)
    die3 = random.randint(1,6)

    dieList.append(die1)
    dieList.append(die2)
    dieList.append(die3)

    print(dieList)

    for x in dieList:
        if x == 6:
            sixCount += 1
    print("sixCount:", sixCount)
    return


def scoreCalc(x):
    if sixCount == 1:
        x += 1
    elif sixCount == 2:
        x += 5
    elif sixCount == 3:
        x += 21
    return x


print()
print("Player's turn!")
print('*' * 30)
input("Press ENTER to roll the dice")
print()
rollDice()
print("Score:", scoreCalc(playerScore))
Run Code Online (Sandbox Code Playgroud)

For*_*Bru 5

如果playerScore作为参数传递,然后在函数内对其执行操作,则不会更改全局变量playerScore.

为什么?Python中的数字是不可变的.

等等,什么?是的,当您对数字执行任何操作并使用结果填充某个变量(例如i += 2)时,将创建一个新的数字对象.因此,当你传递playerScore给一个函数时,一个全新的对象就会被传递,所以,scoreCalc得到的不是实际的playerScore,而是它的副本.不用说改变副本不会改变原件.

以下将做到这一点:

def scoreCalc():
    global playerScore

    if sixCount == 1:
        playerScore += 1
    elif sixCount == 2:
        playerScore += 5
    elif sixCount == 3:
        playerScore += 21

    return playerScore
Run Code Online (Sandbox Code Playgroud)