Как получить разные результаты из random.choice во вложенном цикле while - PullRequest
0 голосов
/ 03 июня 2019

Это мини-игра с ножницами из бумаги, однако random.choice выбирает только одну из списка, хотя она повторяет выбор во вложенном цикле.

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

              rpsloop = True
              while rpsloop:
                  #credit to https://thehelloworldprogram.com/python/python-game-rock-paper-scissors/ for help
                  aiselc = ["rock","paper","scissors"]
                  computer = random.choice(aiselc)
                  print("type exit to leave")
                  player = input("rock, paper, scissors?")
                  if player == computer:
                    print("Tie!")
                    print("-------------------------")
                    continue
                  elif player == "rock":
                    if computer == "paper":
                     print("You lose!", computer, "covers", player)
                     print("-------------------------")

                     continue
                    else:
                     print("You win!", player, "smashes", computer)
                     print("-------------------------")
                     continue
                  elif player == "Paper":
                    if computer == "Scissors":
                     print("You lose!", computer, "cut", player)
                     print("-------------------------")
                     continue
                    else:
                     print("You win!", player, "covers", computer)
                     continue
                  elif player == "Scissors":
                    if computer == "Rock":
                     print("You lose...", computer, "smashes", player)
                     print("-------------------------")
                     continue
                    else:
                     print("You win!", player, "cut", computer)
                     print("-------------------------")
                     continue
                  else:
                       break
          else:
              break

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

1 Ответ

0 голосов
/ 03 июня 2019

Помните, что использование == в Python при сравнении строк делает точное сравнение. Это означает, что регистр букв учитывается при сравнении строк. Например, Scissors и scissors будут считаться не равными друг другу.

Я очень подозреваю, что вы вводите все варианты в нижнем регистре. Это означает, что если вы введете scissors или paper, ваши операторы if для проверки того, что введенный игроком Scissors не будет выполнен. В конечном итоге ваш цикл завершится, поскольку то, что вы вставили, не обрабатывается другими операторами if из-за чувствительности к регистру при сравнении строк. Вот почему rock только выполняется, а ни один из других операторов if не делает.

В частности, обратите внимание, что в ваших операторах if, rock в нижнем регистре, но Scissors и Paper имеют свои первые буквы с заглавной буквы.

Поэтому, учитывая эту реализацию, измените ваши if операторы так, чтобы строки на самом деле были строчными.

elif player == "paper":
     if computer == "scissors":
...
...

elif player == "scissors":
    if computer == "rock":
...
...
...