Я не могу выйти из цикла while

#python

Вопрос:

 # Dice Rolling Random Number and Guessing Game  import random  user_choice = 'y'   while user_choice != 'N' or user_choice != 'n':   print(random.randint(1,6))  user_choice = input("Do you want to continue: ")  print("You are exited")  

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

1. Вы хотите использовать and , а не or . Или вы можете заменить условие на while user_choice not in 'Nn': или while user_choice.lower() != 'n':

Ответ №1:

Логика условия while неверна.

Ваш цикл длится вечно, потому что персонаж ВСЕГДА будет отличаться от одного из предложенных персонажей. Таким образом, условие while всегда верно, так как по крайней мере одна из двух частей всегда верна.

Вы хотите что-то вроде

 while user_choice != 'N' and user_choice != 'n':  ...  

Если вы хотите пойти более «питоническим» путем, запросите набор в условии while:

 while user_choice not in {'n', 'N'}:  ....  

Существует множество аналогичных способов с помощью кортежей, списков … выразить условие, отличное от запроса каждого символа по отдельности в цепочке условий «и».

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

1. Я бы использовал кортеж, а не набор, какие-либо преимущества для набора или просто личные предпочтения?

2. Это одна из многих возможностей сформулировать условие по — другому-первая, которая пришла мне в голову при написании ответа. Я добавил предложение, чтобы прояснить это.

Ответ №2:

Что касается кодирования, то на этот вопрос уже дан ответ, но я хотел бы предложить более глубокое объяснение того, почему ответом была and операция, а or не .

Вопрос «Не ввел ли пользователь ни 'n' то, ни 'N' другое ?» может быть выражен с помощью алгебры Буля следующим образом

  • Ответ = Не( 'n' или 'N' ), и, используя теорему Деморгана, это можно переписать как
  • Ответ = Не( 'n' ) и не( 'N' )

В вашем коде первый из двух способов написания этого будет выглядеть так

while !(user_choice == 'N' or user_choice == 'n'):

Я надеюсь, что это прояснит логику вашего вопроса.