Почему моя игра rock paper scissors не запускает цикл while?

#python #while-loop

#python #цикл while

Вопрос:

Итак, это мой код на данный момент, пытаюсь создать игру rock paper scissors, которая является лучшей из 3.

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

player_wins = 0
computer_wins = 0

while player_wins and computer wins < 3:  
    player1 = input("Player 1, make your move: ").lower()
    computer_choices = ["rock", "paper", "scissors"]
    computer_choice = randint(0, 2)
    computer = str[computer_choices[computer_choice]]
    print(computer)
...(then all the choice logic goes here, I add 1 to the variables of the one who wins)

if player_wins == 3:
    print("Player wins the game!")
if computer_wins == 3:
    print("Computer wins the game!")
  

Почему код никогда не входит в цикл while? Я действительно понятия не имею, что здесь происходит.

Редактировать: я сделал while (player_wins and computer_wins) < 3: , и теперь он входит в цикл, но не выходит.

Ответ №1:

вы, вероятно, хотите:

 while (player_wins < 3) and (computer wins < 3):  
  

похоже, вы пытаетесь сказать, имеют ли значения player_wins И computer_wins < 3, но ваш синтаксис не совсем правильный.

Комментарии:

1. В этом случае круглые скобки являются избыточными

2. избыточно да, но для тех, кто не совсем правильно понимает синтаксис, это помогает с пониманием — по крайней мере, imo. Итак, их можно было бы оставить.

Ответ №2:

при входе в цикл значение player_wins равно 0. Вы имели в виду

 while player_wins < 3 and computer_wins < 3:
  

?

Комментарии:

1. По-прежнему не выходит из цикла

Ответ №3:

Именно из-за этой строки while player_wins and computer wins < 3: вы проверяете, имеет ли значение player_wins значение true (> 0) и выигрывает ли компьютер меньше 3. «computer wins» должно быть «computer_wins»

Это должно выглядеть так: while player_wins < 3 and computer_wins < 3:

Комментарии:

1. Да, но я думал, что есть способ упростить это. Может while (player_wins and computer_wins) < 3: быть?

2. while any(map((lambda value: value < 3), (player_wins,computer_wins))): Это лучшее, что я мог придумать @OffxcialBubba

Ответ №4:

Цикл не запускается, потому что, когда сначала достигается условие while, переменная player_wins имеет значение 0, а 0 автоматически преобразуется в False для оценки условия, и поэтому ваше начальное условие равно False, и программа никогда не попадает в цикл. Вы можете представить процесс оценки следующим образом:

 while player_wins and computer wins < 3

while 0 and 0 < 3

while False and True

while False # It doesn't get into the loop
  

Дополнительная информация здесь: http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/boolean.html