Я не могу разорвать этот цикл - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть задание, в котором мне нужно выполнить действие, пока на входе не появится «выход», «выход», «q» или «Q». Я пробовал это:

while variable != 'quit' or 'Quit' or 'q' or 'Q':
    # do stuff

однако, когда любая из этих строк вводится, цикл while все еще выполняется! Я пробовал другие способы, такие как заявления if, но это просто время ожидания. Как правильно разорвать петлю?

Ответы [ 3 ]

1 голос
/ 30 сентября 2019

Путь, вероятно, примерно такой:

while str(variable).upper() not in ['QUIT', 'Q']:

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

1 голос
/ 30 сентября 2019

Если я правильно понимаю, у вас есть что-то вроде следующего:

while variable != 'quit' or 'Quit' or 'q' or 'Q':
    # do stuff
    variable = input("")

(Кстати - добро пожаловать в Stack Overflow! Как уже упоминал другой пользователь в комментарии - пожалуйста, предоставьте кодпример: это поможет потенциальным ответчикам на самом деле узнать, что идет не так и что вы пытаетесь сделать.)

Причина, по которой он никогда не ломается, заключается в том, что интерпретатор Python фактически видит:

while (variable != 'quit') or ('Quit') or ('q') or ('Q'):
    # do stuff
    variable = input("")

В Python непустые строки будут иметь значение true - если вы попробуете bool('q') в интерпретаторе Python, вы получите True. Это означает, что интерпретатор работает:

while (variable != 'quit') or True or True or True:
    # do stuff
    variable = input("")

, который, очевидно, никогда не ломается. Что вам нужно сделать, это проверить все варианты;У «Доброго незнакомца» есть одно решение, но более явно, вы можете попробовать

while variable not in ('quit', 'Quit', 'q', 'Q'):
0 голосов
/ 30 сентября 2019

Попробуйте:

 while (variable != "quit" and variable != "q"  and variable != "Q" and variable != "Quit"):

Вы не можете использовать переменную! = "Q" или "Q" и т. Д.

...