import random
def main():
playagain = 1
win=0
lose=0
tie=0
while playagain==1:
printCpu=cpuConverter()
printPlayer=playerConverter()
print("The computers choice is", printCpu)
print("Your choice is", printPlayer)
gameWinner(printCpu, printPlayer)
winner(gameWinner, printCpu, printPlayer)
playagain=int(input("Would you like to play again? Enter 1 for yes, any other number for no!"))
print("Your total wins are", win)
print("Your total losses are", lose)
print("Your total ties are", tie)
def cpuConverter():
cpuChoice=random.randrange(1,4)
if cpuChoice==1:
printCpu="Rock"
elif cpuChoice==2:
printCpu="Paper"
else:
printCpu="Scissors"
return printCpu
def playerConverter():
again=0
while again<1 or again>3:
printPlayer=int(input("Please choose a number to play against the computer. 1=Rock 2=Paper 3=Scissors "))
if printPlayer<1 or printPlayer>3:
print("Invalid choice for the game. Please choose another number inside the constraints.")
elif printPlayer==1:
printPlayer="Rock"
again=1
elif printPlayer==2:
printPlayer="Paper"
again=1
else:
printPlayer="Scissors"
again=1
return printPlayer
def gameWinner(printCpu, printPlayer):
if printCpu == printPlayer:
winner = "tie"
print("It's a tie")
elif printCpu == "Scissors" and printPlayer == "Rock":
winner = "win"
print("Rock beats Scissors! You win")
elif printCpu == "Paper" and printPlayer == "Scissors":
winner = "win"
print("Scissors cuts paper! You win")
elif printCpu == "Rock" and printPlayer == "Paper":
winner = "win"
print("Paper covers Rock! You win")
else:
winner = "lose"
print("You lose")
return winner
def winner(gameWinner, printCpu, printPlayer):
if winner == "win":
win += 1
elif winner == "lose":
lose += 1
elif winner == "tie":
tie += 1
return winner
main()
因此,当我尝试使用此代码时,一切都可以正常工作。我唯一似乎无法工作的是实际的计数部分。当我尝试在播放多次(甚至一次)后打印我的结果时,代码仍然以游戏总量为零。有人可以告诉我在哪里搞砸了,希望能帮助我解决这个问题吗?
答案 0 :(得分:0)
您的代码中有多处错误。第一个是
winner(gameWinner, printCpu, printPlayer)
将function
传递给函数winner
。您应该捕获gameWinner
的返回值并将其传递给winner
result = gameWinner(printCpu, printPlayer)
winner(result, printCpu, printPlayer)
下一期
def winner(gameWinner, printCpu, printPlayer):
if winner == "win":
您忽略输入参数并将function
本身与字符串“win”进行比较。它始终是False
。这样做的结果是,您的win
,lose
,tie
变量永远不会被触及。
最后一个问题是win
,lose
和tie
是全球性的。所有有经验的程序员都对使用全局变量感到不满,但如果必须使用它们,首先应该在全局范围内声明变量,而不是在函数main中。然后,您应该在引用它们的任何函数中使用global
关键字。所以在winner
里面我们需要
global win, lose, tie
最低限度修正的代码看起来像
import random
win=0
lose=0
tie=0
def main():
playagain = 1
while playagain==1:
printCpu=cpuConverter()
printPlayer=playerConverter()
print("The computers choice is", printCpu)
print("Your choice is", printPlayer)
result = gameWinner(printCpu, printPlayer)
winner(result, printCpu, printPlayer)
playagain=int(input("Would you like to play again? Enter 1 for yes, any other number for no!"))
print("Your total wins are", win)
print("Your total losses are", lose)
print("Your total ties are", tie)
def cpuConverter():
cpuChoice=random.randrange(1,4)
if cpuChoice==1:
printCpu="Rock"
elif cpuChoice==2:
printCpu="Paper"
else:
printCpu="Scissors"
return printCpu
def playerConverter():
again=0
while again<1 or again>3:
printPlayer=int(input("Please choose a number to play against the computer. 1=Rock 2=Paper 3=Scissors "))
if printPlayer<1 or printPlayer>3:
print("Invalid choice for the game. Please choose another number inside the constraints.")
elif printPlayer==1:
printPlayer="Rock"
again=1
elif printPlayer==2:
printPlayer="Paper"
again=1
else:
printPlayer="Scissors"
again=1
return printPlayer
def gameWinner(printCpu, printPlayer):
if printCpu == printPlayer:
winner = "tie"
print("It's a tie")
elif printCpu == "Scissors" and printPlayer == "Rock":
winner = "win"
print("Rock beats Scissors! You win")
elif printCpu == "Paper" and printPlayer == "Scissors":
winner = "win"
print("Scissors cuts paper! You win")
elif printCpu == "Rock" and printPlayer == "Paper":
winner = "win"
print("Paper covers Rock! You win")
else:
winner = "lose"
print("You lose")
return winner
def winner(gameWinner, printCpu, printPlayer):
global win, lose, tie
if gameWinner == "win":
win += 1
elif gameWinner == "lose":
lose += 1
elif gameWinner == "tie":
tie += 1
return winner
main()