Насколько я понимаю, оператор IF .... или операторы обычно работают с условием, но для этого сценария используются только две функции без каких-либо условий?
Всегда есть условие , Код, который вы разместили, не является исключением. То, что вы называете «условием», на самом деле является просто логическим выражением в определенном c контексте. Если все выражение имеет значение True
, вы вводите тело оператора if. В противном случае, если он оценивается как False
, вы этого не сделаете.
Пример
Следующий код выполняет итерации по символам в строке и печатает только те символы, которые и в алфавитном порядке c, и в верхнем регистре:
string = "Hell2O]WoR3(Ld"
for char in string:
if char.isalpha() and char.isupper():
print(char)
Вывод:
H
O
W
R
L
>>>
str.isalpha
возвращает логическое значение - True
, если строка (в данном случае строка, состоящая из один символ) содержит только буквы c символов, False
в противном случае.
str.isupper
возвращает логическое значение - True
, если строка (опять же, только один символ в данном случае) содержит только заглавные буквы символы, False
в противном случае.
Я выбрал эти два строковых метода для имитации двух функций, которые есть в вашем коде, поскольку они также возвращают логические значения.
Давайте возьмем первый символ, "H"
:
>>> char = "H"
>>> char.isalpha()
True
>>> char.isupper()
True
>>> char.isalpha() and char.isupper()
True
>>>
Видите, все логическое выражение char.isalpha() and char.isupper()
оценивается как True
. Чтобы все выражение было оценено, необходимо вызвать обе функции - вы можете думать об их возвращаемых значениях, эффективно «заменяя» их соответствующие вызовы функций. Когда char
равно "H"
, после вызова функций выражение действительно выглядит так:
True and True
, что оценивается как True
, поэтому мы вводим тело оператор if.
В вашем случае вы использовали or
вместо and
. То, что я сказал о булевых выражениях, сворачивающихся в одно значение True
или False
, по-прежнему применимо, единственное отличие будет в коротком замыкании, которое, я думаю, не относится к вашему вопросу.
Пример
Вот что-то ближе к тому, что у вас есть. Представьте себе сценарий, в котором вы хотите контролировать температуру и излучение чего-либо. Если либо температура, либо уровни излучения не являются номинальными, мы запускаем сигнализацию.
def is_temperature_nominal(temp):
return 70 <= temp <= 100
def is_radiation_nominal(rad):
return rad < 200
if not is_temperature_nominal(250) or not is_radiation_nominal(50):
print("Alarm triggered!")
else:
print("Everything is good.")
Выход:
Alarm triggered!
>>>
Я выбрал номинальные диапазоны произвольно, и я выбрал аргументы 250
и 50
также произвольно. С этими двумя жестко закодированными значениями логическое выражение будет выглядеть следующим образом после вызова двух функций:
not False or not True
Иными словами,
True or False
При or
только один из операндов должен быть True
, чтобы все выражение оценивалось в True
- поэтому все выражение оценивается в True
, и мы вводим тело оператора if, запускающего сигнал тревоги (потому что только одно из значений должно быть не номинальным, чтобы сигнал тревоги срабатывал. Если оба значения не являются номинальными, это также вызовет сигнал тревоги. Единственный способ ввода тела else
, если оба значения являются номинальными).