函数未更新全局变量

2024-09-30 08:32:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的compSci类编写一个模拟Bunko游戏的程序,但是我在获取函数scoreCalc来修改全局变量{}时遇到问题。这个游戏让玩家与计算机对抗,所以我希望能够使用一个函数来确定分数,并通过一个参数来分别增加正确的分数。但是,函数不会在多次播放时保存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))

Tags: 函数游戏defrandom分数printrandintappend
2条回答

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

为什么?Python中的数字是immutable

等等,什么??是的,当你对一个数字做任何操作并用结果填充某个变量时(例如i += 2),就会创建一个新的number对象。所以,当你把playerScore传递给一个函数时,一个全新的对象被传递到了,所以,scoreCalc得到的不是实际的{},而是它的副本。不用说,更改副本不会更改原始版本。在

下面的方法可以做到:

def scoreCalc():
    global playerScore

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

    return playerScore

你清楚地知道如何修改一个全局变量,你对sixCount做了这样的修改。你可能曾经用playerScore来做这个,但是当你试图让这个函数对计算任何人的分数有用时,你改变了它。在

为了使函数像函数一样工作,它需要。。。一个函数。这意味着它接受一个输入并给出一个输出,其他的都不重要。然后你只需要使用这个输出。在

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

# now use it
playerScore += scoreCalc(sixCount)

注意scoreCalc是如何不关心任何全局变量的。它只是给出输入的分数。然后你把分数应用到它应该得到的地方。在

这些函数也可能有用。最好不要给他们任何全局变量。在重要的地方处理结果,让这些函数完成它们的工作,而不做其他事情。在

^{pr2}$

相关问题 更多 >

    热门问题