Почему операторы Python logi c не работают с этим оператором if? - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок ie здесь и в настоящее время пытаюсь сделать игру "Ti c Ta c Toe", и в этом конкретном случае, если выражение my 'or' каким-то образом испортит l oop, и это происходит вечно, независимо от ввода. Как только я уберу его и передам обязательный параметр, все станет на свои места. Вот фрагмент:

def player_input():
    '''Takes in an "X" or "O" as player's input'''
    while True:
        player1 = str(input("Player 1: please choose 'X' or 'O': "))
        if player1.lower() != 'o' or player1.lower() != 'x':
            continue
        return player1

Заранее спасибо за все ответы!

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

У вас условие "всегда верно". Ваше состояние состоит из двух частей. Если вы поставите любую букву, кроме «х» или «о», вы получите True or True. Если вы введете «х», у вас будет True or False. Если вы введете «о», вы получите False or True. В любом случае, в конце концов вы получите «if True:», так что вы будете продолжать вечно.

Если вы хотите продолжить, пока не получите x или o, вам необходимо условие: if player1 not in ("x", "o"):

0 голосов
/ 22 апреля 2020

В вашем коде эта строка всегда истина, следовательно, бесконечное l oop:

if player1.lower() != 'o' or player1.lower() != 'x':

Подумайте об этом: если игрок вводит 'o', то это верно, потому что player1.lower() != 'x' верно. Если игрок вводит 'x', то это правда, потому что player1.lower() != 'o' это правда. Если игрок вводит что-то еще, тогда player1.lower() != 'o' - это истина. Вы видите проблему? это всегда правда, независимо от того, что вы печатаете!

Вы должны были использовать and, а не or. И в любом случае l oop можно упростить, вот что вы намеревались сделать:

player1 = input("Player 1: please choose 'X' or 'O': ")
while player1.lower() != 'o' and player1.lower() != 'x':
    player1 = input("Player 1: please choose 'X' or 'O': ")
return player1
...