Python 函数不更新全局变量
我正在为我的compSci类编写一个模拟Bunko游戏的程序,但是在获取函数Python 函数不更新全局变量,python,Python,我正在为我的compSci类编写一个模拟Bunko游戏的程序,但是在获取函数scoreCalc以修改全局变量playerScore时遇到问题。这个游戏让一个玩家和电脑对抗,所以我希望能够使用一个函数来确定分数,然后通过一个in参数来分别增加正确的分数。但是,该功能不会在多个播放中保存playerScore的值,并在每一轮中重置为0。我对函数是新手,所以我相信这个问题可能是无关紧要的,但我感谢所有的帮助 dieList=[] 六计数=0 playerScore=0 def rollDice():
scoreCalc
以修改全局变量playerScore
时遇到问题。这个游戏让一个玩家和电脑对抗,所以我希望能够使用一个函数来确定分数,然后通过一个in参数来分别增加正确的分数。但是,该功能不会在多个播放中保存playerScore
的值,并在每一轮中重置为0。我对函数是新手,所以我相信这个问题可能是无关紧要的,但我感谢所有的帮助
dieList=[]
六计数=0
playerScore=0
def rollDice():
全球六位数
六计数=0
dieList.clear()
die1=random.randint(1,6)
die2=随机随机随机数(1,6)
die3=随机的随机数(1,6)
dieList.append(die1)
dieList.append(die2)
dieList.append(die3)
打印(死亡名单)
对于dieList中的x:
如果x==6:
六计数+=1
打印(“六计数:”,六计数)
回来
def计分卡(x):
如果sixCount==1:
x+=1
elif sixCount==2:
x+=5
elif sixCount==3:
x+=21
返回x
打印()
打印(“轮到玩家了!”)
打印('*'*30)
输入(“按回车键掷骰子”)
打印()
滚动骰子()
打印(“分数:”,分数计算(球员核心))
如果将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
您清楚地知道如何修改全局变量,这是您为sixCount所做的。您可能曾经使用playerScore来实现这一点,但在尝试使该函数用于计算任何人的分数(OP中声明的目标)时对其进行了更改 为了使函数像函数一样工作,它需要。。。函数。这意味着它接受一个输入并给出一个输出,而其他一切都无关紧要。然后,您只需要使用该输出
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如何不关心任何全局变量。它只是给它的输入打分。然后你将分数应用到它所属的地方
这些函数也可能有用。最好不要给他们任何全局变量。在重要的地方处理结果,让这些函数完成它们的工作,而不是别的
# return a list of d6 outputs
def rollDice(number_of_dice):
return [random.randint(1,6) for _ in range(number_of_dice)]
# takes a list of d6 outputs and returns the count of sixes
def countSixes(dieList):
return sum([1 for x in dieList if x==6])
非常感谢。这正是我想要的:)谢谢你的提示!我不知道数字的属性。你让我离目标更近了一点,但我仍然希望使用相同的函数来修改计算机分数