#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