我正在为我的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))
如果您将
playerScore
作为参数传递,然后在函数内对其执行操作,全局变量playerScore
将不会被更改。在为什么?Python中的数字是immutable。
等等,什么??是的,当你对一个数字做任何操作并用结果填充某个变量时(例如},而是它的副本。不用说,更改副本不会更改原始版本。在
i += 2
),就会创建一个新的number对象。所以,当你把playerScore
传递给一个函数时,一个全新的对象被传递到了,所以,scoreCalc
得到的不是实际的{下面的方法可以做到:
你清楚地知道如何修改一个全局变量,你对sixCount做了这样的修改。你可能曾经用playerScore来做这个,但是当你试图让这个函数对计算任何人的分数有用时,你改变了它。在
为了使函数像函数一样工作,它需要。。。一个函数。这意味着它接受一个输入并给出一个输出,其他的都不重要。然后你只需要使用这个输出。在
注意scoreCalc是如何不关心任何全局变量的。它只是给出输入的分数。然后你把分数应用到它应该得到的地方。在
这些函数也可能有用。最好不要给他们任何全局变量。在重要的地方处理结果,让这些函数完成它们的工作,而不做其他事情。在
^{pr2}$相关问题 更多 >
编程相关推荐