Игра в камень-ножницы-бумага со счетчиком

#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()