Цикл 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 и выполнение заходит в цикл.
Для большей понятности можно обратить условие, написав отрицание через 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 - это два разных отрезка, число не может принадлежать сразу и тому отрезку и другому.