В последнем уроке я оставил без объяснения один конкретный тип данных, так как он явно отличается от всех остальных и как бы отвечает за представление логики в языке программирования. Все значения, принадлежащие логическому типу данных, могут быть либо True, либо False. Да или нет. Черный или белый. Здесь нет золотой середины, серой зоны или компромисса. Язык оценивает каждое выражение в программе как истинное или ложное. Но что я имею в виду? Что правда? Что такое Ложь? Нужно ли нам изучать риторику, чтобы уметь программировать? Это не то, о чем я думал в программировании!!!

Расслабляться. К счастью, программа не потребует от вас способности отвечать на философские вопросы о смысле и цели человеческого существования. То, что язык считает истинным, есть все, что соответствует здравому смыслу. 2 равно 1+1 — это Истина. 5 больше 10 — Ложь. Python имеет в дополнение к арифметическим операторам, которые мы обсуждали ранее, концепцию операторов сравнения, символы, которые позволяют нам сравнивать два выражения друг с другом, а затем возвращать результат в зависимости от условия, является ли сравнение истинным или ложным:

print ( 2 == 1+1) # 2 равно 1+1

распечатать ( 5 › 10)

печать ( 65 ‹ 100–30)

print("Роджер" == "Бен")

Результат:

Истинный

Ложь

Истинный

Ложь

Видеть? Каждый раз, когда вы выполняете сравнение между двумя разными выражениями при определенном условии, например, это равно это, оно возвращает логическое значение, которое показывает нам ответ на вопрос. вопрос, который мы задали. Иногда вам может понадобиться узнать, имеет ли значение конкретной переменной в вашей программе определенное ожидаемое значение. Возможно, вы хотите убедиться, что вывод вашей функции никогда не превысит 1000 или что глобальная переменная, которая изменялась несколько раз в течение сеанса работы вашего скрипта, по-прежнему имеет тот же тип данных. Это и многое другое можно сделать с помощью операторов сравнения.

На самом деле вы даже можете напрямую присваивать логические значения:

яблоко = правда

оранжевый = ложь

печать яблоко

принт оранжевый

Результат:

Истинный

Ложь

Однако, учитывая информацию, которая у вас есть прямо сейчас, это кажется абсолютно бессмысленным. Да, я могу иметь много логических значений, назначать их переменным и затем смотреть, как они выводятся, но в этом нет ничего интересного. Какой смысл иметь какую-то функцию, если вы не можете использовать ее на практике? Что ж, у них есть применение, так как вы можете комбинировать логические значения, чтобы получить… другое логическое значение!!! Разве это не потрясающе?

Булева логика также включает такие операторы, как НЕ, ИЛИ, И, НЕ ИЛИ, НЕ И. Они позволяют нам делать всевозможные вещи с логическими значениями, так как мы можем выполнять гигантскую последовательность сравнений, приводящую к сложному выражению, которое дает одно желаемое логическое значение. Давайте рассмотрим следующие примеры, чтобы понять, как работают эти операторы и зачем они нам нужны. Предположим, что у нас есть переменная T со значением True и переменная F со значением False:

Т = Истина

Ф = Ложь

печать (Т)

печать (Ф)

Результат:

Истинный

Ложь

Теперь это понятно, но что, если мы попробуем применить оператор НЕ к обеим этим переменным:

T = T

F = F

печать (НЕ Т)

печать (НЕ F)

Результат:

Ложь

Истинный

Не вопреки интуиции, оператор НЕ просто возвращает любое логическое значение, противоположное выражению, для которого оно было использовано. Мы можем видеть это на еще более простых примерах:

print ( NOT (2 == 1+1)) # 2 равно 1+1

печать (НЕ 5 › 10)

печать (НЕ 65 ‹ 100–30)

print(НЕ «Роджер» == «Бен»)

Результат:

Ложь

Истинный

Ложь

Истинный

Это довольно легко понять, но что делает оператор AND? Он оценивает два логических выражения и возвращает значение True только тогда, когда оба этих выражения истинны, в противном случае возвращается значение False. Давайте посмотрим прямо сейчас:

Т = Истина

Ф = Ложь

печать (Т и Т)

печать (Т и F)

печать (F и T)

печать (F и F)

Результат:

Истинный

Ложь

Ложь

Ложь

Хорошо, это может немного сбить с толку, но когда вы посмотрите на этот оператор в действии, все прояснится:

print(5>2 и 1 == 1)

печать(2 ‹ 7 и 6 › 11)

print(58 == 21 и 54 ›= 45)

print(54 == 1 и 0 > 65)

Результат:

Истинный

Ложь

Ложь

Ложь

И просто не может вернуть True, когда одно из выражений равно False, потому что, если бы это было так, это было бы против всего здравого смысла.

Следующий ИЛИ довольно прост. Он возвращает True каждый раз, когда одно из проверяемых выражений имеет значение True, в противном случае он возвращает False. Давайте взглянем:

Т = Истина

Ф = Ложь

печать (Т или Т)

печать (T или F)

печать (F или T)

печать (F или F)

Результат:

Истинный

Истинный

Истинный

Ложь

Опять же, когда вы смотрите на этот оператор в действии, становится намного легче понять, как он работает. Хотя я сомневаюсь, что у вас возникнут проблемы с этим:

print(5>2 или 1 == 1)

печать(2 ‹ 7 или 6 › 11)

print(58 == 21 или 54 ›= 45)

print(54 == 1 или 0 › 65)

Результат:

Истинный

Истинный

Истинный

Ложь

Если бы оператор И был действительно строгим и хотел, чтобы все было правдой, то ИЛИ гораздо более скомпрометирован и был бы в порядке, если бы только одно из выражений было Истинно. Последние два оператора НЕ И и НЕ ИЛИ могут показаться на первый взгляд очень странными и непонятными, но это точно такие же операторы И и ИЛИ, за исключением того, что к их результатам был применен оператор НЕ.

Чтобы проиллюстрировать, каждый раз, когда оператор И будет возвращать значение Истина, НЕ И будет возвращать Ложь, и наоборот. То же самое касается NOT OR, поэтому у вас не должно возникнуть проблем с их использованием, просто сначала примените их обычные формы, а затем преобразуйте их в противоположное значение, и все будет в порядке:

Т = Истина

Ф = Ложь

печатать (не (Т и Т))

печать (не (T и F))

напечатать(не (F и T))

печатать (не (F и F))

Результат:

Ложь

Истинный

Истинный

Истинный

Т = Истина

Ф = Ложь

напечатать(не (Т или Т))

напечатать(не (T или F))

печатать(не (F или T))

печатать(не (F или F))

Результат:

Ложь

Ложь

Ложь

Истинный

Вы можете удивиться про себя, с жадным и недовольным выражением лица, едва сдерживая свою жадность и кодируя голод, но двух булевых значений недостаточно!!! Я хочу больше!!! Я хочу оценить 9999 логических значений и увидеть результат!

Ну, ты можешь. Ничто не останавливает вас. Те же самые правила будут применяться, даже если вы увеличите количество логических значений до миллиона. На самом деле процесс создания чрезвычайно сложного логического выражения сам по себе является искусством, не говоря уже о том, насколько это весело.

Увидимся в следующий раз!!!!!

P.S. Вы уже можете немного поиграть с логическими значениями. Дайте волю воображению.