Сломанный цикл в Python - PullRequest
       2

Сломанный цикл в Python

0 голосов
/ 10 декабря 2018

Я работаю над изучением Python (версия 3), и, как вы, наверное, знаете, одним из упражнений является создание игры спока ящерицы из каменной бумаги (rpsls), которую я должен был начать с утверждений if, представленных ниже, затем измените код, включив в него циклы, и используйте случайную функцию, чтобы добавить компьютерный проигрыватель.Я потратил несколько дней на корректировку кода и поиск в Google, но я не смог исправить разрыв в цикле.Он застревает, спрашивая игрока первый о вводе бесконечно, и никогда не загружает сравнение с игроком 2 или заканчивает раунд.Я понимаю, что это грязный способ кодирования игры, но я хотел бы сохранить форматирование, если это возможно.

        import random

print("")
print("**** Welcome to Rock Paper Scissors ****")
print("")



inputOK = False
player2choices = ['rock', 'paper', 'scissors', 'lizard', 'spock']
while inputOK == False:
    stringPlayer1 = input("Player 1, choose: rock, paper, scissors, lizard, or spock: ")

    stringPlayer2 = random.choice(player2choices)
if stringPlayer1 == stringPlayer2:
    print("Tie: Both players chose:" +
          stringPlayer1)

elif stringPlayer1 == 'scissors' and stringPlayer2 == 'paper':
    print("Player 1 wins: scissors cuts paper.")

elif stringPlayer1 == 'paper' and stringPlayer2 == 'rock':
    print("Player 1 wins: paper covers rock.")

elif stringPlayer1 == 'rock' and stringPlayer2 == 'lizard':
    print("Player 1 wins: rock crushes lizard.")

elif stringPlayer1 == 'lizard' and stringPlayer2 == 'spock':
    print("Player 1 wins: lizard poisons spock.")

elif stringPlayer1 == 'spock' and stringPlayer2 == 'scissors':
    print("Player 1 wins: Spock smashes scissors.")

elif stringPlayer1 == 'scissors' and stringPlayer2 == 'lizard':
    print("Player 1 wins: scissors decapitates lizard.")

elif stringPlayer1 == 'lizard' and stringPlayer2 == 'paper':
    print("Player 1 wins: lizard eats paper.")

elif stringPlayer1 == 'paper' and stringPlayer2 == 'spock':
    print("Player 1 wins: paper disproves Spock.")

elif stringPlayer1 == 'spock' and stringPlayer2 == 'rock':
    print("Player 1 wins: Spock vaporizes rock.")

elif stringPlayer1 == 'rock' and stringPlayer2 == 'scissors':
    print("Player 1 wins: rock crushes scissors.")

elif stringPlayer1 == 'paper' and stringPlayer2 == 'scissors':
    print("Player 2 wins: scissors cuts paper.")

elif stringPlayer1 == 'rock' and stringPlayer2 == 'paper':
    print("Player 2 wins: paper covers rock.")

elif stringPlayer1 == 'lizard' and stringPlayer2 == 'rock':
    print("Player 2 wins: rock crushes lizard.")

elif stringPlayer1 == 'spock' and stringPlayer2 == 'lizard':
    print("Player 2 wins: lizard poisons spock.")

elif stringPlayer1 == 'scissors' and stringPlayer2 == 'spock':
    print("Player 2 wins: Spock smashes scissors.")

elif stringPlayer1 == 'lizard' and stringPlayer2 == 'scissors':
    print("Player 2 wins: scissors decapitates lizard.")

elif stringPlayer1 == 'paper' and stringPlayer2 == 'lizard':
    print("Player 2 wins: lizard eats paper.")

elif stringPlayer1 == 'spock' and stringPlayer2 == 'paper':
    print("Player 2 wins: paper disproves Spock.")

elif stringPlayer1 == 'rock' and stringPlayer2 == 'spock':
    print("Player 2 wins: Spock vaporizes rock.")

elif stringPlayer1 == 'scissors' and stringPlayer2 == 'rock':
    print("Player 2 wins: rock crushes scissors.")

else:
    inputOK = False
    print("Error: Not a valid choice.")

quit = input("Do you want to quit? ")
if quit.lower() == "y" or quit.lower() == "yes":
    done = True

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Пользователь будет застрять в бесконечном цикле, если где-то в пределах в то время как цикл изменяет условие, устанавливая inputOK = True.

Перед этим вам необходимо определить, каковы условия для допустимого ввода, например, пользовательский ввод является одним из допустимых вариантов (if stringPlayer1 in player1choices):

player2choices = ['rock', 'paper', 'scissors', 'lizard', 'spock']
player1choices = player2choices

while inputOK == False:
    stringPlayer1 = input("Player 1, choose: rock, paper, scissors, lizard, or spock: ")
    if stringPlayer1 in player1choices: # a condition for valid input?
        inputOK = True
    stringPlayer2 = random.choice(player2choices)

Это должно быть как минимумисправьте сломанную петлю и позвольте вам двигаться дальше, развивая игру.

0 голосов
/ 10 декабря 2018

Цикл while будет продолжаться, пока ваша переменная inputOk не станет равной True.Ваша ошибка в том, что inputOK не обновляется до True, когда игрок хочет закончить игру.Возможно, вы хотели установить inputOk равным True вместо готового?

quit = input("Do you want to quit? ") if quit.lower() == "y" or quit.lower() == "yes": inputOk = True

Редактировать: Также, как уже упоминалось, вы должны сделать отступ в python.Любой код, не имеющий отступа для оператора while, не будет зацикливаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...