Bool python что это
Перейти к содержимому

Bool python что это

  • автор:

Логический тип данных в Python: Boolean

Логический тип данных Boolean в Python, элементы логики, логические операторы Python.

Элементы логики

В жизни мы регулярно сталкиваемся с выражениями. Например: «Робикс — это кружок робототехники». Это верное выражение, так как это общеизвестный факт. В программировании такие выражения называются истинными.

Рассмотрим другое выражение: «Робикс — это кружок рисования». Как нам известно, это неверное выражение, то есть ложное.

Логический тип данных (тип bool) имеет всего два возможных значения: True (истина) и False (ложь).

>>> a = True >>> b = False >>> a True >>> b False

В программировании ложные выражения обычно приравнивают к нулю, а True — к единице. Чтобы в этом убедиться, можно преобразовать значения переменных к целочисленному типу:

>>> int(a) 1 >>> int(b) 0

Название логического типа данных (Boolean) принято всегда писать с заглавной буквы, так как оно связано с одним из основателей математической логики Джорджа Буля. Также с заглавной буквы пишутся значения True и False.

Логические операторы

В программировании используются специальные знаки, отражающие отношение отдельных данных (объектов):

> больше
меньше
>= больше или равно
меньше или равно
== равно
!= не равно

Не путайте операцию присваивания значения переменной, обозначаемую в языке Python одиночным знаком «равно», и операцию сравнения (два знака «равно»). Присваивание и сравнение — это разные операции.

>>> a == b False >>> a < b False >>> a > b True

Теперь попытаемся сравнить строки:

>>> 'Ass' == 'Ase' False

Курсы Робикс, в которых изучается этот материал.

  1. Программирование на Python в Minecraft
  2. Duckietown робот с системой Автопилота

Python: Логический тип

Языки программирования адаптировали все математические операции сравнения в неизменном виде, кроме операторов равенства и неравенства. В математике для этого используется обычное равно = , но в программировании такое встречается редко.

Во многих языках символ = используется, чтобы присвоить переменным значения. Поэтому в Python сравнивают с помощью == .

Список операций сравнения:

Эти операции применяются не только к числам. Например, с помощью оператора равенства можно сравнить строки: password == text — это сравнение идентичности строк, которые записаны в разных переменных.

Логическая операция типа 5 > 4 или password == text — это выражение. Его результат — специальное значение True («истина») или False («ложь»). Это новый для нас тип данных — bool .

result = 5 > 4 print(result) # => True print('one' != 'one') # => False 

Наряду со строками ( str ) и целыми и рациональными числами, тип bool (булев) — это один из примитивных типов данных в Python.

Попробуем написать простую функцию, которая принимает на вход возраст ребенка и определяет, младенец ли он. Младенцами считаются дети до года:

def is_infant(age): return age < 1 print(is_infant(3)) # =>False 

Любая операция — это выражение, поэтому единственной строчкой функции пишем «вернуть то значение, которое получится в результате сравнения age < 1 ». В зависимости от того, какой аргумент пришел, сравнение будет истинным ( True ) или ложным ( False ), а return вернет этот результат.

А теперь проверим ребенка, которому полгода:

print(is_infant(0.5)) # => True 

Результат операции True . Значит, ребенок действительно младенец.

Задание

Напишите функцию is_pensioner() , которая принимает возраст в качестве единственного аргумента и проверяет, является ли этот возраст пенсионным. Пенсионным считается возраст 60 лет и больше.

is_pensioner(75) # True is_pensioner(18) # False 

Упражнение не проходит проверку — что делать? ��

Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:

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

В моей среде код работает, а здесь нет ��

Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.

Мой код отличается от решения учителя ��

Это нормально ��, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.

В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно ��

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.

Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.

Полезное

Определения

  • Логический тип (bool) — тип данных с двумя возможными значениями: True (истина) и False (ложь).

Класс bool() в Python, логическое значение объекта

Позволяет проверить/узнать логическое значение объекта

Синтаксис:
bool(object) 
Параметры:
  • object — любой объект, как строка, список, число и т. д.
Возвращаемое значение:
  • bool — логическое значение указанного объекта.
Описание:

Класс bool() возвращает логическое значение указанного объекта, True или False

Объект всегда будет возвращать False , если:

  • Объект пуст — [] , () , <>
  • Объект — False
  • Объект равен 0
  • Объект — None

На практике редко вручную пользуются переменными типа bool , которые воспроизводятся логическими проверками, потому что логические результаты автоматически используются инструкциями if . else и другими средствами выбора.

Примеры проверки объекта на его логическое значение.

x = bool(10) print(x) # Вывод True x = bool(0) print(x) # Вывод False x = bool([0]) print(x) # Вывод True x = bool([]) print(x) # Вывод False 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Функция abs(), абсолютное значение числа
  • Функция all(), все элементы True
  • Функция any(), хотя бы один элемент True
  • Функция ascii(), преобразует строку в ASCII
  • Функция bin(), число в двоичную строку
  • Класс bool(), логическое значение объекта
  • Функция breakpoint(), отладчик кода
  • Класс bytearray(), преобразует в массив байтов
  • Класс bytes(), преобразует в строку байтов
  • Функция callable(), проверяет можно ли вызвать объект
  • Функция chr(), число в символ Юникода
  • Класс classmethod, делает функцию методом класса
  • Функция compile() компилирует блок кода Python
  • Класс complex(), преобразует в комплексное число
  • Функция delattr(), удаляет атрибут объекта
  • Класс dict() создает словарь
  • Функция dir(), все атрибуты объекта
  • Функция divmod(), делит числа с остатком
  • Функция enumerate(), счетчик элементов последовательности
  • Функция eval(), выполняет строку-выражение с кодом
  • Функция exec(), выполняет блок кода
  • Функция filter(), фильтрует список по условию
  • Класс float(), преобразует в вещественное число
  • Функция format(), форматирует значение переменной
  • Класс frozenset(), преобразует в неизменяемое множество
  • Функция getattr(), значение атрибута по имени
  • Функция globals(), переменные глобальной области
  • Функция hasattr(), наличие атрибута объекта
  • Функция hash(), хэш-значение объекта
  • Функция help(), справка по любому объекту
  • Функция hex(), число в шестнадцатеричную строку
  • Функция id(), идентификатор объекта
  • Функция input(), ввод данных с клавиатуры
  • Класс int(), преобразует в тип int
  • Функция isinstance(), принадлежность экземпляра к классу
  • Функция issubclass(), проверяет наследование класса
  • Функция iter(), создает итератор
  • Функция len(), количество элементов объекта
  • Класс list(), преобразовывает в список
  • Функция locals(), переменные локальной области
  • Функция map(), обработка последовательности без цикла
  • Функция max(), максимальное значение элемента
  • Класс memoryview(), ссылка на буфер обмена
  • Функция min(), минимальное значение элемента
  • Функция next(), следующий элемент итератора
  • Класс object(), возвращает безликий объект
  • Функция oct(), число в восьмеричную строку
  • Функция open(), открывает файл на чтение/запись
  • Функция ord(), число символа Unicode
  • Функция pow(), возводит число в степень
  • Функция print(), печатает объект
  • Класс property(), метод класса как свойство
  • Класс range(), генерирует арифметические последовательности
  • Функция repr(), описание объекта
  • Функция reversed(), разворачивает последовательность
  • Функция round(), округляет число
  • Класс set(), создает или преобразовывает в множество
  • Функция setattr(), создает атрибут объекта
  • Класс slice(), шаблон среза
  • Функция sorted(), выполняет сортировку
  • Декоратор staticmethod(), метод класса в статический метод
  • Класс str(), преобразует объект в строку
  • Функция sum(), сумма последовательности
  • Функция super(), доступ к унаследованным методам
  • Класс tuple(), создает или преобразует в кортеж
  • Класс type(), возвращает тип объекта
  • Функция vars(), словарь переменных объекта
  • Функция zip(), объединить элементы в список кортежей
  • Функция __import__(), находит и импортирует модуль
  • Функция aiter(), создает асинхронный итератор
  • Функция anext(), следующий элемент асинхронного итератора

Используем объекты вместо True и False — truthy и falsy значения в Python

Рассказываем про ложные и истинные значения, что их делает таковыми и как, используя истинные значения, можно сократить код.

Автор перевода Алексей Морозов

Значения вместо булевых переменных

В Python, как и в других языках, есть логический тип переменных bool, который имеет всего два значения: True (истина) и False (ложь). Его возвращают логические операторы (например сравнение чисел или проверка присутствия элемента в списке), и именно этот тип обычно используется в if и while. Тем не менее, явно использовать bool или операторы необязательно: существуют правила, по которым значение любого типа приводится к True или False.

Прим. пер. По-английски это называется truthy и falsy, то есть «примерно-но-не-совсем-истинные», «истинноватые» значения. Общепринятого русского перевода нет, но в этой статье под истинным или ложным значением объекта всегда подразумеваются именно эти штуки, а булевы значения везде названы True и False.

Вот как это работает:

>>> a = 5 >>> if a: print(a) # Вывод 5 >>> a = 0 >>> if a: print(a) # Ничего не выводится 

Булев контекст

Любое значение в Python при необходимости может интерпретироваться как True или False в соответствии с правилами языка. Об этом написано и в документации:

Любой объект может быть протестирован на истинность и использован в условиях if и while, а также как операнд булевых операций (and, or, not).

Если объект используется таким образом, то он находится в булевом контексте. Грубо говоря, это такое место в коде, которое требует от объекта значения либо True, либо False.

В булевом контексте может использоваться как переменная, так и выражение. Если используется выражение, значит, оценивается истинность его результата.

Объекты, которые приравниваются к False

Любой объект, для которого определен метод __len__ , возвращающий для этого объекта 0, является falsy. Документация:

По умолчанию объект считается истинным, если его класс не определяет метод __bool__, возвращающий для объекта False, или метод __len__, возвращающий для него ноль.

Последовательности и коллекции

  • пустой список: [];
  • пустой кортеж: ();
  • пустой словарь: <>;
  • пустое множество: set();
  • пустая строка: “”;
  • пустой диапазон: range(0).

Нули любых численных типов

  • целочисленный ноль: 0;
  • ноль с плавающей точкой: 0.0;
  • комплексный ноль: 0j.

Константы

Объекты, которые приравниваются к True

По умолчанию любой объект имеет истинное значение.

В частности, истинными являются:

  • все непустые последовательности и коллекции (списки, кортежи, словари, множества, диапазоны и строки);
  • все ненулевые числа;
  • True.

Функция bool()

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

Возвращает булево значение, т. е. либо True, либо False. Аргумент x конвертируется с использованием стандартной процедуры проверки истинности.

>> bool(5) True >>> bool(0) False 

Передавать этой функции можно как значение, так и содержащую его переменную.

Зачем это нужно?

Преимущество истинных и ложных значений в том, что они позволяют сделать код кратким и понятным. Вот два примера:

Пример 1, с сообщением об ошибке

Допустим, у нас есть функция print_even(), которая принимает в качестве аргумента список или кортеж чисел и печатает его чётные элементы. Если список пустой, то выводится сообщение:

def print_even(data): if len(data) > 0: for value in data: if value % 2 == 0: print(value) else: print("Пустой список в аргументе") 

Обратите внимание на эту строчку:

if len(data) > 0: 

Её можно сократить до:

if data: 

Если список пустой, data имеет ложное значение. Если он не пустой (то есть его длина больше нуля), то истинное. Тот же результат достигается меньшим количеством кода:

def print_even(data): if data: for value in data: if value % 2 == 0: print(value) else: print("Пустой список в аргументе") 

Пример 2, с исключением

Можно использовать истинные/ложные значения, чтобы выбросить исключение, если аргумент некорректен.

>>> def print_even(data): if not data: raise ValueError("The argument data cannot be empty") for value in data: if value % 2 == 0: print(value) 

Если список data пустой:

  • data имеет ложное значение, эквивалентное False;
  • поэтому not data эквивалентно not False, то есть True;
  • поэтому условие if истинно;
  • поэтому бросается исключение.

Если список не пустой:

  • data имеет истинное значение, эквивалентное True;
  • поэтому not data эквивалентно not True, то есть False;
  • поэтому условие if ложно;
  • поэтому исключение не бросается.

Истинные и ложные значения произвольных объектов

Если вы хотите, чтобы у ваших объектов были не только истинные значения, можно добавить к классу метод __bool__() и задать в нём правила, по которым будет определяться истинность или ложность объекта.

Например, у нас есть вот такой класс:

>>> class Account: def __init__(self, balance): self.balance = balance 

Поскольку у него нет специальных методов, все объекты этого класса имеют истинное значение:

>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) True 

Это можно исправить, добавив __bool__():

>>> class Account: def __init__(self, balance): self.balance = balance def __bool__(self): return self.balance > 0 

Теперь объект имеет истинное значение, пока на счету больше нуля. При нулевом или отрицательном балансе значение будет ложным.

>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) False 

Если у класса нет метода __bool__(), но есть метод __len__(), то истинность объекта определяется истинностью того, что возвращает __len__().

Вот так работает механизм, позволяющий использовать любые объекты в качестве булевых. С его помощью можно сделать код проще и понятнее; важно только не забывать осмысленно называть переменные — какое-нибудь pabotat() if cnucok_2 else He_pabotat() никуда не годится что с булевским контекстом, что без него.

Следите за новыми постами по любимым темам

Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *