Цикл while с двойным условием в python

Собственно проблема следующая: когда оставляешь в цикле только одно из условий, все работает без нареканий. Как только добавляешь второе условие, они оба начинают просто игнорироваться, хотя должны соблюдаться вместе. И в тело цикла просто не заходит при любом веденном числе

number = int(input('Введите число: '))

while number >= 10 and number <= 0:
    print('Не верно. Число должно быть от 1 до 9 включительно')
    number = int(input('Введите число: '))

number = number ** 2
print(number)

Ответы (2 шт):

Автор решения: Эникейщик

Очевидно, что число не может быть одновременно больше 10 и меньше 0. Замените and на or.

Предположим, что number равно 15. Тогда имеем следующее:

  • number >= 10 - True
  • number <= 0 - False

По таблице истинности True AND False дает False, поэтому в цикл не попадает. То же самое, если число меньше 0.

А вот True OR False как раз дает True и выполнение заходит в цикл.

→ Ссылка
Автор решения: CrazyElf

Для большей понятности можно обратить условие, написав отрицание через not и взяв в скобки верное условие:

while not (number >= 1 and number <= 9):
    print('Не верно. Число должно быть от 1 до 9 включительно')
    number = int(input('Введите число: '))

Т.е. цикл будет выполняться, пока не выполнилось искомое условие, что число "от 1 до 9 включительно".

P.S. Есть три отрезка, которым может принадлежать проверяемое число:

  • Числа < 1
  • Числа от 1 до 9
  • Числа > 9

Число может принадлежать одному из этих отрезков. Когда вы проверяете число на принадлежность отрезку [1,9] вы можете писать условия через и/and, потому что это один отрезок но когда вы проверяете, что число находится в одном из двух разных отрезков (меньше 1 либо, больше 9) вы не можете использовать и/and, а только или/or - это два разных отрезка, число не может принадлежать сразу и тому отрезку и другому.

→ Ссылка