Почему мой цикл while не вводит оператор if внутри него?

#python #if-statement #while-loop

#python #if-statement #цикл while

Вопрос:

Камень, ножницы, бумага, пункт 2…

Я пытаюсь создать игру «Камень, ножницы, бумага», и пока у меня есть это:

 from random import randint
print("Rock...")
print("Paper...")
print("Scissors...")

player_wins = 0
computer_wins = 0

while player_wins < 3 and computer_wins < 3:
    print(f"{computer_wins} to {player_wins}")

    player1 = input("Player 1, make your move: ").lower()
    computer_choices = ["rock", "paper", "scissors"]
    computer_choice = randint(0, 2)
    computer = [computer_choices[computer_choice]]
    print(computer)

    if player1 == computer:
        print("It's a tie!")

    elif player1 == "rock":
        if computer == "scissors":
            print("player1 wins!")
            player_wins  = 1
        elif computer == "paper":
            print("computer wins!")
            computer_wins  = 1

    elif player1 == "paper":
        if computer == "rock":
            print("player1 wins!")
            player_wins  = 1
        elif computer == "scissors":
            print("computer wins!")
            computer_wins  = 1

    elif player1 == "scissors":
        if computer == "rock":
            print("computer wins!")
            computer_wins  = 1
        if computer == "paper":
            print("player1 wins!")
            player_wins  = 1
    else:
        print("something went wrong")
  

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

Что я здесь делаю не так?

Ответ №1:

Выбор компьютера всегда представляет собой список, и вы сравниваете его со строкой.

Измените эту строку:

 computer = [computer_choices[computer_choice]]  # list with one string item
  

К этому:

 computer = computer_choices[computer_choice]  # string
  

Игра работает корректно с этим изменением.