我正在为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)
如果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)
| 归档时间: |
|
| 查看次数: |
601 次 |
| 最近记录: |