Используем объекты вместо True и False — truthy и falsy значения в Python
Авторизуйтесь
Используем объекты вместо True и False — truthy и falsy значения в Python
Автор перевода Алексей Морозов
Значения вместо булевых переменных
В Python, как и в других языках, есть логический тип переменных bool, который имеет всего два значения: True (истина) и False (ложь). Его возвращают логические операторы (например сравнение чисел или проверка присутствия элемента в списке), и именно этот тип обычно используется в if и while. Тем не менее, явно использовать bool или операторы необязательно: существуют правила, по которым значение любого типа приводится к True или False.
Прим. пер. По-английски это называется truthy и falsy, то есть «примерно-но-не-совсем-истинные», «истинноватые» значения. Общепринятого русского перевода нет, но в этой статье под истинным или ложным значением объекта всегда подразумеваются именно эти штуки, а булевы значения везде названы True и False.
Вот как это работает:
Булев контекст
Любое значение в Python при необходимости может интерпретироваться как True или False в соответствии с правилами языка. Об этом написано и в документации:
Любой объект может быть протестирован на истинность и использован в условиях if и while, а также как операнд булевых операций (and, or, not).
Если объект используется таким образом, то он находится в булевом контексте. Грубо говоря, это такое место в коде, которое требует от объекта значения либо True, либо False.
В булевом контексте может использоваться как переменная, так и выражение. Если используется выражение, значит, оценивается истинность его результата.
Объекты, которые приравниваются к False
По умолчанию объект считается истинным, если его класс не определяет метод __bool__, возвращающий для объекта False, или метод __len__, возвращающий для него ноль.
Последовательности и коллекции
Нули любых численных типов
Константы
Объекты, которые приравниваются к True
По умолчанию любой объект имеет истинное значение.
В частности, истинными являются:
Функция bool()
С помощью этой функции можно проверить истинность или ложность любого значения. Согласно документации, она:
Возвращает булево значение, т. е. либо True, либо False. Аргумент x конвертируется с использованием стандартной процедуры проверки истинности.
Передавать этой функции можно как значение, так и содержащую его переменную.
Зачем это нужно?
Преимущество истинных и ложных значений в том, что они позволяют сделать код кратким и понятным. Вот два примера:
Допустим, у нас есть функция print_even(), которая принимает в качестве аргумента список или кортеж чисел и печатает его чётные элементы. Если список пустой, то выводится сообщение:
Обратите внимание на эту строчку:
Её можно сократить до:
Если список пустой, data имеет ложное значение. Если он не пустой (то есть его длина больше нуля), то истинное. Тот же результат достигается меньшим количеством кода:
Можно использовать истинные/ложные значения, чтобы выбросить исключение, если аргумент некорректен.
Если список data пустой:
Если список не пустой:
Истинные и ложные значения произвольных объектов
Если вы хотите, чтобы у ваших объектов были не только истинные значения, можно добавить к классу метод __bool__() и задать в нём правила, по которым будет определяться истинность или ложность объекта.
Например, у нас есть вот такой класс:
Поскольку у него нет специальных методов, все объекты этого класса имеют истинное значение:
Это можно исправить, добавив __bool__():
Теперь объект имеет истинное значение, пока на счету больше нуля. При нулевом или отрицательном балансе значение будет ложным.
Если у класса нет метода __bool__(), но есть метод __len__(), то истинность объекта определяется истинностью того, что возвращает __len__().
Вот так работает механизм, позволяющий использовать любые объекты в качестве булевых. С его помощью можно сделать код проще и понятнее; важно только не забывать осмысленно называть переменные — какое-нибудь pabotat() if cnucok_2 else He_pabotat() никуда не годится что с булевским контекстом, что без него.
Логический тип данных (bool) в Python
Логический тип данных (bool) (или булевый тип) это примитивный тип данных, который принимает 2 значения — истина или ложь.
True и False являются экземплярами класса bool который в свою очередь является подклассом int Поэтому True и False в Python ведут себя как числа 1 и 0. Отличие только в том, как они выводятся на экран.
>>> True True >>> type(True) >>> isinstance(True, int) True >>> True == 1 True >>> True + 4 # True это число 1 5 >>> 5 * False # False это число 0 0
Преобразования
Другие типы к bool
В Python для приведения других типов данных к булевому типу, используется функция bool() Работает эта функция по следующему соглашению:
👉 Функция bool() вернет True:
👉 Функция bool() вернет False:
bool к str
Бывают ситуации, когда нам необходимо получить True и False в строковом представлении. Если выполнить код ниже, он вызовет ошибку:
print(«answer is » + True) TypeError: can only concatenate str (not «bool») to str
Ошибка произошла потому, что Python не выполняет неявное приведение типов (как например JavaSctipt), так как неявное приведение может маскировать логические ошибки.
Для вывода на экран булевого значения, необходимо привести его к строке:
>>> answer = True >>> print(«my answer is » + str(True)) my answer is True
или используйте форматирование строки:
print(«my answer is <>«.format(True))
bool к int
Встроенная функция int() преобразует логическое значение в 1 или 0.
>>> int(True) 1 >>> int(False) 0
Аналогичного результата можно добиться умножением логического типа на единицу:
>>> True * 1 1 >>> False * 1 0
Логический тип и операторы
Операторы — это своего рода функционал, представленный в виде символов (например + ==) или зарезервированных слов (например and not).
>>> (1 + 1 == 2) or (2 * 2 == 5) True >>> (1 + 1 == 2) and (2 * 2 == 5) False >>> (1 + 1 == 2) and not (2 * 2 == 5) True
Boolean — Базовые типы данных в Python: Булев, или логический тип
Следующая статья будет полезна тем, кто только начал знакомиться с особенностями программирования на Python. Здесь будет рассмотрен один из ключевых типов данных Python — булев тип. Булев, или логический тип, является важным концептом программирования, который принимает истинное (true) или ложное (false) значение.
Булев тип данный в Python 3
Булев концепт присутствует в каждом языке программирования. Булев тип данных реализует идею истины (true) или лжи (false). Во время составления программы часто всплывают моменты, когда в зависимости от ситуации требуется выполнить различные участки кода. Для этого нужен булев тип.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
Объявить булево значение в коде можно при помощи ключевых слов True или False ( верхний регистр важен ). Следующий код создает два булевых значения и присваивает их переменным.
Булева логика в Python
Более сложная булева логика.
Заключение
Булев тип важен для любого языка программирования. При помощи булевой логики код может реагировать на различные данные внутри программы и выполнять выбранные инструкции при разных обстоятельствах. Надеюсь, вы немного узнали о том, как работать с логическими значениями в Python 3! Следите за обновлениями, чтобы узнать больше об особенностях работы в Python 3.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
# Логические выражения
# Выражения
# Математические выражения
Все люди знакомые с математикой знают и понимают, что такое математическое выражение. Мы часто пользуемся математическими выражениями в уме, хотя можем и не задумываться о терминологии. Например при подсчете сколько стоит купить товар или сколько времени затратили на дорогу.
Математические выражения оформленные в виде кода могут выглядеть следующим образом:
Результатом выполнения математического выражения будет вычисление числа. В примере выше строки с математическими выражениями содержат дополнительные комментарии: результат вычисления и указание, что это математическое выражение.
# Логические выражения
B реальной жизни мы соглашаемся с каким-либо утверждением или отрицаем его. Например, если вам скажут, что сумма чисел 3 и 5 больше 7, вы согласитесь, скажете: «Да, это правда». Если же кто-то будет утверждать, что сумма трех и пяти меньше семи, то вы расцените такое утверждение как ложное.
Логические выражения похожи по своему виду и принципу работна на математические выражения у них лишь два основных различия:
Логические выражения оформленные в виде кода могут выглядеть следующим образом:
Например, выражение 4 > 5 является логическим, так как его результатом является либо правда, либо ложь. Выражение 4 + 5 не является логическим, так как результатом его выполнения является число.
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
# Сравнение чисел
Основное правило сравнения помогает избежать и/или исправить наиболее частые ошибки:
Соблюдайте совпадение типов
Тип сравниваемых значений всегда должен быть одинаковый!
Допустимо сравнение разных типов чисел:
Чтобы узнать тип объекта можно воспользоваться функцией type() :
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
В функциях print записаны выражения, определите какие из выражений составлены правильно, а какие нет. Неправильные выражения закомментируйте:
# Операторы сравнения чисел
Говоря на естественном языке мы обозначаем сравнения словами «равно», «больше», «меньше». В языках программирования используются специальные знаки, подобные тем, которые используются в математике:
Присваивание и сравнение – разные операции. Не путайте операцию присваивания с операцией сравнения:
# Простые логические выражения
Простыми логическими выражениями можно, условно, считать выражения, в которых сравнение происходит между двумя значениями и используется соответственно один оператор сравнения:
В данном примере выражение c = a == b состоит из двух подвыражений. Сначала происходит сравнение (==) переменных a и b. После этого результат логической операции присваивается переменной c. Выражение a, b, c просто выводит значения переменных на экран.
# Упражнения
Самостоятельно, без запуска кода, решите логические примеры, т.е. что выведет функция print() :
Сверьте Ваши ответы c ответами компьютера.
Примеры работы программы:
Примеры работы программы:
Напишите программу, которая запрашивала у пользователя два числа и выводила бы True или False в зависимости от того, больше первое число второго или нет.
# Сравнение строк
Основное правило сравнения помогает избежать и/или исправить наиболее частые ошибки:
Обязательное совпадение типов
Тип сравниваемых значений всегда должен быть одинаковый!
# Операторы сравнения строк
# Простые логические выражения
Сравнение строк происходить не столь очевидным способом как числа. Для примера предлагаю подумать над следующими выражениями:
Правила сравнения строк:
Проверку по-символьно происходит следующим образом:
Пошаговое выполнение логического выражения можно представить следующим образом:
Для общего ознакомления с некоторым объемом символов можно запустить следующий код:
Результат выполнения будет примерно следующим, троеточием заменены не которые малопонятные символы:
Данный пример вывода необходим для понимания сравнения строк посимвольно.
Если выведенную последовательность символом представить как числовую ось, то вес символа будет определяться по правилу: чем правее символ находится тем больше он весит.
Для примера можно запустить следующий код и осознать правильность его выполнения:
Для наглядности веса символа и его отображения можно запустить следующий код:
Результат выполнения будет следующим:
Вывод до 1105 символа.
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите ваши варианты ответа (True, False) заданные:
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите символы в результате сравнения которых ответ должен совпадать заданными:
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите символы в результате сравнения которых ответ должен совпадать заданными:
# Сравнение строк операторам «in»
Сравнение строк с использованием оператора in достаточно простая и при этом объемная проверка.
Особенность in заключается в том, что при помощи него можно производить общую проверку для всей строки не по отдельным символам. Т.е. есть возможность проверки наличия символа или строки в другой строке:
Таким образом можно реализовать проверку наличия слова в строке или другого набора символов в строке.
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите ваши варианты ответа (True, False) заданные:
Напишите напишите программу, которая спрашивает «What month is your vacation?»
Напишите напишите программу, которая просит «Enter your login to register: «
# Методы проверки строк
Пример определения, что строка является числом можно сделать двумя способами:
В коде выше можно поменять значения строки «485» на любую другую строку, и убедиться что итог решений одинаков.
Вспомним, что строка это объект, и это значит что у неё есть методы, которые не только могут изменять сам объект, но и сообщить информацию о нем самом.
В английском языке общие вопросы, на которые отвечают да/нет выглядят следующим образом:
# Проверка строк методами без параметров
# Проверка строк методами c параметрами
# Упражнения
Напишите программу которая будет определять характеристики строки. Программа запрашивает на ввод строку и далее определяет соответствие строки указанным параметрам:
Пример работы программы может быть следующим:
Напишите программу, которая будет определять характеритику строки. Использовать нужно методы обработки и провеки строк. Пользователя просят вести строку, далее происходит проверка символов:
В итоге выводится результат характеристики введеной строки.
Пример работы программы:
# Преобразование к логическому типу
Нам известны три типа данных – целые и вещественные (дробные) числа, и также строками. Новый четвертый – логический тип данных (тип bool ). Его также называют булевым. У этого типа всего два возможных значения: True (правда) и False (ложь):
В программировании False обычно приравнивают к нулю, а True – к единице. Чтобы в этом убедиться, можно преобразовать булево значение к целочисленному типу:
Возможно и обратное. Можно преобразовать какое-либо значение к булевому типу:
# Сложные логические выражения
Логические выражения типа kByte >= 1023 являются простыми, так как в них выполняется только одна логическая операция. Однако, на практике нередко возникает необходимость в более сложных выражениях. Может понадобиться получить ответ «Да» или «Нет» в зависимости от результата выполнения двух простых выражений. Например, «на улице идет снег или дождь», «переменная news больше 12 и меньше 20».
В таких случаях используются специальные операторы, объединяющие два и более простых логических выражения. Широко используются два оператора – так называемые логические И (and) и ИЛИ (or).
# Упражнения
Напишите следующую программу:
Составьте программу сравнения строковых переменных:
Логические выражения в Python 3
Логический тип данных (или Boolean) – это примитивный тип, который принимает одно из двух возможных значений: истину (True) или ложь (False). Этот тип используется во многих языках программирования для построения алгоритмов и управления поведением программ.
Примечание: Название этого типа данных (Boolean) всегда пишется с заглавной буквы, поскольку он назван в честь математика Джорджа Буля, который занимался исследованиями математической логики. Значения True и False тоже пишутся с большой буквы – в Python они являются специальными значениями.
Данное руководство ознакомит вас с основами булевой логики в Python: операторами сравнения, логическими операторами, таблицами истинности и т.п.
Операторы сравнения
В программировании операторы сравнения используются при оценке и сравнении значений для последующего сведения их к одному логическому значению (True или False).
Операторы сравнения Python 3 представлены в этой таблице:
| Оператор | Значение |
| == | Проверяет равенство между компонентами; условие истинно, если компоненты равны. |
| != | Проверяет равенство между компонентами; условие истинно, если компоненты НЕ равны. |
| Оценивает значение левого компонента; условие истинно, если он больше, чем правый. | |
| = | Оценивает значение левого компонента; условие истинно, если он больше или равен правому компоненту. |
Попробуйте поработать с этими операторами, чтобы понять, как они действуют. Для начала создайте пару переменных:
Теперь сравните значения переменных с помощью вышеперечисленных операторов.
Следуя математической логике, Python оценивает соотношения между значениями переменных так:
Также операторы сравнения можно применять к числам с плавающей точкой и строкам.
Примечание: Строки чувствительны к регистру; чтобы отключить такое поведение, нужно использовать специальный метод.
Попробуйте сравнить две строки:
Hello = «Hello»
hello = «hello»
print(«Hello == hello: «, Hello == hello)
Hello == hello: False
Строки Hello и hello содержат одинаковый набор символов, однако они не равны, поскольку одна из них содержит символы верхнего регистра. Попробуйте добавить ещё одну переменную, которая также будет содержать символы верхнего регистра, а затем сравните их.
Hello = «Hello»
hello = «hello»
Hello_there = «Hello»
print(«Hello == hello: «, Hello == hello)
print(«Hello == Hello_there», Hello == Hello_there)
Hello == hello: False
Hello == Hello_there: True
Обратите внимание на разницу между операторами = и ==.
x = y # Оператор присваивания. Устанавливает равенство между x и y (то есть присваивает x значение y).
x == y # Оператор сравнения. Проверяет равенство между x и y и оценивает выражение как истинное или ложное. Выражение истинно, если x и y равны.
Логические операторы
Для сравнения значений используется три логических оператора, которые сводят результат к логическому значению True или False.
| Оператор | Значение |
| and | Оператор «и»: выражение истинно, если оба его компонента истинны. |
| or | Оператор «или»: выражение истинно, если хотя бы один из его компонентов истинен. |
| not | Оператор «не»: изменяет логическое значение компонента на противоположное. |
Логические операторы обычно используются для оценки двух или больше выражений. Например, их можно использовать в программе, которая проверит:
Если оба значения истинны, студент будет переведён на следующий курс.
Другой пример: программа с логическими операторами может проверять активность пользователя в онлайн-магазине:
Для примера попробуйте сравнить три выражения:
В первом случае оба выражения истинны, потому оператор and возвращает True.
Во втором случае истинно только значение 8 == 8. Поскольку хотя бы одно из предложенных условий истинно, оператор or возвращает True. Оператор and в таком случае выдал бы False.
Примечание: Если вы не понимаете, как это работает, вам помогут разобраться таблицы истинности. Эту тему мы рассмотрим далее в этом руководстве.
Логические операторы можно объединять в составные выражения:
Далее оператор not заменит полученное значение False на обратное ему логическое значение: not(False) = True. Значит, результат будет таким:
Таблицы истинности
Математическая логика – очень полезная в программировании область знаний. В данном руководстве мы ознакомимся с основными её аспектами.
Ниже представлены таблицы истинности для оператора сравнения == и всех логических операторов. Ими можно пользоваться при написании логических выражений. В таблицах перечислены общие случаи использования оператора, потому их рекомендуется выучить наизусть.
Таблица истинности оператора ==
| x | == | y | Результат |
| True | == | True | True |
| True | == | False | False |
| False | == | True | False |
| False | == | False | True |
Таблица истинности оператора AND
| x | and | y | Результат |
| True | and | True | True |
| True | and | False | False |
| False | and | True | False |
| False | and | False | False |
Таблица истинности оператора OR
| x | or | y | Результат |
| True | or | True | True |
| True | or | False | True |
| False | or | True | True |
| False | or | False | False |
Таблица истинности оператора NOT
| not | x | Результат |
| not | True | False |
| not | False | True |
Таблицы истинности – общие математические таблицы, которые используются в логике. Их полезно выучить наизусть, чтобы затем применять при построении алгоритмов и написании программ.
Использование логических операторов для управления потоком
Для управления результатом и потоками данных программы можно использовать условные операторы (condition) с выражениями (clause).
Условные операторы оценивают значение как истинное или ложное.
Выражение – это блок кода, который идёт после условного оператора и определяет результат программы.
Ниже приведён блок кода, который показывает, как объединить условные операторы для управления потоком программы Python.
if grade >= 65: # условие
print(«Passing grade») # выражение
else:
print(«Failing grade»)
Эта программа оценивает результат каждого студента и определяет, сдал он экзамен или нет. К примеру, если студент набрал 83, первое условие будет иметь значение True, и программа выведет на экран строку:
Если же студент набрал 59 баллов, первое условие будет ложно, потому программа выдаст:
Читайте также: руководство PEP 8
Заключение
Данное руководство охватывает основы работы с логическими данными Python.





