#python #counter #wing-ide
#питон #счетчик #крыло-язь #python #wing-ide
Вопрос:
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()
Поэтому, когда я пробую этот код, по большей части все работает. Единственное, с чем у меня, похоже, не получается работать, — это собственно подсчетная часть. Когда я пытаюсь распечатать свои результаты после игры несколько (или даже один) раз, код по-прежнему заканчивается нулем в качестве общего количества игр. Может кто-нибудь, пожалуйста, показать мне, где я напортачил, и, надеюсь, помочь мне это исправить?
Комментарии:
1. Вы перепутали имена переменных и функций
2. Почему вы возвращаете winner в «winner», а также в gameWinner? Почему имя вашей функции совпадает с именем переменной «winner»? Я думаю, что первое, что нужно сделать, это назвать ваши функции именем, которое точно показывает, что оно делает.
Ответ №1:
У вас есть несколько ошибок в вашем коде. Первый — это
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()