Объединение условий
Логические операторы
Условия можно объединять с помощью логических операторов and и or. Оператор and указывает, что все заданные условия должны быть истинны одновременно. Оператор or указывает, что хотя бы одно из заданных условий должно быть истинным.
Например, условие number >= 5 and number <= 8 определяет, что number должен быть одновременно не меньше 5 и не больше 8. То есть он должен находиться между 5 и 8.
number = int(input("Please type in a number: "))
if number >= 5 and number <= 8:
print("The number is between 5 and 8")А условие number < 5 or number > 8 определяет, что number должен быть либо меньше 5, либо больше 8. То есть он не должен находиться в диапазоне от 5 до 8.
number = int(input("Please type in a number: "))
if number < 5 or number > 8:
print("The number is not within the range of 5 to 8")Следующая таблица истинности показывает поведение этих операторов в разных ситуациях:
| a | b | a and b | a or b |
|---|---|---|---|
| False | False | False | False |
| True | False | False | True |
| False | True | False | True |
| True | True | True | True |
Иногда нужно узнать, что что-то не истинно. Оператор not отрицает условие:
| a | not a |
|---|---|
| True | False |
| False | True |
Пример выше с исключенным диапазоном от 5 до 8 можно было бы запрограммировать и так:
number = int(input("Please type in a number: "))
if not (number >= 5 and number <= 8):
print("The number is not within the range of 5 to 8")Именно в программировании логические операторы часто называют булевыми операторами.
Объединение и цепочки условий
Следующая программа просит пользователя ввести четыре числа. Затем с помощью условий она выясняет, какое из четырех чисел самое большое:
n1 = int(input("Number 1: "))
n2 = int(input("Number 2: "))
n3 = int(input("Number 3: "))
n4 = int(input("Number 4: "))
if n1 > n2 and n1 > n3 and n1 > n4:
greatest = n1
elif n2 > n3 and n2 > n4:
greatest = n2
elif n3 > n4:
greatest = n3
else:
greatest = n4
print(f" {greatest} is the greatest of the numbers.")Number 1: 2 Number 2: 4 Number 3: 1 Number 4: 1 4 is the greatest of the numbers.
В примере выше первое условие n1 > n2 and n1 > n3 and n1 > n4 истинно только если все три условия внутри истинны.
Вложенные условные операторы
Условные операторы также можно вкладывать внутрь других условных операторов. Например, следующая программа проверяет, больше ли число нуля, а затем проверяет, четное оно или нечетное:
number = int(input("Please type in a number: "))
if number > 0:
if number % 2 == 0:
print("The number is even")
else:
print("The number is odd")
else:
print("The number is negative or zero")Несколько примеров того, как ведет себя эта программа:
Please type in a number: 3 The number is odd
Please type in a number: 18 The number is even
Please type in a number: -4 The number is negative or zero
При вложенных условных операторах крайне важно правильно расставить отступы. Отступы определяют, какие ветви связаны друг с другом. Например, ветвь if и ветвь else с одинаковым количеством пробельных символов считаются ветвями одного и того же условного оператора.
Того же результата часто можно добиться либо с помощью вложенных условных операторов, либо с помощью условий, объединенных логическими операторами. Пример ниже функционально не отличается от примера выше в том смысле, что он выводит ровно то же самое при тех же вводах:
number = int(input("Please type in a number: "))
if number > 0 and number % 2 == 0:
print("The number is even")
elif number > 0 and number % 2 != 0:
print("The number is odd")
else:
print("The number is negative or zero")Ни один из подходов сам по себе не лучше другого, но в разных ситуациях один или другой может казаться более логичным. В этом конкретном примере большинству людей первая версия с вложенностью обычно кажется более интуитивной.
Текущие баллы можно посмотреть в синем инд икаторе в правом нижнем углу страницы.