В то время как цикл с помощью Nor Logic - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь создать консольное меню в Python, где параметры в меню перечислены 1 или 2. Выбор номера откроет следующее меню.

Я решил попробовать использовать цикл while для отображения меню, пока не будет выбран правильный номер, но у меня возникла проблема с логикой.

Я хочу использовать логику NOR, так как если одно или оба значения истинны, оно возвращает ложь, и цикл должен прерываться, когда ложь, однако цикл просто продолжает цикл, даже когда я ввожу 1 или 2.

Я знаю, что мог бы использовать while True и просто использовать break, как я обычно это делаю, я просто пытался добиться этого другим путем с помощью логики.

while not Selection == 1 or Selection == 2:
    Menus.Main_Menu()
    Selection = input("Enter a number: ")

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

NOR, который вы хотите, это либо

not (Selection == 1 or Selection == 2)

или альтернативно

Selection != 1 and Selection != 2

Два выражения выше эквивалентны друг другу, но не

not Selection == 1 or Selection == 2

Это эквивалентно

Selection != 1 or Selection == 2

и, следовательно,

not (Selection == 1 and Selection != 2)
0 голосов
/ 20 мая 2019

not имеет более высокий приоритет, чем or;Ваша попытка проанализирована как

while (not Selection == 1) or Selection == 2:

Вам нужны либо явные скобки

while not (Selection == 1 or Selection == 2):

, либо два использования not (и соответствующий переключатель на and):

while not Selection == 1 and not Selection == 2:
# while Selection != 1 and Selection != 2:

Наиболее читаемая версия, хотя, вероятно, предполагает переключение на not in:

while Selection not in (1,2):
...