Разное

0 истина ложь 1: Примеры формул с логическими функциями ИСТИНА ЛОЖЬ и НЕ в Excel

Содержание

Функция ИСТИНА — Служба поддержки Office

В этой статье описаны синтаксис формулы и использование функции ИСТИНА в Microsoft Excel.


Примечание: Функция ИСТИНА предназначена в первую очередь для обеспечения совместимости с другими редакторами электронных таблиц.

Описание

Возвращает логическое значение ИСТИНА. Эту функцию можно использовать, если значение ИСТИНА должно возвращаться при выполнении условия. Пример:

=ЕСЛИ(A1=1,ИСТИНА())

Значение ИСТИНА можно также вводить в ячейки и формулы напрямую, не используя эту функцию. Пример:

=ЕСЛИ(A1=1,ИСТИНА)

Если условие выполняется, значение ИСТИНА возвращается в Excel в обоих примерах. Если условие не выполняется, в обоих примерах в Excel возвращается значение ЛОЖЬ.

Синтаксис

=ИСТИНА()

У функции ИСТИНА нет аргументов.

См. также


Функция ЕСЛИ


Создание условных формул


Логические функции (ссылка)

Типы аргументов и значений в Numbers на Mac

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

Любой тип значения

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

Массивы и функции, возвращающие массивы

Массив — это последовательность значений, используемых или возвращаемых функцией. Функция, возвращающая массив, возвращает массив значений, а не отдельное значение. Эти функции обычно используются для предоставления значений другой функции.

Булево выражение и тип значения

Логическое (булево) выражение — это выражение, результатом которого является логическое значение ИСТИНА или ЛОЖЬ. Булево (логическое) значение — это либо непосредственно логическое значение ИСТИНА (1) или ЛОЖЬ (0), либо ссылка на ячейку, которая содержит или дает в результате вычисления логическое значение ИСТИНА или ЛОЖЬ. Обычно булево значение является результатом вычисления логического выражения, однако булево значение можно также задать как непосредственный аргумент функции или содержимое ячейки. Булево значение обычно используется для определения выражения, возвращаемого функцией ЕСЛИ.

Значение множества

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

Условное выражение

Условие — это выражение, которое может включать в себя операторы сравнения, константы, оператор объединения строк (амперсанд) и ссылки. Результатом сравнения условия с другим значением должно являться логическое значение ИСТИНА или ЛОЖЬ.

Константное выражение

Константа — это выражение, которое задается непосредственно в формуле. Константа не содержит вызовов функций или ссылок. К примеру, в следующей формуле строковые выражения «кот» и «ы» являются константами:

СЦЕПИТЬ(«кот»;»ы»)

Значение даты/времени

Значение даты/времени — это значение даты/времени или ссылка на ячейку, которая содержит значение даты/времени, в любом из форматов, поддерживаемых Numbers. Можно настроить ячейку для отображения только даты или времени, однако все значения даты/времени содержат как дату, так и время.

Значение длительности

Значение длительности — это период времени или ссылка на ячейку, содержащую период времени. Значения длительности состоят из недель («н» или «нед.»), дней («д» или «дн.»), часов («ч» или «час.»), минут («м» или «мин.»), секунд («с» или «сек.») и миллисекунд («мс» или «миллисек.»)

Значение списка

Список — это последовательность других значений с разделением значений запятыми. Например:

ВЫБОР(3;»1-й»;»второй»;7;»последний»)

В некоторых случаях список заключается в дополнительную пару скобок. Например:

ОБЛАСТИ((B1:B5,C10:C12))

Значение аргумента перечислимого типа

Аргумент перечислимого типа может принимать значение только из заранее заданного ряда значений. Как правило, аргументы перечислимого типа задают тип выполняемых функцией вычислений или тип возвращаемых функцией данных. Если аргумент перечислимого типа имеет значение по умолчанию, это указывается в описании аргумента.

Числовое значение

Числовое значение — это число, числовое выражение или ссылка на ячейку, содержащую числовое выражение. Если допустимые значения числа ограничены (например, число должно быть больше 0), ограничение указывается в описании аргумента.

Значение диапазона

Значение диапазона — это ссылка на один диапазон ячеек (может быть и одной ячейкой). Значение диапазона имеет дополнительный атрибут, указываемый в описании аргумента. Это тип значений, которые должен содержать диапазон.

Значение ссылки

Значение ссылки — это ссылка на отдельную ячейку или диапазон ячеек.

  • Если диапазон содержит более одной ячейки, начальная и конечная ячейки разделяются двоеточием. Например:

    СЧЕТ(A3:D7).

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

    Таблица 2::B2.

    Обратите внимание на то, что заголовок таблицы и ссылка на ячейку разделяются двойным двоеточием (::). При выборе ячейки в другой таблице во время построения формулы имя таблицы включается в ссылку автоматически.

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

    СУММ(Слайд 2::Таблица 1::C2:G2).

    Имена объектов и ссылки на ячейки разделяются двойными двоеточиями. При выборе ячейки на другом слайде во время построения формулы имя слайда и имя таблицы включаются в ссылку автоматически.

Строковое значение

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

Сайт учителя информатики Сиреньщиковой Натальи Викторовны

 

Логика очень древняя наука. Ещё в античные времена была известна формальная логика, позволяющая делать заключения о правильности какого-либо суждения не по его фактическому содержанию, а только по форме его построения. Например, уже в древности был известен закон исключения третьего. Его содержательная трактовка была такова: «Во время своих странствований Платон был в Египте ИЛИ не был Платон в Египте». В такой форме это или любое другое выражение будут правильны (тогда говорили: истинно). Ничего другого быть не может: Платон либо был, либо не был в Египте — третьего не дано. 

Другой закон логики — закон непротиворечивости. Если сказать: «Во время своих странствий Платон был в Египте  И  не был Платон в Египте», то очевидно, любое высказывание, имеющее такую форму, всегда будет ложно. Если из теории следуют два противоречащих друг другу вывода, то такая теория безусловно неправильная (ложная) и должна быть отвергнута. 

Ещё один закон, известный в древности — закон отрицания: «Если НЕ верно, что Платон НЕ был в Египте, то значит, Платон был  в Египте». 

Формальная логика основана на “высказываниях”. “Высказывание” — это основной элемент логики, определяемый как повествовательное предложение, относительно которого можно однозначно сказать, истинно оно или ложно. 

В 1847 году английский математик Джордж Буль, преподаватель провинциального университета в маленьком городке Корке на юге Англии разработал алгебру логики

 Простые высказывания стали логическими переменными, которые могли иметь значения либо 1 (истина), либо 0 (ложь). Сложные высказывания – логическими выражениями.

Описание проектной задачи

 

КАК СПРАВИТЬСЯ С ЗАДАНИЕМ? 

1. Разбейтесь на группы по 4 человека, придумайте название команды и зарегистрируйтесь.

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

3. Решите задания, чтобы сформировать пароли для архивов заданий:

— разработчик интерактивного модуля формальной логики;

— разработчик интерактивного модуля алгебры логики;

— сценарист интерактивного модуля формальной логики;

— сценарист интерактивного модуля алгебры логики.

4. Ознакомьтесь с особенностями своего задания (пароль вам уже известен).

— разработчик интерактивного модуля формальной логики;

— разработчик интерактивного модуля алгебры логики;

— сценарист интерактивного модуля формальной логики;

— сценарист интерактивного модуля алгебры логики.

5. Представьте итог работы своей команды — 2 интерактивных модуля по темам: «Формальная логика» и «Алгебра логики».

 

Примеры интерактивных модулей

 

Классификация «Расширения файлов»

Кроссворд  «Системы счисления»

Игра «Кто хочет стать миллионером»

 

 

 

ЗАДАНИЕ ДЛЯ разработчика интерактивного модуля

 

Познакомьтесь с сервисом создания интерактивных модулей, зарегистрируйтесь на данном сервисе, изучите его возможности. После разработки сценария — создайте интерактивный модуль.

 

 

ЗАДАНИЕ ДЛЯ сценариста интерактивного модуля

 

Составьте сценарий (вопросы и ответы) для интерактивного модуля.

 

 

РЕФЛЕКСИЯ

 

Обсуждение хода выполнения проектной задачи  будет проводится на Форуме в теме «Проектная задача  «Истина и ложь»

 

РЕЗУЛЬТАТ ПРОЕКТНОЙ ЗАДАЧИ

 

1. Ссылки на интерактивный модуль в сети Интернет.

2. Самооценка (рефлексия) на форуме в теме «Проектная задача «Истина и ложь»

 

Состав  команд 

 

 

ИТОГИ

 

 

 

 

Небольшая хитрость касаемая логических формул — Формулы рабочего листа — Excel — Каталог статей

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

Часто в свои файлы Excel приходится вживлять множество формул, которые могут принимать 2 значения, противоположных друг другу. Например, мне часто требуется иметь набор ячеек для столбцов/строк, которые бы хранили статус их (строк/столбцов) видимости. Скажем, если A5 (люблю под это выделять первый столбец) содержит 1, то строка 5:5 должна быть видна и, если VBA программа обнаружит, что строка скрыта, то она сделает её видимой, и — наоборот.

Для таких вещей в Excel есть логический (булевый) тип, который состоит из двух констант: ИСТИНА (TRUE) и ЛОЖЬ (FALSE). Существуют также логические выражения, которые возвращают логический тип, как результат своего вычисления. Возвращаясь к примеру про видимость строки 5:5, в A5 могла бы находиться такая формула:

  = D5 «»

при этом, если D5 не пуста, то она вернёт значение ИСТИНА, в противном случае ЛОЖЬ.

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

  = ЕСЛИ( D5 «» ; 1 ; 0 )

Однако, мне в последнее время нравится такой способ:

  = ( D5 «» ) + 0

Данный метод имеет более лаконичную форму и, полагаю, чуть быстрее вычисляется. Обратите внимание, что скобки тут необходимы, в противном случае порядок вычислений будет нарушен. Excel в начале вычисляет логическое выражение в скобках, а затем вынуждено его преобразовать в число, так как завершающая операция — операция сложения. Как известно значение ИСТИНА преобразуется в 1, а ЛОЖЬ — в 0, поэтому прибавление нуля тут ничего изменить не может (впрочем как и умножение на 1, возведение в степень 1, вычитание 0, деление на 1).

Кстати, то обстоятельство, что у меня в A5 теперь числа (0 или 1), а не логические константы (ЛОЖЬ или ИСТИНА), никак не повлияет на возможность использования ячейки A5 в логических операторах. Точно так же будут отлично работать такие формулы:

   = ЕСЛИ( A5 ; «Видима» ; «Скрыта» )

или

   = И( A5 ; A1 > 0 )

Это происходит, так как 1 преобразуется в ИСТИНА, а 0 — в ЛОЖЬ. На самом деле в ИСТИНА будет преобразовано ЛЮБОЕ ЧИСЛОВОЕ значение, отличное от нуля. Любое!

Кстати последнюю формулу так же очень удобно переводить в числовую форму:

   = И( A5 ; A1 > 0 ) + 0

и дополнительных скобок уже не потребуется, достаточно тех, что уже есть у оператора И (AND).

Вот такая небольшая хитрость 🙂

Читайте также:

Центр детского (юношеского) технического творчества

Эта галерея содержит 1 фотографию.

В соответствии с приказом Управления по делам образования администрации Кыштымского городского округа от 27.01.2020 № 01-024 ОД прошел конкурс профессионального мастерства среди молодых педагогов «Лучшее учебное занятие». В конкурсе приняла участие педагог дополнительного образования МОУ ДО ЦД(Ю)ТТ Маслякова надежда Николаевна, … Читать далее →

Рубрика: Без рубрики, Информация, Мероприятия, Наши мероприятия, Образовательный технопарк

Эта галерея содержит 1 фотографию.

26 марта 2021 г. в рамках сотрудничества с Благотворительным фондом «Милосердие 74″ для ребят из кыштымского Центра помощи детям, оставшимся без попечения родителей, «Горизонт» проведен профориентационный квест «Выбираем профессию». Ребята прошли 4 станции, на каждой из которых не просто знакомились … Читать далее →

Рубрика: Информация, Лего, Мероприятия, Наши мероприятия, Образовательный технопарк

Эта галерея содержит 1 фотографию.

19 марта 2021 г. на базе МОУ ДО ЦД(Ю)ТТ состоялся областной семинар педагогов дополнительного образования «Современные прикладные техники моделирования». В семинаре приняли участие 30 педагогов дополнительного образования МОУ ДО ЦД(Ю)ТТ, МУ ДО ДДТ, МОУ ДО СДиЮТиЭ(ЮТ) «Странник» ( г. Кыштым), МКОУ … Читать далее →

Рубрика: Без рубрики, Информация, Мероприятия, Наши мероприятия, Образовательный технопарк

Ежегодно 15 марта отмечается Всемирный день защиты прав потребителей. В 2021 году Международная Федерация потребительских организаций (Consumers International — CI) объявила, что девизом Всемирного дня потребителей станет «Борьба с загрязнением пластиковыми материалами». Согласно отчету  Pew Charitable Trusts & SISTEMIQ «Преодолевая пластиковую волну», выпущенного в августе 2020 года, … Читать далее →

Рубрика: Без рубрики

В период с 18.01.2021 по 20.02.2021 г. был проведён городской конкурс по информационным технологиям «Крутой User-2021». Конкурс проводился с целью проверки теоретических и практических знаний по предмету «Информатика и ИТ» через выполнение заданий, выложенных в сети Интернет. В конкурсе приняли … Читать далее →

Рубрика: Без рубрики, Образовательный технопарк

 

Летний лагерь МОУ ДО ЦД(Ю)ТТ приглашает ребят с 03.06.2021-23.06.2021 года к нам в отряды:

Отряд «Мультипликаторы». Возраст: детей 6 по 9 класс. Мультики любят все. И взрослые, и дети. Наша проектная смена летнего лагеря — 2021 позволит посмотреть изнутри на то, как рождаются мультфильмы. Занятия в будут проходить по авторской программе, разработанной педагогами МОУ ДО ЦД(Ю)ТТ, эти занятия превратят наш отряд в настоящую мультипликационную студию.

 Отряд «ЛегоРоботы». Возраст детей: 2 по 4 класс. Во время работы дети соберут космических модели из лего конструкторов, запрограммируют их на свершение космических миссий и добрых дел.

 Отряд «Волонтеры» Возраст детей: с 14 лет и старше. Предлагаем детям поучаствовать в акции волонтерской мастерской, где   сошьют несколько комплектов больничной одежды для Кыштымской городской больницы. Дети научатся шить на современном оборудовании, заработают дополнительные баллы для поступления и сделают несколько человек более счастливыми. Кроме этого они овладеют навыками создания авторской машинной вышивки.

 Отряд «Космические малыши». Возраст детей:  6-8 лет. Детей ждут творческие занятия в мастерских Центра, игра на свежем воздухе.

Ссылка для записи в ллагерь МОУ ДО ЦД(Ю)ТТ: https://forms.gle/xjzuqqMXWad4BFjx9

Рубрика: Без рубрики

Эта галерея содержит 1 фотографию.

Все ближе первый весенний праздник-8 марта. Наши дошколята на занятии «Радужка» с удовольствием потрудились и приготовили мамам и бабушкам открытки и подарочки. Клеили и складывали бабочек, как символ приближающегося тепла и обновлений.

Рубрика: Без рубрики

Оргкомитет программы «Шаг в будущее   » Южно-Уральский Головной координационный центр НТТМ «Шаг в будущее…» Поздравляет с наступающим  Международным женским днём * Марта! Дорогие, милые дамы, самые очаровательные и непредсказуемые создания, поздравляем вас с Международным женским днём! Желаем вам чудесных дней, … Читать далее →

Рубрика: Без рубрики

26 февраля прошло 1 региональное соревнование «Инженерные кадры России». Мы участвовали в номинации «Защита проекта» и стали лауреатами 3 степени. Команда (Пригородов Илья, Григорьев Алексей, Веселов Илья) под руководством Тузовой Е. В. подготовили видео защиту проекта «Плавильный цех» Кыштымского медеэлектролитного … Читать далее →

Рубрика: Информация, Образовательный технопарк

В соответствии с планом Управления по делам образования администрации Кыштымского городского округа на 2020-2021учебный год, на основании положения МОУ ДО ЦД(Ю)ТТ 12.02.2021г. проведен городской конкурс «I love English» для обучающихся 3 классов. Конкурс проводился с целью: — развития  интереса к … Читать далее →

Рубрика: Наши мероприятия

Почему 0 истинно, а ложь 1 в оболочке?

Здесь есть две связанные проблемы.

Во-первых, вопрос OP: почему 0 истинно, а ложь 1 в оболочке? и второй: почему приложения возвращают 0 в случае успеха и ненулевое значение в случае неудачи?

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

Почему приложения возвращают 0 в случае успеха и ненулевое значение в случае неудачи?

Код, который вызывает операцию, должен знать две вещи о статусе завершения операции. Операция завершилась успешно? [* 1] А если операция не завершилась успешно, почему операция завершилась неудачно? Для обозначения успеха можно использовать любое значение. Но 0 удобнее любого другого числа, потому что он переносится между платформами. Обобщая ответ xibo на этот вопрос 16 августа 2011 года:

Ноль не зависит от кодировки.

Если бы мы хотели сохранить единицу (1) в 32-битном целочисленном слове, первым вопросом было бы «слово с прямым порядком байтов или слово с прямым порядком байтов?», За которым следовало бы «какова длина байтов, составляющих слово с прямым порядком байтов?». «, а ноль всегда будет выглядеть одинаково.

Также следует ожидать, что в какой-то момент некоторые люди приведут errno к char, short или даже к float. (int) ((char) ENOLCK) не является ENOLCK, если длина char не превышает 8 бит (машины с 7-битными символами ASCII поддерживаются UNIX), а (int) ((char) 0) равно 0 независимо от архитектурные детали чар.

Как только будет определено, что 0 будет возвращаемым значением для успеха, тогда имеет смысл использовать любое ненулевое значение для неудачи. Это позволяет множеству кодов выхода ответить на вопрос, почему операция не удалась.

Почему 0 истинно, а ложь 1 в оболочке?

Одно из основных применений оболочек — автоматизация процессов путем их написания сценариев. Обычно это означает вызов операции, а затем выполнение чего-то еще, условно в зависимости от статуса завершения операции. Филипп А. хорошо объяснил в своем ответе на этот пост, что

В bash и в оболочках unix в целом возвращаемые значения не являются логическими. Это целые коды выхода.

Затем необходимо интерпретировать статус завершения этих операций как логическое значение. Имеет смысл сопоставить 0статус выхода успешный ( ) с истиной, а любой ненулевой / неудачный статус выхода — с ложью. Это позволяет условно выполнять связанные команды оболочки.

Вот пример mkdir deleteme && cd $_ && pwd. Поскольку оболочка интерпретирует 0 как истину, эта команда работает должным образом. Если бы оболочка интерпретировала 0 как ложь, вам пришлось бы инвертировать интерпретируемый статус выхода для каждой операции.

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


[* 1]: Да, во многих случаях операции должны возвращать нечто большее, чем просто сообщение об успешном выполнении, но это выходит за рамки этой темы.

См. Также Приложение E в Advanced Bash-Scripting Guide

Что есть истина и ложь в Perl

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

Любое значение Perl может интерпретировать как булево значение. Например, строка 'Hello' — это истина.
Следующий код отобразит на экране строку 'true':

▶ Run



if ('Hello') {
    print 'true';
} else {
    print 'false';
}

Какие значения являются ложью

В языке программирования Perl есть 5 значений, которые являются ложью. Это:

  • undef
  • 0 — число 0
  • 0.0 — число 0. 0
  • '' — пустая строка
  • '0' — строка 0

Вот пример кода, который показывает что все эти значения интерпретируются Perl как ложь.
Код выведет на экран 5 раз слово 'false':

▶ Run



foreach my $val (undef, 0, 0.0, '', '0') {
    if ($val) {
        print "true\n";
    } else {
        print "false\n";
    }
}

Какие значения являются истиной

Истиной являются все значения, кроме тех 5, которые являются ложью.

Правило

Для того чтобы запомнить что является false можно использовать правило:
«Все что 0 — это false, кроме ‘0 but true’ строк».

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

▶ Run



foreach my $val (undef, 0, 0.0, '', '0') {
    print $val + 0, "\n";
}

Правда, если использовать use strict; и use warnings; (что практически всегда стоит делать),
то в случае undef и пустой строки Perl покажет предупреждения.

Вот код и результат его работы в случае undef:

▶ Run



use strict;
use warnings;

my $var = undef;

print $var + 0;
Use of uninitialized value $var in addition (+) at script.pl line 8.
0

А вот код и его результат в случае пустой строки:

▶ Run



use strict;
use warnings;

my $var = '';

print $var + 0;
Argument "" isn't numeric in addition (+) at script.pl line 8.
0

0 but true

В Perl существуют такие значения, которые в булевом контексте являются true, но при использовании в
качестве числа превращаются в число ноль. Все такие значения — это строки.

Например, строка '0ASDF' — это как раз пример такого значения. При использовании как логическое значение
эта строка будет интерпретирована как истина. Действительно, есть только 2 строки, которые являются ложью —
пустая строка и строка в которой содержится только один символ — число ноль, строка '0ASDF' не является
ни одной из этих двух строк, поэтому она не ложь, а истина.

Вот код, который показывает что строка '0ASDF' является истиной (код выведет на экран строку 'true'):

▶ Run



if ('0ASDF') {
    print 'true';
} else {
    print 'false';
}

При этом если эту же строку '0ASDF' использовать как число, то она будет интерпретирована как число 0
(правда, при включенных use strict;, use warnings; будет предупреждение):

▶ Run



use strict;
use warnings;

my $var = '0ASDF';

print $var + 0;
Argument "0ASDF" isn't numeric in addition (+) at script.pl line 8.
0

Самое известное использование 0 but true значений происходит в Perl библиотеке DBI, там используется строка '0E0'.

Массив, Хеш, Ссылка

Массив является истиной если в нем есть хотя бы одно значение. Если же в массиве нет ни одного значения, то
массив является ложью.

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

Ссылка — это всегда истина, не важно на что она ссылается. Даже ссылка на пустой массив [] или пустой хеш {}
является истиной.

Один и пустая строка

Чаще всего для того чтобы написать в коде истину используется число один, а для того чтобы написать ложь используется
число ноль.

Интересно, что сам Perl считает что каноническое значение для обозначения лжи это не число 0, а пустая строка ''.

Вот пример, который это показывает. Мы взяли строку 'Hello', которая является истиной и с помощью унарного оператор ! превратили ее в ложь:

▶ Run



use Data::Dumper;

print Dumper !'Hello';

Результат — на экране появился текст $VAR1 = '';

Если же использовать оператор ! два раза, то мы получим каноническое значение для истины с точки зрения Perl:

▶ Run



use Data::Dumper;

print Dumper !!'Hello';

(на экране появится текст $VAR1 = 1;).

Проблема читаемости

Чаще всего для того чтобы написать в коде истину используется число один, а для того чтобы написать ложь используется
число ноль. Но, к сожалению, из этих чисел совершенно не ясно что это означает — число (и там могут быть другие числа),
или же это флаг означающий истину.

Вот пример. Тут 1 для workers означает что нужно использовать один воркер (можно заменить на 10). А единица
у log означает что логирование включено (и можно заменить только на 0, чтобы выключить):

my $config = {
    workers => 1,
    log => 1,
};

Другие статьи

Оптимизируйте свой код с помощью истинных значений — настоящий Python

Логический тип Python является одним из встроенных типов данных Python. Он используется для представления истинности выражения. Например, выражение 1 <= 2 равно True , а выражение 0 == 1 равно False . Понимание того, как ведут себя логические значения Python, важно для хорошего программирования на Python.

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

Логический тип Python имеет только два возможных значения:

  1. Верно
  2. Ложь

Никакое другое значение не будет иметь тип bool .Вы можете проверить тип True и False с помощью встроенного типа () :

>>>

  >>> тип (Ложь)
<класс 'bool'>
>>> тип (Истина)
<класс 'bool'>
  

Тип () для False и True - это bool .

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

>>>

  >>> bool
<класс 'bool'>
>>> bool = "это не тип"
>>> булево
"это не тип"
  

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

Логические значения Python как ключевые слова

Встроенные имена не являются ключевыми словами. Что касается языка Python, это обычные переменные.Если вы назначите им, вы переопределите встроенное значение.

Напротив, имена True и False - это , а не встроенные. Это ключевых слов . В отличие от многих других ключевых слов Python, True и False - это выражения Python . Поскольку они являются выражениями, их можно использовать везде, где можно использовать другие выражения, например 1 + 1 .

Можно присвоить переменным логическое значение, но нельзя присвоить значение True :

>>>

  >>> a_true_alias = Истина
>>> a_true_alias
Правда
>>> Верно = 5
  Файл "", строка 1
SyntaxError: невозможно присвоить значение True
  

Поскольку True - ключевое слово, вы не можете присвоить ему значение.То же правило применяется к Ложь :

>>>

  >>> Ложь = 5
  Файл "", строка 1
SyntaxError: невозможно присвоить значение False
  

Вы не можете присвоить False , потому что это ключевое слово в Python. Таким образом, True и False ведут себя как другие числовые константы. Например, вы можете передать 1,5 функциям или присвоить его переменным. Однако присвоить значение 1,5 невозможно.Утверждение 1,5 = 5 недопустимо для Python. И 1,5 = 5 , и False = 5 являются недопустимым кодом Python и при синтаксическом анализе вызовут SyntaxError .

Логические значения Python в виде чисел

Логические значения считаются в Python числовым типом . Это означает, что это цифры во всех смыслах. Другими словами, вы можете применять арифметические операции к логическим значениям, а также сравнивать их с числами:

>>>

  >>> Верно == 1
Правда
>>> Ложь == 0
Правда
>>> Верно + (Ложь / Верно)
1.0
  

Числовой характер булевых значений не так уж и много применений, но есть один прием, который может оказаться полезным. Поскольку True равно 1 , а False равно 0 , сложение логических значений - это быстрый способ подсчета количества True значений. Это может пригодиться, когда вам нужно подсчитать количество элементов, удовлетворяющих условию.

Например, если вы хотите проанализировать стих в классическом детском стихотворении, чтобы увидеть, какая часть строк содержит слово «the» , то тот факт, что True равен 1 , а False равен на номер 0 может пригодиться:

>>>

  >>> lines = "" "\
... Он взял свой телесный меч в руку;
... Давно мужественный враг, которого он искал -
... Так отдыхал он у дерева тамтум
... И постоял некоторое время в раздумьях.
... "" ".splitlines ()
>>> sum ("the" в line.lower () для строки в строках) / len (строк)
0,5
  

Суммирование всех значений в таком выражении генератора позволяет узнать, сколько раз True появляется в генераторе. Число раз True в генераторе равно количеству строк, содержащих слово "the" без учета регистра.Разделив это число на общее количество строк, вы получите отношение совпадающих строк к общему количеству строк.

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

>>>

  >>> lines = "" "\
... Он взял свой телесный меч в руку;
... Давно мужественный враг, которого он искал -
... Так отдыхал он у дерева тамтум
... И постоял некоторое время в раздумьях.
... "" "
>>> line_list = lines.splitlines ()
>>> "the" в line_list [0]
Ложь
>>> "the" в line_list [1]
Правда
>>> 0 + False + True # Эквивалентно 0 + 0 + 1
1
>>> ["the" в строке для строки в line_list]
[Ложь, Верно, Верно, Ложь]
>>> Ложь + Истина + Истина + Ложь
2
>>> len (список_строк)
4
>>> 2/4
0.5
  

Переменная line_list содержит список строк. В первой строке нет слова "the" , поэтому "the" в line_list [0] равно False . Во второй строке "the" действительно появляется, поэтому "the" в line_list [1] равно True . Поскольку логические значения являются числами, вы можете добавлять их к числам, а 0 + False + True дает 1 .

Поскольку ["the" в строке для строки в line_list] - это список из четырех логических значений, вы можете сложить их вместе.Когда вы добавляете False + True + True + False , вы получаете 2 . Теперь, если вы разделите этот результат на 4 , длину списка, вы получите 0,5 . Слово «the» появляется в половине строк выделения. Это полезный способ воспользоваться тем фактом, что логические значения являются числами.

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

Логические операторы - это операторы, которые принимают логических входов и возвращают логических результатов .

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

Поскольку логические значения Python имеют только два возможных варианта: True или False , можно полностью указать операторы с точки зрения результатов, которые они присваивают каждой возможной комбинации ввода. Эти спецификации называются таблицами истинности , поскольку они отображаются в виде таблицы.

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

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

Операторы без ввода

Вы можете думать о True и False как о логических операторах, которые не принимают никаких входных данных. Один из этих операторов всегда возвращает True , а другой всегда возвращает False .

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

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

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

, а не

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

А не A
Истинно Ложь
Ложь Истинно

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

>>>

  >>> не Верно
Ложь
>>> не Ложь
Правда
>>> def print_and_true ():
... print ("Мне позвонили")
... вернуть True
...
>>> не print_and_true ()
Мне позвонили
Ложь
  

Последняя строка показывает, что , а не , оценивает свой ввод перед возвратом False .

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

А не A Личность Есть
Истинно Ложь Истинно Истинно Ложь
Ложь Истинно Ложь Истинно Ложь

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

  • Identity : Поскольку этот оператор просто возвращает введенные данные, вы можете просто удалить его из своего кода без каких-либо последствий.

  • Да : это оператор короткого замыкания, поскольку он не зависит от своего аргумента. Вы можете просто заменить его на True и получить тот же результат.

  • : это еще один оператор короткого замыкания, поскольку он не зависит от своего аргумента. Вы можете просто заменить его на False и получить тот же результат.

Ни один из других возможных операторов с одним аргументом не будет полезен.

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

и

Оператор и принимает два аргумента. Он оценивается как False , если оба входа не равны True .Вы можете определить поведение и с помощью следующей таблицы истинности:

А Б A и B
Истинно Истинно Истинно
Ложь Истинно Ложь
Истинно Ложь Ложь
Ложь Ложь Ложь

Это подробная таблица.Однако он демонстрирует то же поведение, что и описание выше. Если A равно False , то значение B не имеет значения. Из-за этого происходит короткое замыкание и , если на первом входе Ложь . Другими словами, если первый вход - Ложь , то второй вход не оценивается.

В следующем коде есть второй вход, который имеет побочный эффект, печать, чтобы предоставить конкретный пример:

>>>

  >>> def print_and_return (x):
... print (f "Я возвращаюсь {x}")
. .. вернуть x
...
>>> Истина и print_and_return (Истина)
Я возвращаюсь к истине
Правда
>>> Истина и print_and_return (Ложь)
Я возвращаю ложь
Ложь
>>> Ложь и print_and_return (Истина)
Ложь
>>> Ложь и print_and_return (Ложь)
Ложь
  

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

Одним из примеров, в котором такое поведение может иметь решающее значение, является код, который может вызывать исключения:

>>>

  >>> def inverse_and_true (n):
... 1 // п
... вернуть True
...
>>> inverse_and_true (5)
Правда
>>> inverse_and_true (0)
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
  Файл "", строка 2, inverse_and_true
ZeroDivisionError: целочисленное деление или по модулю нуля
>>> False и inverse_and_true (0)
Ложь
  

Функция inverse_and_true () , по общему признанию, глупая, и многие линтеры предупреждали бы о бесполезности выражения 1 // n .Он действительно служит цели аккуратного сбоя при задании 0 в качестве параметра, поскольку деление на 0 недопустимо. Однако последняя строка не вызывает исключения. Из-за оценки короткого замыкания функция не вызывается, деление на 0 не происходит, и исключение не возникает.

Напротив, True и inverse_and_true (0) вызовут исключение. В этом случае значение второго входа потребуется для результата и .После оценки второго входа будет вызвано inverse_and_true (0) , оно разделится на 0 , и возникнет исключение.

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

или

Значение оператора или - Истинно , если оба его входа не равны Ложь . Оператор или также может быть определен следующей таблицей истинности:

А Б A или B
Истинно Истинно Истинно
Ложь Истинно Истинно
Истинно Ложь Истинно
Ложь Ложь Ложь

Эта таблица многословна, но имеет то же значение, что и объяснение выше.

При неформальном использовании слово или может иметь одно из двух значений:

  • Эксклюзивный номер или - это то, как или используются во фразе «Вы можете подать заявление о продлении срока или сдать домашнее задание вовремя». В этом случае вы не можете одновременно подать заявку на продление и сдать домашнее задание вовремя.

  • , включая или иногда указывается с помощью соединения и / или .Например, «Если вы хорошо справитесь с этой задачей, то вы можете получить повышение и / или повышение» означает, что вы можете получить и повышение, и повышение.

Когда Python интерпретирует ключевое слово или , он делает это с использованием включающего или . Если оба входа равны True , то результат или будет True .

Поскольку он использует включающие или , оператор или в Python также использует оценку короткого замыкания.Если первый аргумент - True , то результатом будет True , и нет необходимости оценивать второй аргумент. Следующие примеры демонстрируют оценку короткого замыкания или :

>>>

  >>> def print_and_true ():
. .. print ("print_and_true вызвано")
... вернуть True
...
>>> Истина или print_and_true ()
Правда
>>> Ложь или print_and_true ()
print_and_true называется
Правда
  

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

Другие логические операторы

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

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

Существует шестнадцать возможных логических операторов с двумя входами. За исключением и и или , они редко используются на практике.Из-за этого True , False , , а не , и , а также или являются единственными встроенными логическими операторами Python.

Операторы сравнения

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

Операторы сравнения - наиболее распространенный источник логических значений.

Равенство и неравенство

Наиболее распространенными операторами сравнения являются оператор равенства ( == ) и оператор неравенства (! = ) . Почти невозможно написать сколько-нибудь значимое количество кода Python без использования хотя бы одного из этих операторов.

Оператор равенства ( == ) - один из наиболее часто используемых операторов в коде Python. Вам часто нужно сравнить либо неизвестный результат с известным результатом, либо два неизвестных результата друг с другом.Некоторые функции возвращают значения, которые необходимо сравнить с контрольным показателем, чтобы увидеть, было ли обнаружено какое-либо пограничное состояние. Иногда вам нужно сравнить результаты двух функций друг с другом.

Оператор равенства часто используется для сравнения чисел:

>>>

  >>> 1 == 1
Правда
>>> 1 == 1.0
Правда
>>> 1 == 2
Ложь
  

Возможно, вы уже использовали операторы равенства. Это одни из самых распространенных операторов в Python.Для всех встроенных объектов Python и для большинства сторонних классов они возвращают логическое значение : True или False .

Примечание. Язык Python не требует, чтобы значения == и ! = возвращали логические значения. Такие библиотеки, как NumPy и pandas, возвращают другие значения.

Вторым по популярности после оператора равенства является оператор неравенства (! = ). Он возвращает True , если аргументы не равны, и False , если они равны.Примеры также разнообразны. Многие модульные тесты проверяют, не совпадает ли значение с конкретным недопустимым значением. Веб-клиент может проверить, что код ошибки не 404 Not Found , прежде чем попробовать альтернативный вариант.

Вот два примера использования оператора неравенства Python:

>>>

  >>> 1! = 2
Правда
>>> 1! = (1 + 0,0)
Ложь
  

Возможно, самое удивительное в операторе неравенства Python - это то, что он вообще существует.В конце концов, вы можете достичь того же результата, что и 1! = 2 с not (1 == 2) . Python обычно избегает лишнего синтаксиса, и особенно дополнительных основных операторов, для вещей, легко достижимых другими способами.

Однако неравенство используется настолько часто, что было сочтено целесообразным иметь для этого специального оператора. В старых версиях Python, в серии 1.x , на самом деле было , два разных синтаксиса.

Как первоапрельская шутка, Python по-прежнему поддерживает альтернативный синтаксис неравенства с правильным __future__ import:

>>>

  >>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
Правда
  

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

Сравнение заказов

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

  • Направление : меньше или больше?
  • Строгость : Разрешено равенство или нет?

Поскольку два варианта независимы, вы получаете 2 * 2 == 4 операторов сравнения порядков.Все четыре перечислены в этой таблице:

Менее Больше
Строгий < >
Не строго <= > =

Есть два варианта направления и два варианта строгости. В результате получается четыре оператора сравнения порядков.

Операторы сравнения порядков определены не для всех объектов. Некоторые объекты не имеют значимого порядка. Несмотря на то, что списки и кортежи упорядочены лексикографически , словари не имеют значимого порядка:

>>>

  >>> {1: 3} <{2: 4}
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
TypeError: '<' не поддерживается между экземплярами 'dict' и 'dict'
  

Непонятно, как следует упорядочивать словари.Согласно Дзен Python, несмотря на двусмысленность, Python отказывается гадать.

Хотя строки и целые числа заказываются отдельно, сравнения типов не поддерживаются:

>>>

  >>> 1 <= "1"
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
TypeError: '<=' не поддерживается между экземплярами 'int' и 'str'
  

Опять же, поскольку нет очевидного способа определить порядок, Python отказывается их сравнивать.Это похоже на оператор сложения ( + ). Хотя вы можете добавлять строки к строкам и целые числа к целым числам, добавление строк к целым числам вызывает исключение.

Когда операторы сравнения порядка определены , обычно они возвращают логическое значение.

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

Например, операторы сравнения между массивами NumPy или пандами DataFrames возвращают массивы и DataFrames. Вы узнаете больше о взаимодействии значений NumPy и Boolean позже в этом руководстве.

Сравнение чисел в Python - это распространенный способ проверки граничных условий. Обратите внимание, что < не допускает равенства, а <= допускает:

>>>

  >>> 1 <= 1
Правда
>>> 1 <1
Ложь
>>> 2> 3
Ложь
>>> 2> = 2
Правда
  

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

- это Оператор

Оператор is проверяет идентичность объекта . Другими словами, x is y оценивается как True только тогда, когда x и y оцениваются для одного и того же объекта. Оператор - это , у оператора - не .

Типичное использование - это , а - не - это сравнение списков для идентификации:

>>>

  >>> x = []
>>> y = []
>>> х это х
Правда
>>> х не х
Ложь
>>> x есть y
Ложь
>>> x не y
Правда
  

Хотя x == y , это не один и тот же объект.Оператор is not всегда возвращает противоположность - . Нет никакой разницы между выражением x is not y и выражением not (x is y) , за исключением удобочитаемости.

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

в Оператор

Оператор в проверяет членство .Объект может определять, что он считает членами. Большинство последовательностей, таких как списки, считают свои элементы членами:

>>>

  >>> small_even = [2, 4]
>>> 1 в small_even
Ложь
>>> 2 в small_even
Правда
>>> 10 в small_even
Ложь
  

Поскольку 2 является элементом списка, 2 в small_even возвращает True . Поскольку 1 и 10 отсутствуют в списке, другие выражения возвращают False .Во всех случаях оператор в возвращает логическое значение.

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

.
>>>

  >>> "е" в "привет, прекрасный мир"
Правда
>>> "х" в "привет, прекрасный мир"
Ложь
  

Поскольку «e» является вторым элементом строки, первый пример возвращает True .Поскольку x не отображается в строке, второй пример возвращает False . Однако, наряду с отдельными символами, подстроки также считаются членами строки:

>>>

  >>> "красиво" в "привет, прекрасный мир"
Правда
>>> "красавица" в "привет, прекрасный мир"
Ложь
  

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

Подобно операторам - и == , в операторе также имеет противоположность, не в . Вы можете использовать не в , чтобы подтвердить, что элемент не является членом объекта.

Объединение операторов сравнения

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

Выражение 1 <2 <3 представляет собой цепочку операторов сравнения.В нем есть выражения, разделенные операторами сравнения. Результатом будет True , потому что обе части цепочки - True . Вы можете разорвать цепочку, чтобы увидеть, как она работает:

>>>

  >>> 1 <2 и 2 <3
Правда
  

Так как 1 <2 возвращает True и 2 <3 возвращает True , и возвращает True . Цепочка сравнения эквивалентна использованию и на всех ее звеньях.В этом случае, поскольку True и True возвращает True , результатом всей цепочки будет True . Это означает, что если какое-либо из звеньев - False , то вся цепочка будет False :

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

>>>

  >>> 1 <3 и 3 <2
Ложь
  

В этом случае части цепочки вычисляют следующие логические значения:

  • 1 <3 это Верно
  • 3 <2 это Ложь

Это означает, что один из результатов - True , а другой - False . Поскольку True и False равно False , значение всей цепочки равно False .

Вы можете смешивать типы и операции в цепочке сравнения до тех пор, пока типы можно сравнивать:

>>>

  >>> 1 <2 <1
Ложь
>>> 1 == 1.0 <0.5
Ложь
>>> 1 == 1.0 == Верно
Правда
>>> 1 <3> 2
Правда
>>> 1 <2 <3 <4 <5
Правда
  

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

  1. внутренний
  2. с плавающей запятой
  3. булев

Это три разных числовых типа, но вы можете без проблем сравнивать объекты разных числовых типов.

Оценка короткого замыкания цепи

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

>>>

  >>> 2 <"2"
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
TypeError: '<' не поддерживается между экземплярами 'int' и 'str'
>>> 3 <2 <"2"
Ложь
  

Несмотря на то, что Python не может сравнивать целые числа и строковые числа с порядком сравнения, 3 <2 <"2" оценивается как Ложно , потому что не оценивает второе сравнение.В этом случае оценка короткого замыкания предотвращает другой побочный эффект: создание исключения.

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

>>>

  >>> 3 <2 <(1 // 0)
Ложь
  

Разделение 1 на 0 привело бы к возникновению ZeroDivisionError . Однако из-за оценки короткого замыкания Python не оценивает недопустимое деление. Это означает, что Python пропускает оценку не только сравнения, но и входных данных для сравнения.

Еще один аспект, который важно понимать в отношении цепочек сравнения, заключается в том, что когда Python выполняет оценку элемента в цепочке, он оценивает его только один раз:

>>>

  >>> def foo ():
... print ("Я фу")
... вернуть 1
...
>>> 0 >> (0  

Поскольку средние элементы оцениваются только один раз, не всегда безопасно выполнить рефакторинг x до (x .Хотя цепочка ведет себя как и при оценке короткого замыкания, она оценивает все значения, включая промежуточные, только один раз.

Цепочки

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

>>>

  >>> hours_worked = 5
>>> 1 <= отработано_часов <= 25
Правда
  

Если отработано 0 часов, то нет причин для отправки счета.С учетом летнего времени максимальное количество часов в сутках составляет 25 . Приведенная выше проверка диапазона подтверждает, что количество отработанных часов в день находится в допустимом диапазоне.

Операторы смешивания и связывание

До сих пор все наши примеры включали == , ! = и сравнения порядков. Однако вы можете связать все операторы сравнения Python. Это может привести к неожиданному поведению:

>>>

  >>> a = 0
>>> а - это <1
Правда
>>> (а есть а) <1
Ложь
>>> а есть (а <1)
Ложь
  

Поскольку a - это <1 - это цепочка сравнения, она оценивается как True .Цепь можно разорвать на части:

  • Выражение a равно равно Истинно , как и для любого значения, оцениваемого относительно самого себя.
  • Выражение a <1 равно Истинно , поскольку 0 меньше 1 .

Поскольку обе части равны True , цепочка оценивается как True .

Однако люди, которые привыкли к другим операторам в Python, могут предположить, что, как и другие выражения, включающие несколько операторов, такие как 1 + 2 * 3 , Python вставляет круглые скобки в выражение.Однако ни один из способов вставки скобок не даст результата Истинно .

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

>>>

  >>> a = 0
>>> а - это
Правда
>>> Верно == 1
Правда
>>> (а есть а) <1
Ложь
  

Выше видно, что a - это , возвращает True , как и для любого значения.Это означает, что (a is a) <1 совпадает с True <1 . Логические значения являются числовыми типами, и True равно 1 . Таким образом, True <1 совпадает с 1 <1 . Поскольку это строгое неравенство и 1 == 1 , он возвращает False.

Второе выражение работает иначе:

>>>

  >>> a = 0
Ложь
>>> а <1
Правда
>>> 0 верно
: 1: SyntaxWarning: "есть" с литералом.Вы имели в виду "=="?
Ложь
  

Поскольку 0 меньше 1 , a <1 возвращает True . Поскольку 0! = True , то 0 не может быть True .

Примечание : Не относитесь к SyntaxWarning легкомысленно. Использование равно в числах может сбивать с толку. Однако специально для случаев, когда вы знаете, что числа не равны , вы можете знать, что равно , также вернет False .Хотя этот пример верен, он не является примером хорошего стиля программирования на Python.

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

Как - это , в операторе и его противоположность, не в , часто может давать удивительные результаты при объединении в цепочку:

>>>

  >>> "b" в "aba" в "cabad" <"cabae"
Правда
  

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

Наконец, вы можете связать не с не в :

>>>

  >>> приветствие = "привет"
>>> качество = "хорошо"
>>> end_greeting = "прощай"
>>> приветствие не качество не в end_greeting
Правда
  

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

Логическое тестирование Python

Чаще всего логическое значение Python используется в операторе if . Этот оператор будет выполняться, если значение равно True :

>>>

  >>> 1 == 1
Правда
>>> если 1 == 1:
... print ("ага")
...
Ага
>>> 1 == 2
Ложь
>>> если 1 == 2:
... print ("ага")
...
  

print () вызывается только тогда, когда выражение оценивается как True .Однако в Python вы можете присвоить любое значение , если . Значения, которые , если считает Истинным , называются истинным , а значения, которые , если считает Ложным , называются ложным .

, если решает, какие значения являются правдивыми, а какие - ложными, путем внутреннего вызова встроенного bool () . Вы уже встречали bool () как логический тип Python. При вызове он преобразует объекты в логические.

Нет как логическое значение

Одноэлементный объект Нет всегда является ложным:

Это часто полезно в операторах if , которые проверяют контрольное значение. Однако обычно лучше явно проверять идентичность с помощью is None . Иногда Нет может быть полезным в сочетании с оценкой короткого замыкания, чтобы иметь значение по умолчанию.

Например, вы можете использовать или , чтобы заменить Нет пустым списком:

>>>

  >>> def add_num_and_len (num, things = None):
... return num + len (things or [])
...
>>> add_num_and_len (5, [1, 2, 3])
8
>>> add_num_and_len (6)
6
  

В этом примере список не будет создан, если пунктов - непустой список, так как или произведут короткое замыкание перед оценкой [] .

Числа как логические значения

Для чисел bool (x) эквивалентно x! = 0 . Это означает, что единственное ложное целое число - 0 :

>>>

  >>> bool (3), bool (-5), bool (0)
(Верно, верно, неверно)
  

Все ненулевые целые числа истинны.Это также верно для чисел с плавающей запятой, включая специальные числа с плавающей запятой, такие как бесконечность и Not a Number (NaN):

>>>

  >>> импорт математики
>>> [bool (x) для x в [0, 1.2, 0.5, math.inf, math.nan]]
[Ложь, Верно, Верно, Верно, Верно]
  

Поскольку бесконечность и NaN не равны 0 , они истинны.

Сравнение равенства и неравенства для чисел с плавающей запятой - тонкие операции. Поскольку выполнение bool (x) эквивалентно x! = 0 , это может привести к неожиданным результатам для чисел с плавающей запятой:

>>>

  >>> bool (0.1 + 0,2 + (-0,2) + (-0,1))
Правда
>>> 0,1 + 0,2 + (-0,2) + (-0,1)
2,7755575615628914e-17
  

Вычисления чисел с плавающей запятой могут быть неточными. Из-за этого результаты bool () для чисел с плавающей запятой могут быть неожиданными.

Python имеет больше числовых типов в стандартной библиотеке, и они следуют тем же правилам. Для не встроенных числовых типов bool (x) также эквивалентно x! = 0 . Модуль дробей находится в стандартной библиотеке.Как и другие числовые типы, единственная ложная дробь - 0/1 :

>>>

  >>> импортные фракции
>>> bool (fractions.Fraction ("1/2")), bool (fractions.Fraction ("0/1"))
(Верно, неверно)
  

Как и в случае с целыми числами и числами с плавающей запятой, дроби являются ложными, только если они равны 0 .

Десятичный модуль также находится в стандартной библиотеке. Десятичные числа также являются ложными, только если они равны 0 :

.
>>>

  >>> импорт десятичных, математических
>>> с десятичной дробью.localcontext (decimal.Context (prec = 3)) как ctx:
... bool (ctx.create_decimal (math.pi) - ctx.create_decimal (22) / 7)
...
Ложь
>>> с decimal.localcontext (decimal.Context (prec = 4)) как ctx:
... bool (ctx.create_decimal (math.pi) - ctx.create_decimal (22) / 7)
...
Правда
  

Число 22/7 является приближением числа Пи к двум десятичным знакам. Этот факт обсуждал Архимед в III веке до нашей эры. Когда разница между 22/7 и Pi вычисляется с такой точностью, результат оказывается ложным.Когда разница вычисляется с более высокой точностью, разница не равна 0 , и это правда.

Последовательности как логические значения

Как правило, объекты с len () будут ложными, если результат len () будет 0 . Не имеет значения, являются ли они списками, кортежами, наборами, строками или байтовыми строками:

>>>

  >>> bool ([1]), bool ([])
(Верно, неверно)
>>> bool ((1,2)), bool (())
(Верно, неверно)
>>> bool ({1,2,3}), bool (set ())
(Верно, неверно)
>>> булево ({1: 2}), булево ({})
(Верно, неверно)
>>> bool ("привет"), bool ("")
(Верно, неверно)
>>> bool (b "xyz"), bool (b "")
(Верно, неверно)
  

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

Другие типы как логические значения

Если типы не имеют len () или специально не определяют, являются ли они правдой или ложью, они всегда правдивы. Это верно как для встроенных, так и для определяемых пользователем типов. В частности, функции всегда правдивы:

>>>

  >>> def func ():
...     проходить
...
>>> bool (функция)
Правда
  

Методы тоже всегда правдивы.Вы можете столкнуться с этим, если при вызове функции или метода скобка отсутствует:

>>>

  >>> дата и время импорта
>>> def before_noon ():
... вернуть datetime.datetime.now (). hour <12
...
>>> def greet ():
... если before_noon:
... print («Доброе утро!»)
...     еще:
... print («Добрый вечер!»)
...
>>> привет ()
Доброе утро!
>>> datetime.datetime.now (). час
20
  

Это может произойти из-за забытых скобок или вводящей в заблуждение документации, в которой не упоминается, что вам нужно вызывать функцию.Если вы ожидаете логическое значение Python, но у вас есть функция, возвращающая логическое значение, то оно всегда будет правдивым.

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

>>>

  >>> манекен класса:
...     проходить
...
>>> bool (Dummy ())
Правда
  

Создание пустого класса делает каждый объект этого класса правдивым. Все объекты истинны, если не определены специальные методы. Если вы хотите сделать некоторые экземпляры своего класса ложными, вы можете определить .__bool __ () :

>>>

  >>> class BoolLike:
... am_i_truthy = Ложь
... def __bool __ (сам):
... вернуть self.am_i_truthy
...
>>> x = BoolLike ()
>>> bool (x)
Ложь
>>> x.am_i_truthy = Верно
>>> bool (x)
Правда
  

Вы также можете использовать .__ bool __ () , чтобы сделать объект ни правдивым, ни ложным:

>>>

  >>> класс ExcludedMiddle:
... def __bool __ (сам):
... повысить ValueError ("ни один")
...
>>> x = ExcludedMiddle ()
>>> bool (x)
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
  Файл "", строка 3, в __bool__
ValueError: ни один

>>> если x:
... print ("x правдиво")
... еще:
... print ("x - ложь")
...
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
  Файл "", строка 3, в __bool__
ValueError: ни один
  

В операторе if также используется .__bool __ () . Он делает это, чтобы оценить, является ли объект правдивым или ложным, что определяет, какую ветвь выполнить.

Если вы определите метод __len__ для класса, то его экземпляры будут иметь len () . В этом случае логическое значение экземпляров будет ложным именно тогда, когда их длина равна 0 :

>>>

  >>> класс DummyContainer:
... my_length = 0
... def __len __ (сам):
... вернуть self.my_length
...
>>> x = DummyContainer ()
>>> bool (x)
Ложь
>>> x.my_length = 5
>>> bool (x)
Правда
  

В этом примере len (x) вернет 0 перед назначением и 5 после него. Однако обратное неверно. Определение .__ bool __ () не дает экземплярам длины:

>>>

  >>> класс AlwaysTrue:
... def __bool __ (сам):
... вернуть True
...
>>> класс AlwaysFalse:
... def __bool __ (сам):
... вернуть False
...
>>> bool (AlwaysTrue ()), bool (AlwaysFalse ())
(Верно, неверно)

>>> len (AlwaysTrue ())
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
TypeError: объект типа AlwaysTrue не имеет len ()

>>> len (AlwaysFalse ())
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
TypeError: объект типа AlwaysFalse не имеет len ()
  

Определение .__bool __ () не делает экземпляры любого класса len () . Если определены как .__ bool __ () , так и .__ len __ () , приоритет имеет .__ bool __ () :

>>>

  >>> class BooleanContainer:
... def __len __ (сам):
... вернуть 100
... def __bool __ (сам):
... вернуть False
...
>>> x = BooleanContainer ()
>>> len (x)
100
>>> bool (x)
Ложь
  

Несмотря на то, что x имеет длину 100 , это все равно ложь.

Пример: массивы NumPy

Приведенный выше пример может показаться чем-то, что происходит только тогда, когда вы пишете класс, предназначенный для демонстрации крайних случаев в Python. Однако можно получить аналогичные результаты, используя одну из самых популярных библиотек PyPI: NumPy.

Массивы, как и числа, являются ложными или правдивыми, в зависимости от того, как они сравниваются с 0 :

>>>

  >>> из массива импорта numpy
>>> x = массив ([0])
>>> len (x)
1
>>> bool (x)
Ложь
  

Несмотря на то, что x имеет длину 1 , оно все равно ложно, поскольку его значение равно 0 .

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

>>>

  >>> из массива импорта numpy
>>> импортировать текстовый перенос
>>> y = массив ([0, 1])
>>> попробуйте:
... bool (y)
... кроме ValueError как exc:
... print ("\ n" .join (textwrap.wrap (str (exc))))
...
Истинное значение массива с более чем одним элементом неоднозначно.
Используйте a.any () или a.all ()
  

Исключение настолько многословно, что для облегчения чтения в коде используется обработка текста для переноса строк.

Еще более интересный крайний случай связан с пустыми массивами. Вы можете задаться вопросом, являются ли они ложными, как и другие последовательности, или правдой, потому что они не равны 0 . Как вы видели выше, это не единственные два возможных ответа. Массивы также могут отказаться от логического значения.

Интересно, что ни один из этих вариантов не является полностью верным:

>>>

  >>> bool (массив ([]))
: 1: DeprecationWarning: истинное значение пустого массива неоднозначно.Возвращается False, но в будущем это приведет к ошибке.
Используйте array.size> 0, чтобы проверить, что массив не пуст.
Ложь
  

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

Операторы и функции

В Python есть еще несколько мест, где проводится логическое тестирование. Один из них - в логических операторах.

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

>>>

  >>> не 1
Ложь
>>> не 0
Правда
  

Таблица истинности для , а не для все еще верна, но теперь она принимает правильность ввода.

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

>>>

  >>> 1 и 2
2
>>> 0 и 1
0
>>> 1 или 2
1
>>> 0 или 2
2
  

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

Предположим, у вас есть функция summarize () , которая, если текст слишком длинный, берет начало и конец и добавляет многоточие ( ... ) в середине. Это может быть полезно в некоторых отчетах, которые не умещаются в полном тексте. Однако в некоторых наборах данных отсутствуют значения, представленные Нет .

Поскольку summarize () предполагает, что ввод является строкой, он завершится ошибкой на None :

>>>

  >>> def summarize (long_text):
... если len (long_text) <= 4:
... вернуть long_text
... вернуть long_text [: 2] + "..." + long_text [-2:]
...
>>> подвести итог ("привет, мир")
'проводится'
>>> подвести итог ("привет")
'Привет'
>>> подвести итог ("")
''
>>> подвести итог (Нет)
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
  Файл "", строка 2, в сводке
TypeError: объект типа NoneType не имеет len ()

>>> для a in ["hello world", "hi", "", None]:
... print ("->", подвести итог (a или ""))
...
-> он ... лд
-> привет
->
->
  

В этом примере используется ложность Нет и тот факт, что или не только замыкает накоротко, но и возвращает последнее значение для оценки. Код для печати отчета добавляет или "" к аргументу summarize () . Добавление или "" поможет вам избежать ошибок с помощью небольшого изменения кода.

Встроенные функции all () и any () оценивают истинность, а также короткое замыкание, но они не возвращают последнее значение для оценки. all () проверяет, верны ли все его аргументы:

>>>

  >>> все ([1, 2, 3])
Правда
>>> все ([0, 1, 2])
Ложь
>>> all (x / (x - 1) для x в [0, 1])
Ложь
  

В последней строке all () не оценивает x / (x - 1) для 1 . Поскольку 1 - 1 равно 0 , это вызвало бы ZeroDivisionError .

any () проверяет, правдивы ли какие-либо из его аргументов:

>>>

  >>> любое ([1, 0, 0])
Правда
>>> any ([False, 0, 0.0])
Ложь
>>> any (1 / x для x в [1, 0])
Правда
  

В последней строке any () не оценивает 1 / x для 0 .

Заключение

Python Boolean - это часто используемый тип данных во многих полезных приложениях. Вы можете использовать логические значения с такими операторами, как , а не , и , или , в , это , == и ! = для сравнения значений и проверки принадлежности, идентичности или равенства.Вы также можете использовать логическое тестирование с оператором if для управления потоком ваших программ на основе истинности выражения.

Из этого руководства вы узнали, как:

  • Управление логическими значениями с помощью логических операторов
  • Преобразование логических значений в других типов
  • Преобразование других типов в Логические значения Python
  • Используйте логические значения для написания эффективного и удобочитаемого кода Python

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

Документация

Learning with Python 2nd Edition

4.1. Оператор модуля

Оператор модуля работает с целыми числами (и целочисленными выражениями) и дает
остаток при делении первого операнда на второй. В Python
Оператор модуля представляет собой знак процента (%). Синтаксис такой же, как и у других
операторов:

 >>> частное = 7/3
>>> распечатать частное
2
>>> остаток = 7% 3
>>> напечатать остаток
1
 

Итак, 7, разделенное на 3, равно 2, при этом остается 1.

Оператор модуля оказался на удивление полезным. Например, вы можете
проверить, делится ли одно число на другое - если x% y равно нулю, то
x делится на y.

Кроме того, из числа можно извлекать самую правую цифру или цифры. Для
Например, x% 10 дает крайнюю правую цифру x (по основанию 10).
Аналогично x% 100 дает две последние цифры.

4.2. Логические значения и выражения

Тип Python для хранения истинных и ложных значений называется bool, с именем
в честь британского математика Джорджа Буля.Джордж Буль создал логическое значение
алгебра
, которая является основой всей современной компьютерной арифметики.

Есть только два логических значения : True и False. Заглавные буквы
важно, поскольку истина и ложь не являются логическими значениями.

 >>> тип (True)
<тип 'bool'>
>>> type (true)
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
NameError: имя 'true' не определено
 

Логическое выражение - это выражение, вычисляющее логическое значение.Оператор == сравнивает два значения и выдает логическое значение:

 >>> 5 == 5
Правда
>>> 5 == 6
Ложь
 

В первом операторе два операнда равны, поэтому выражение оценивает
к True; во втором утверждении 5 не равно 6, поэтому мы получаем False.

Оператор == является одним из операторов сравнения ; остальные:

 x! = Y # x не равно y
x> y # x больше y
x  = y # x больше или равно y
x <= y # x меньше или равно y
 

Хотя эти операции, вероятно, вам знакомы, символы Python
отличается от математических символов.Распространенной ошибкой является использование одного
знак равенства (=) вместо двойного знака равенства (==). Помните, что =
- оператор присваивания, а == - оператор сравнения. Также есть
нет таких вещей, как = <или =>.

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

Есть три логических оператора : and, or, and not. В
семантика (значение) этих операторов аналогична их значению в английском языке.
Например, x> 0 и x <10 истинно, только если x больше 0 и .
менее 10.

n% 2 == 0 или n% 3 == 0 истинно, если либо условий истинно,
то есть, если число делится на 2 или 3.

Наконец, оператор not отменяет логическое выражение, поэтому not (x> y)
истинно, если (x> y) ложно, то есть если x меньше или равно
у.

4.4. Условное исполнение

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

, если x> 0:
    напечатайте "x положительный"
 

Логическое выражение после оператора if называется условием .
Если это правда, то выполняется оператор с отступом. Если нет, то ничего
бывает.

Синтаксис оператора if выглядит следующим образом:

, если БУЛЕВОЕ ВЫРАЖЕНИЕ:
    ЗАЯВЛЕНИЯ
 

Как с определением функции из предыдущей главы и другим составным
операторов, оператор if состоит из заголовка и тела.Заголовок
начинается с ключевого слова, если за ним следует логическое выражение и заканчивается на
двоеточие (:).

Операторы с отступом, которые следуют далее, называются блоком . Первое
Оператор без отступов отмечает конец блока. Блок операторов
внутри составного оператора называется телом оператора.

Каждый из операторов внутри тела выполняется по порядку, если логическое
выражение оценивается как Истина. Весь блок пропускается, если логическое
выражение оценивается как Ложь.

Нет ограничений на количество операторов, которые могут появиться в теле
if, но должен быть хотя бы один. Иногда бывает полезно
иметь тело без инструкций (обычно в качестве хранителя кода, который вы
еще не написали). В этом случае вы можете использовать инструкцию pass, которая
ничего не делает.

 if True: # Это всегда верно
    pass # так что это всегда выполняется, но ничего не делает
 

4,5. Альтернативное исполнение

Вторая форма оператора if - альтернативное выполнение, в котором
есть две возможности, и условие определяет, какая из них будет выполнена.В
синтаксис выглядит так:

, если x% 2 == 0:
    напечатайте x, "даже"
еще:
    напечатайте x, "нечетно"
 

Если остаток от деления x на 2 равен 0, то мы знаем, что x равен
даже, и программа отображает сообщение об этом. Если условие
false, выполняется второй набор операторов. Поскольку условие должно быть
true или false, будет выполнена ровно одна из альтернатив. В
альтернативы называются ветвями , потому что они являются ветвями в потоке
исполнение.

Кроме того, если вам нужно проверить четность (четность или нечетность) чисел
часто вы можете обернуть этот код в функцию :

 def print_parity (x):
    если x% 2 == 0:
        напечатайте x, "даже"
    еще:
        напечатайте x, "нечетно"
 

Для любого значения x print_parity отображает соответствующее сообщение.
При его вызове в качестве аргумента можно указать любое целочисленное выражение.

 >>> print_parity (17)
17 странно.
>>> y = 41
>>> print_parity (y + 1)
42 чётно.

4.6. Связанные условные выражения

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

, если x  у:
    напечатайте x, "больше, чем", y
еще:
    напечатайте x, "и", y, "равны"
 

elif - это сокращение от else if. Опять же, ровно одна ветка будет
выполнен. Нет ограничений на количество операторов elif, а есть только
разрешен одиночный (и необязательный) оператор else, и он должен быть последним
ветка в выписке:

, если choice == 'a':
    function_a ()
elif choice == 'b':
    function_b ()
elif choice == 'c':
    function_c ()
еще:
    print "Неверный выбор."
 

Каждое условие проверяется по порядку. Если первое ложно, проверяется следующее,
и так далее. Если одно из них истинно, выполняется соответствующая ветвь, и
заявление заканчивается. Даже если выполняется более одного условия, выполняется только первое условие.
филиал выполняет.

4,7. Вложенные условные выражения

Одно условие также может быть вложенным в другое. Мы могли бы написать
Пример трихотомии выглядит следующим образом:

, если x == y:
    напечатайте x, "и", y, "равны"
еще:
    если x 

Внешнее условие содержит две ветви.Первая ветка содержит простой
оператор вывода. Вторая ветвь содержит еще один оператор if, который
имеет две собственные ветви. Эти две ветки являются операторами вывода,
хотя они также могли быть условными утверждениями.

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

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

, если 0 

Оператор печати выполняется, только если мы проходим оба
условные, поэтому мы можем использовать оператор and:

, если 0 

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

, если 0 

Это условие семантически совпадает с составным логическим выражением и
вложенное условие.

4.8. Заявление о возврате

Оператор return позволяет завершить выполнение функции.
прежде, чем вы дойдете до конца. Одна из причин его использования - обнаружение ошибки.
состояние:

 def print_square_root (x):
    если x <= 0:
        print "Только положительные числа, пожалуйста."
        возвращаться

    результат = x ** 0,5
    print "Квадратный корень из", x, "равно", результат
 

Функция print_square_root имеет параметр с именем x.Во-первых
он проверяет, меньше ли x или равно 0, и в этом случае он
отображает сообщение об ошибке, а затем использует return для выхода из функции. В
поток выполнения немедленно возвращается к вызывающему, а оставшиеся строки
функция не выполняется.

4.9. Ввод с клавиатуры

В Input мы познакомились со встроенными функциями Python, которые позволяют
ввод с клавиатуры: raw_input и input. Теперь давайте посмотрим на эти
снова более подробно.

При вызове любой из этих функций программа останавливается и ожидает
пользователь что-то напечатал.Когда пользователь нажимает клавишу Return или Enter,
программа возобновляет работу, и raw_input возвращает то, что пользователь ввел в виде строки:

 >>> my_input = raw_input ()
Чего ты ждешь?
>>> распечатать my_input
Чего ты ждешь?
 

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

 >>> name = raw_input ("Что...твое имя? ")
Как тебя зовут? Артур, король бриттов!
>>> напечатать имя
Артур, король бриттов!
 

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

Если мы ожидаем, что ответ будет целым числом, мы можем использовать функцию ввода
который оценивает ответ как выражение Python:

 prompt = "Какая ... скорость полета порожней ласточки? \ N"
скорость = ввод (подсказка)
 

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

 >>> скорость = ввод (подсказка)
Какая ... скорость полета порожней ласточки?
Что значит африканская ласточка или европейская?
...
SyntaxError: недопустимый синтаксис
 

В последнем примере, если пользователь сделал ответ действительным Python
выражение, заключив его в кавычки, это не дало бы ошибки:

 >>> скорость = ввод (подсказка)
Какие...это скорость полета порожней ласточки?
"Что вы имеете в виду, африканскую или европейскую ласточку?"
>>> скорость
- Что значит африканская или европейская ласточка?
>>>
 

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

4.10. Преобразование типа

Каждый тип Python имеет встроенную команду, которая пытается преобразовать значения.
другого типа в этот тип.Команда int (ARGUMENT), например,
принимает любое значение и по возможности преобразует его в целое число или жалуется
в противном случае:

 >>> int ("32")
32
>>> int ("Привет")
ValueError: недопустимый литерал для int () с базой 10: 'Hello'
 

int также может преобразовывать значения с плавающей запятой в целые числа, но помните
что он усекает дробную часть:

 >>> интервал (-2,3)
-2
>>> int (3.99999)
3
>>> int ("42")
42
>>> интервал (1.0)
1
 

Команда с плавающей запятой (АРГУМЕНТ) преобразует целые числа и строки в числа с плавающей запятой.
номера:

 >>> поплавок (32)
32.0
>>> float ("3,14159")
3,14159
>>> поплавок (1)
1.0
 

Может показаться странным, что Python отличает целочисленное значение 1 от
значение с плавающей запятой 1.0. Они могут представлять одно и то же число, но они
относятся к разным типам. Причина в том, что они представлены по-разному.
внутри компьютера.

Команда str (ARGUMENT) преобразует любой переданный ей аргумент в тип
строка:

 >>> str (32)
'32'
>>> str (3.14149)
"3.14149"
>>> str (Верно)
'Правда'
>>> str (правда)
Отслеживание (последний вызов последний):
  Файл "", строка 1, в 
NameError: имя 'true' не определено
 

str (АРГУМЕНТ) будет работать с любым значением и преобразовывать его в строку.Как
упоминалось ранее, True - логическое значение; правда нет.

Для логических значений ситуация особенно интересна:

 >>> булев (1)
Правда
>>> булево (0)
Ложь
>>> bool ("Ни!")
Правда
>>> bool ("")
Ложь
>>> булево (3.14159)
Правда
>>> булево (0,0)
Ложь
 

Python присваивает логические значения значениям других типов. Для числовых типов
как целые числа и числа с плавающей запятой, нулевые значения являются ложными и ненулевыми.
верны. Для строк пустые строки являются ложными, а непустые - истинными.

4.11. ГАСП

GASP ( G raphics A PI для S учеников P ython) позволит
нам писать программы, связанные с графикой. Прежде чем вы сможете использовать GASP, необходимо
для установки на вашем компьютере. Если вы используете Ubuntu GNU / Linux, см.
GASP в Приложении А. Текущие инструкции
для установки GASP на другие платформы можно найти на
http://dev.laptop.org/pub/gasp/downloads.

После установки gasp попробуйте следующий скрипт python:

 из-за импорта газа *

begin_graphics ()

Круг ((200, 200), 60)
Линия ((100, 400), (580, 200))
Коробка ((400, 350), 120, 100)

update_when ('нажатие_ключа')
end_graphics ()
 

Команда, выполняющая предпоследнюю паузу, ожидает нажатия клавиши.Без него экран будет мигать так быстро, что вы его не увидите.

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

С этого момента мы будем использовать дыхание, чтобы проиллюстрировать (предназначенный для каламбура) компьютер.
концепции программирования и добавить к нашему удовольствию во время обучения. Вы можете узнать
подробнее о модуле GASP, прочитав Приложение B.

4.12. Глоссарий

блок
Группа последовательных операторов с одинаковым отступом.
кузов
Блок операторов в составном операторе, следующий за
заголовок.
логическое выражение
Выражение, которое может быть истинным или ложным.
логическое значение
Имеется ровно два логических значения: Истина и Ложь. Логический
значения результат, когда логическое выражение оценивается Python
Интерпретатор. У них есть тип bool.
филиал
Один из возможных путей потока исполнения определяется
условное исполнение.
связанное условное
Условный переход с более чем двумя возможными потоками выполнения. В
Связанные условные выражения Python записываются с if ... elif ... else
заявления.
оператор сравнения
Один из операторов, сравнивающих два значения: ==,! =,>,
<,> = и <=.
состояние
Логическое выражение в условном операторе, определяющее, какой
филиал выполнен.
условный оператор
Оператор, управляющий потоком выполнения в зависимости от некоторых
условие.В Python ключевые слова if, elif и else
используется для условных операторов.
логический оператор
Один из операторов, объединяющих логические выражения: и,
или, и нет.
оператор модуля
Оператор, обозначенный знаком процента (%), работающий на
целые числа и дает остаток от деления одного числа на
Другая.
гнездо
Одна структура программы внутри другой, например условный оператор
внутри ветви другого условного оператора.
подсказка
Визуальная подсказка, указывающая пользователю на ввод данных.
преобразование типа
Явный оператор, который принимает значение одного типа и вычисляет
соответствующее значение другого типа.
код упаковки в функцию
Процесс добавления заголовка функции и параметров в последовательность
операторов программы часто называют «заключением кода в
функция". Этот процесс очень полезен, когда программа
Рассматриваемые утверждения будут использоваться несколько раз.

4,13. Упражнения

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

    1. >>> 5% 2
    2. >>> 9% 5
    3. >>> 15% 12
    4. >>> 12% 15
    5. >>> 6% 6
    6. >>> 0% 7
    7. >>> 7% 0

    Что случилось с последним примером? Почему? Если бы ты умел правильно
    предвидеть реакцию компьютера во всех случаях, кроме последнего, пора
    двигаться дальше.Если нет, найдите время и придумайте собственные примеры. Исследовать
    модуля, пока вы не будете уверены, что понимаете, как он работает.

  2. , если x  у:
        напечатайте x, "больше, чем", y
    еще:
        напечатайте x, "и", y, "равны"
     

    Оберните этот код в функцию с именем compare (x, y). Звоните сравнить
    три раза: по одному, если первый аргумент меньше, больше
    чем, и равно второму аргументу.

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

    Следующий скрипт Python распечатывает таблицу истинности для любого логического
    выражение с двумя переменными: p и q:

     expression = raw_input ("Введите логическое выражение с двумя переменными, p и q:")
    
    напечатать "p q% s"% выражение
    length = len ("p q% s"% выражение)
    длина печати * "="
    
    для p в True, False:
        для q в True, False:
            print "% -7s% -7s% -7s"% (p, q, eval (выражение))
     

    Вы узнаете, как работает этот сценарий, в следующих главах.А пока ты
    будет использовать его, чтобы узнать о логических выражениях. Скопируйте эту программу в
    файл с именем p_and_q.py, затем запустите его из командной строки и дайте
    it: p или q при запросе логического выражения. Вы должны получить
    следующий вывод:

     p q p или q
    =====================
    Правда правда правда
    Верно Неверно Верно
    Ложь Верно Верно
    Ложь Ложь Ложь
     

    Теперь, когда мы увидели, как это работает, давайте обернем его функцией, чтобы
    проще в использовании:

     def таблица_правды (выражение):
        напечатать "p q% s"% выражение
        length = len ("p q% s"% выражение)
        длина печати * "="
    
        для p в True, False:
            для q в True, False:
                print "% -7s% -7s% -7s"% (p, q, eval (выражение))
     

    Мы можем импортировать его в оболочку Python и вызвать true_table со строкой
    содержащее наше логическое выражение в p и q в качестве аргумента:

     >>> из импорта p_and_q *
    >>> таблица_правды ("р или д")
    p q p или q
    =====================
    Правда правда правда
    Верно Неверно Верно
    Ложь правда правда
    Ложь Ложь Ложь
    >>>
     

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

    1. нет (p или q)
    2. п и д
    3. нет (p и q)
    4. нет (p) или нет (q)
    5. не (p) и не (q)

    Какие из них логически эквивалентны?

  4. Введите следующие выражения в оболочку Python:

     Верно или неверно
    Правда и ложь
    not (False) и True
    Верно или 7
    Ложь или 7
    Верно и 0
    Ложь или 8
    "счастливый" и "грустный"
    "счастливый" или "грустный"
    "" и "грустный"
    "счастлив и ""
     

    Проанализируйте эти результаты.Какие наблюдения вы можете сделать о ценностях
    разные типы и логические операторы? Вы можете записать эти наблюдения в
    бланк простых правил о и и или выражениях?

  5.  при выборе == 'a':
        function_a ()
    elif choice == 'b':
        function_b ()
    elif choice == 'c':
        function_c ()
    еще:
        напечатайте «Неверный выбор».
     

    Оберните этот код в функцию под названием dispatch (choice). Затем определите
    function_a, function_b и function_c, чтобы они распечатали
    сообщение о том, что они были вызваны.Например:

     def function_a ():
        print "function_a была вызвана ..."
     

    Поместите четыре функции (dispatch, function_a, function_b и
    function_c в скрипт с именем ch04e05.py. Внизу этого
    скрипт добавляет вызов к отправке ('b'). Ваш результат должен быть:

    Наконец, измените сценарий, чтобы пользователь мог вводить «a», «b» или «c». Попробуй это
    путем импорта вашего скрипта в оболочку Python.

  6. Напишите функцию с именем is_divisible_by_3, которая принимает одно целое число как
    аргумент и печатает: «Это число делится на три.«Если аргумент
    делится без остатка на 3 и «Это число не делится на три».
    иначе.

    Теперь напишите аналогичную функцию с именем is_divisible_by_5.

  7. Обобщите функции, которые вы написали в предыдущем упражнении, в функцию.
    с именем is_divisible_by_n (x, n), который принимает два целочисленных аргумента и
    выводит, делится ли первое на второе. Сохраните это в
    файл с именем ch04e07.py. Импортируйте его в оболочку и попробуйте. Образец
    сессия может выглядеть так:

     >>> из ch04e07 импорт *
    >>> is_divisible_by_n (20, 4)
    Да, 20 делится на 4
    >>> is_divisible_by_n (21, 8)
    Нет, 21 не делится на 8
     
  8. Что будет на выходе?

     если «Ни!»:
        print 'Мы рыцари, которые говорят: «Ни!»'
    еще:
        print "Прекрати! Больше этого не надо!"
    
    если 0:
        print "А теперь о другом... "
    еще:
        print "Что все это значит?"
     

    Объясните, что произошло и почему это произошло.

  9. Следующий скрипт дыхания в файле с именем house.py рисует простой
    дом на задыхающемся холсте:

     from gasp import * # импортировать все из библиотеки gasp
    
    begin_graphics () # открываем графический холст
    
    Коробка ((20, 20), 100, 100) # домик
    Коробка ((55, 20), 30, 50) # дверь
    Box ((40, 80), 20, 20) # левое окно
    Box ((80, 80), 20, 20) # правое окно
    Line ((20, 120), (70, 160)) # левая крыша
    Line ((70, 160), (120, 120)) # правая крыша
    
    update_when ('key_pressed') # держать холст открытым, пока не будет нажата клавиша
    end_graphics () # закрываем холст (что могло бы произойти
                                # в любом случае, так как скрипт здесь заканчивается, но он
                                # лучше быть явным).

    Запустите этот сценарий и убедитесь, что вы получили окно, похожее на
    это:

    1. Оберните код дома в функцию с именем draw_house ().
    2. Запустите сценарий сейчас. Вы видите дом? Почему нет?
    3. Добавьте вызов draw_house () в нижней части скрипта, чтобы
      дом возвращается к экрану.
    4. Параметризация функции с параметрами x и y - заголовок
      должен затем стать def draw_house (x, y) :, чтобы вы могли передать
      расположение дома на полотне.
    5. Используйте draw_house, чтобы разместить пять домов на холсте в разных
      локации.
  10. Исследование: Прочтите Приложение B и напишите сценарий
    с именем homes.py, который при запуске выдает следующее:

    подсказка : вам нужно будет использовать многоугольник для крыши вместо двух.
    Строки для заполнения = True для работы с ним.

Boolean в Tableau - полное руководство по boolean

Тип данных Boolean является наиболее эффективным для обработки Tableau.Тем не менее, он очень мало используется.

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

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

На различных форумах Tableau я вижу разработчиков, от Junior до Zen Master, использующих длинную формулу, когда простое логическое значение будет выполнять ту же работу быстрее.

Этот пост призван побудить разработчиков использовать больше логических значений!

Хотя это написано для Tableau, то же самое применимо и к Excel, если кто-либо из разработчиков Excel прочитает эту статью.

Логическое значение True или False

Что такое логический тип данных?

В Таблице логическое значение имеет значение Истина или Ложь. Это может быть только одно из этих значений. В некоторых программах тип данных с тремя состояниями - True, False, Null - иногда может ошибочно называться логическим, например битовый тип данных SQL.

С точки зрения производительности Boolean настолько хорош, насколько это возможно.

Истина или Ложь также представляется как 1 или 0, где 1 - Истина, а 0 - Ложь. (Обратите внимание, что в некоторых программах True отображается как -1.)

Этот тип данных обрабатывается компьютерами быстрее всего. Использование логических значений в вычисляемых полях дает более высокую производительность Tableau по сравнению с числовыми или строковыми вычислениями.

Примеры использования логического значения в вычислении таблицы

Возможно, людей от его использования удерживает терминология «Истина или Ложь». Но другой и, возможно, менее устрашающий способ рассматривать это как простое «Да» или «Нет».

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

«Прибыль больше нуля?» - «Да» или «Нет»

В Таблице это становится логическим вычислением:

  SUM ([Profit])> 0  

Результат True (или Да), если это прибыльно.

Однако я часто вижу, что написано:

  IF SUM ([Profit])> 0 THEN "Profit" ELSE "Loss" END  

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

Логический пример 2

Другой пример, создайте логическое поле с именем [isProfitable]: (Обратите внимание, что вы не устанавливаете тип данных, Tableau делает это автоматически.)

  [isProfitable]: SUM ([Profit])> 0  

Некоторые использовали бы это следующим образом:

  IF [isProfitable] = True THEN "Profit" ELSE "Loss" END  

«= True» не требуется. Удалите его, и результат будет таким же.

Подумайте об утверждении ЕСЛИ:

ЕСЛИ что-то истина ТОГДА сделайте что-нибудь ДРУГОЕ, сделайте что-нибудь еще.

Первая часть оператора IF выводится только в том случае, если что-то имеет значение True или False. Следовательно, = True не требуется, оно все равно неявно присутствует в операторе IF.

Boolean Example 3

Другой пример, который я видел недавно:

  IF [Field] = "A" THEN True ELSE False END  

Опять же, слишком сложно. Простой логический эквивалент:

  [Field] = "A"  

Оно либо равно A, поэтому возвращает True, либо не равно A, поэтому возвращает False.

Boolean Example 4

Точно так же я видел это:

  IF [task] = 'Finish' THEN 1 ELSE 0 END  

Намного проще написать:

  INT ([task] = 'Finish')  
Логический пример 5

Другой пример (скопирован прямо с форума):

  Если CONTAINS ([Поле], "2-Wheel Drive, Front") = true, то 1 конец  

Что то же самое, что :

  INT (CONTAINS ([Поле], «2-Wheel Drive, Front»))  

(Хорошо, это не совсем то же самое; исходная формула возвращает NULL, если она не содержит «2-Wheel Drive» , Front », а логическая версия возвращает 0.)

Преобразование логического значения в число

Обратите внимание, что в некоторых из предыдущих примеров я заключил логический вывод в функцию INT ().

Логическое значение на выходе - Истина или Ложь. Функция INT преобразует True в 1 и False в 0.

Это очень полезно. Например, используйте это, чтобы решить типичное сообщение об ошибке «Невозможно использовать логический тип в выражении IF»

Использовать логическое значение для года по году, месяца по месяцу, периода по сравнению с расчетами периода

Еще один хороший пример - вычисление этого года и прошлого года числа.

Рассмотрим набор данных, такой как (намеренно маленький для примера):

Дата Продажи Прибыль
01.01.2018 363 7
/ 2018 979 6
01.07.2018 364 9
01.10.2018 188 5
01.01.2018 6
01.04.2019 416 1
01.07.2019 767 2
376

376 376 376

01.01.2020 142 8
01.04.2020 758 2
01.07.2020 146 90/10

85

5 / 2020 667 3 903 02

Предположим, что текущий год - 2020, и мы хотим сравнить этот год с прошлым годом.Это означает определение этого года и определение прошлого года (2019).

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

Например, текущий год (isCY = текущий год):

  [isCY]: YEAR ([Date]) = YEAR (Today ())  

За предыдущий год:

  [isPY]: ГОД ([Дата]) = ГОД (Сегодня ()) - 1  

Что возвращает:

Дата Продажи Прибыль isCY isPY
01.01.2018 90 363 7 ЛОЖЬ ЛОЖЬ
01.04.2018 979 6 ЛОЖЬ ЛОЖЬ
01/07/2018
01.07.2018 ЛОЖЬ
10.01.2018 188 5 ЛОЖЬ ЛОЖЬ
01.01.2019 719 6 ЛОЖЬ 04/2019 416 1 ЛОЖЬ ИСТИНА
07.01.2019 767 2 ЛОЖЬ ИСТИНА
01/10/2019 376 01 902 / 01/2020 142 8 ИСТИННО ЛОЖНО
01.04.2020 758 2 ИСТИННО ЛОЖНО
8 ИСТИНА ЛОЖЬ
01/10/2020 667 3 ИСТИНА ЛОЖЬ

Эти флаги просты в использовании для расчета продаж за этот год [SalesCY]: [Sales] * INT ([isCY])

Или прибыль за предыдущий год:

  [ProfitPY]: [Profit] * INT ([isPY])  

Как это работает ?

Простой - все значения умножаются на 1 или 0.Поэтому они либо остаются такими, как есть ([Продажи] * 1 = [Продажи]), либо игнорируются ([Продажи] * 0 = 0).

Следовательно, формула для агрегированного года по году:

  SUM ([SalesCY]) / SUM ([SalesPY]) - 1  

Нет необходимости в табличных вычислениях или фильтрах, изменение года за годом обрабатывается булевы вычисления.

Общие сообщения об ошибках логического типа в таблице

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

  • Невозможно сравнить логические и строковые значения
  • Невозможно сравнить логические и целочисленные значения

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

Чтобы создать логическое вычисляемое поле в Таблице, создайте новое вычисляемое поле и введите формулу 1 = 1.

Логическое вычисляемое поле в Таблице (// является комментарием)

1 равно 1, поэтому эта формула возвращает True.

Чтобы вернуть значение False, измените формулу на 1 = 0. Любая формула, возвращающая True или False, является логическим вычисляемым полем.

Невозможно сравнить логическое и строковое значения

Чтобы воспроизвести эту ошибку, создайте новое вычисляемое поле, используя вышеуказанное логическое вычисляемое поле.Введите формулу:

IF [boolean] = "True" THEN "T" ELSE "F" END

Создание ошибки Невозможно сравнить логические и строковые значения в Таблице

Чтобы полностью устранить эту ошибку, удалите '= «True ”'Из формулы ИЛИ удалите кавычки вокруг слова True.

Исправить таблицу Ошибка: невозможно сравнить логическое значение с другими значениями.

Невозможно сравнить логическое и целочисленное значения.

. Чтобы воспроизвести эту ошибку, создайте новое вычисляемое поле, используя вычисляемое поле логического типа.Как и в предыдущем случае, введите формулу:

IF [boolean] = 1 THEN "T" ELSE "F" END

Создание ошибки Невозможно сравнить логические и целочисленные значения в Таблице

Чтобы устранить эту ошибку, удалите = 1 ИЛИ оберните [логическое] в INT (), чтобы преобразовать его в число - лучший выбор - первый вариант.

Табличные логические функции

Некоторые из табличных функций, используемых в вычисляемых полях, являются логическими:

  • ENDSWITH - используются, чтобы увидеть, заканчивается ли строка другой строкой
  • ISDATE - используется для проверки того, является ли строка также действительной дата
  • ISFULLNAME - используется на Tableau Server или Tableau Online для проверки того, совпадает ли полное имя вошедшего в систему пользователя с указанным полным именем
  • ISMEMBEROF - используется на Tableau Server для управления разрешениями, он проверяет, является ли зарегистрированный член членом указанной группы серверов Tableau
  • ISNULL - проверяет, является ли данное поле пустым
  • ISUSERNAME - аналогично ISFULLNAME, проверяет, совпадает ли имя пользователя вошедшего в систему с указанным именем пользователя

Теперь вы знаете, как правильно использовать логическое значение тип данных в Таблице, не забудьте:

Используйте больше логических значений в вычислениях Таблицы!

Если вам нужны более быстрые и эффективные рабочие книги Tableau, рекомендация проста:

Используйте больше логических значений и улучшите производительность панели управления Tableau!

Преобразование bool (True, False) и других типов друг в друга в Python

В Python значения истинности (логические значения) представлены объектами типа bool True и False .Результаты операторов сравнения возвращаются как True или False и используются в условных выражениях в операторах if и т. Д.

В этой статье описывается следующее содержание:

  • bool type является подклассом int type
    • True и False эквивалентны 1 и 0
  • Проверка истинности в Python
  • Преобразование других типов в bool type: bool ()
    • Преобразование определенной строки в 1 , 0 : distutils.util.strtobool ()
  • Преобразование типа bool в другие типы
    • Преобразование в число: int () , float () , complex ()
    • Преобразовать в строки: str ()
    • Другие типы

тип bool является подклассом типа int

True и False - это объекты типа bool .

  печать (тип (True))
# <класс 'bool'>

print (type (False))
# <класс 'bool'>
  

С помощью встроенной функции issubclass () можно подтвердить, что bool является подклассом целочисленного типа int .

  печать (issubclass (bool, int))
# Правда
  

Истина и Ложь эквивалентны 1 и 0

True и False эквивалентны 1 и 0 .

  печать (True == 1)
# Правда

печать (Ложь == 0)
# Правда
  

Поскольку bool является подклассом int , его можно вычислять как целые числа.

  печать (True + True)
# 2

печать (True * 10)
# 10
  

Следовательно, вы можете подсчитать число True из списка True и False , используя встроенную функцию sum () , которая вычисляет сумму чисел, хранящихся в списке.

  печать (сумма ([True, False, True]))
# 2
  

Выражение генератора можно использовать для подсчета количества элементов в списке, удовлетворяющем условиям. Используйте [] для понимания списков и () для выражений генератора.

Если выражение генератора является единственным аргументом функции, () можно опустить, поэтому его можно записать следующим образом.

  l = [0, 1, 2, 3, 4]

print ([i> 2 for i in l])
# [Ложь, Ложь, Ложь, Верно, Верно]

print (sum (i> 2 for i in l))
# 2
  

Проверка истинности в Python

В Python объекты, отличные от True и False типа bool , также проверяются как истинные или ложные в условном выражении оператора if и т. Д.

Следующие объекты считаются False , как указано в официальной документации выше.

  • константы, определенные как ложные: Нет и Ложь
  • ноль любого числового типа: 0 , 0,0 , 0j , Десятичный (0) , Дробь (0, 1)
  • пустых последовательностей и коллекций: '' , () , [] , {} , set () , диапазон (0)

Все остальные объекты считаются True .

Например, непустая строка считается Истинно .

 , если abc:
    print ('Верно!')
# Правда!
  

Вы можете проверить, рассматривается ли объект как True или False , используя bool () , как описано ниже.

Преобразование других типов в тип bool: bool ()

Вы можете преобразовать объекты других типов в True или False типа bool с помощью bool () в соответствии с проверкой истинности, описанной выше.

Любая непустая строка str , будь то 'True' или 'False' , считается True . Пустая строка считается Ложь . Если вы хотите преобразовать в соответствии с содержимым строки, используйте distutils.util.strtobool () , описанное ниже.

  печать (bool ('True'))
print (bool ('Ложь'))
печать (булево ('abc'))
# Правда
# Правда
# Правда

печать (булево (''))
# Ложь
  

Любое число, отличное от 0 , будь то целое число int , число с плавающей запятой float или комплексное число комплексное , считается True .Если это 0 , это считается Ложным .

  печать (bool (1))
печать (булево (2))
печать (булево (1.23))
печать (булево (-1))
# Правда
# Правда
# Правда
# Правда

печать (булево (0))
печать (булево (0.0))
печать (булево (0j))
# Ложь
# Ложь
# Ложь
  

Все непустые последовательности и коллекции, будь то списки, кортежи, наборы или словари, считаются True . Пустые последовательности и коллекции считаются Ложь .

  печать (булево ([1, 2, 3]))
print (bool ((1, 2, 3)))
print (bool ({1, 2, 3}))
print (bool ({'k1': 1, 'k2': 2, 'k3': 3}))
# Правда
# Правда
# Правда
# Правда

печать (булево ([]))
печать (булево (()))
печать (булево ({}))
# Ложь
# Ложь
# Ложь
  

Нет считается Ложным .

  печать (bool (Нет))
# Ложь
  

Преобразование определенной строки в 1, 0: distutils.util.strtobool ()

Как упоминалось выше, bool () преобразует строку 'False' в True .

Используйте distutils.util.strtobool () , если вы хотите преобразовать в соответствии с содержимым строки.

Преобразует строковое представление истины в истину (1) или ложь (0). Истинные значения: y, yes, t, true, on и 1; значения false: n, no, f, false, off и 0.Вызывает ошибку ValueError, если val - это что-то еще.
9. Справочник по API - distutils.util.strtobool () - документация Python 3.9.1

Вам необходимо импортировать distutils.util . Он включен в стандартную библиотеку, поэтому дополнительной установки не требуется.

distutils.util.strtobool () возвращает 1 для строк 'y' , 'yes' , 'true' , 'на' , '1' и возвращает 0 для 'n' , 'no' , 'f' , 'false' , 'off' , '0' .

Не имеет значения, прописные или строчные буквы, поэтому вы можете использовать 'TRUE' , 'True , ' YES ' и т. Д.

  из distutils.util import strtobool

print (strtobool ('истина'))
print (strtobool ('Истина'))
print (strtobool ('ИСТИНА'))
# 1
# 1
# 1

печать (strtobool ('т'))
print (strtobool ('да'))
печать (strtobool ('y'))
печать (strtobool ('вкл'))
печать (strtobool ('1'))
# 1
# 1
# 1
# 1
# 1

print (strtobool ('ложь'))
print (strtobool ('Ложь'))
print (strtobool ('ЛОЖЬ'))
# 0
# 0
# 0

печать (strtobool ('f'))
print (strtobool ('нет'))
печать (strtobool ('n'))
печать (strtobool ('выкл'))
печать (strtobool ('0'))
# 0
# 0
# 0
# 0
# 0
  

Вызывает ValueError для других значений.

  # печать (strtobool ('abc'))
# ValueError: недопустимое значение истины 'abc'
  

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

  попробовать:
    strtobool ('abc')
кроме ValueError как e:
    print ('другое значение')
# другое значение
  

Имя - strtobool () , но возвращаемое значение - это тип int ( 1 или 0 ) вместо типа bool .

  print (введите (strtobool ('true')))
# <класс 'int'>
  

В условных выражениях, таких как if , 1 и 0 считаются True и False , поэтому нет никаких проблем с их использованием.

  если strtobool («да»):
    print ('Верно!')
# Правда!
  

Преобразование типа bool в другие типы

Преобразовать в число: int (), float (), complex ()

Как упоминалось выше, поскольку True и False эквивалентны 1 и 0 , их можно преобразовать в 1 и 0 соответствующих типов с помощью int () , float ( ) , а комплекс () .

  печать (int (True))
print (int (Ложь))
# 1
# 0

print (float (True))
print (float (Ложь))
№1.0
# 0.0

print (сложный (True))
print (сложный (Ложь))
# (1 + 0j)
# 0j
  

Преобразовать в строки: str ()

True , False можно преобразовать в строки 'True' , 'False' с помощью str () .

  печать (str (True))
print (str (Ложь))
# Правда
# Ложь

print (тип (str (True)))
print (type (str (False)))
# <класс 'str'>
# <класс 'str'>
  

Непустые строки считаются True , поэтому, если вы конвертируете False в строки с str () , а затем обратно в тип bool с bool () , это будет True .

  печать (bool (str (False)))
# Правда
  

Другие типы

list () и tuple () не может преобразовать типы bool в списки и кортежи. Он не будет преобразован в пустой список.

  # print (список (True))
# TypeError: объект 'bool' не повторяется
  

Boolean - JavaScript | MDN

Значение, переданное в качестве первого параметра, при необходимости преобразуется в логическое значение. Если значение опущено или равно 0 , -0 , null , false , NaN , undefined или пустой строке ( "" ), объект имеет начальное значение ложь .Все остальные значения, включая любой объект, пустой массив ( [] ) или строку « false », создают объект с начальным значением true .

Не путайте примитивные значения Boolean true и false со значениями true и false объекта Boolean .

Любой объект , значение которого не равно undefined или null , включая объект Boolean , значение которого равно false , оценивается как true при передаче в условный оператор.Например, условие в следующем операторе if оценивается как true :

  var x = новое логическое значение (false);
if (x) {
  
}
  

Это поведение не применяется к логическим примитивам . Например, условие в следующем операторе if оценивается как false :

  var x = false;
if (x) {
  
}
  

Не используйте объект Boolean для преобразования небулевого значения в логическое значение.Вместо этого для выполнения этой задачи используйте Boolean в качестве функции или двойной оператор NOT:

  var x = Boolean (выражение);
var x = !! (выражение);
var x = new Boolean (выражение);
  

Если вы укажете какой-либо объект, включая объект Boolean , значение которого равно false , в качестве начального значения объекта Boolean , новый объект Boolean будет иметь значение true .

  var myFalse = новое логическое значение (ложь);
var g = Boolean (myFalse);
var myString = новая строка ('Привет');
var s = Boolean (myString);
  

Не используйте объект Boolean вместо примитива Boolean .

Примечание: Когда нестандартное свойство document.all используется в качестве аргумента для этого конструктора, результатом является объект Boolean со значением false . Это свойство является устаревшим и нестандартным, и его не следует использовать.

Преобразование чисел в истину и ложь в Excel

Build Professional - Нерушимый - Формы в Excel

45 учебных пособий - 5+ часов - загружаемые файлы Excel

Мгновенный доступ! - Пожизненный доступ!

Как преобразовать числа в логические значения ИСТИНА и ЛОЖЬ в Excel.Это очень важно при работе с более сложными формулами, особенно с массивами.

Разделов:

Преобразование чисел в ИСТИНА и ЛОЖЬ

Пример из реального мира

Больше примеров (проще)

Банкноты

Преобразование чисел в ИСТИНА и ЛОЖЬ

Для чисел я буду использовать 1 и 0, но это может быть любая серия чисел.

Мы используем простую логическую формулу, чтобы проверить, является ли значение 1 или 0, и эта логическая формула будет выводить ИСТИНА или ЛОЖЬ.

Пример данных:

Введите логическую формулу:

  = A1 = 0
  

Результат:

Скопируйте формулу вниз:

Если вы хотите, чтобы 1 оценивался как ИСТИНА, а 0 - как ЛОЖЬ, просто измените формулу на это:

  = A1 = 1
  

Теперь я использовал 1 и 0 для чисел, но это могла быть ситуация, когда у меня были такие числа: 0,1,2,3,0,1,2,3, и в этом случае я мог бы захотеть только 0 значения, которые нужно оценить как ИСТИНА, а остальные - как ЛОЖЬ.Это часто происходит при использовании функций MOD () и ROW () для выполнения каких-либо действий с заданным интервалом строк в Excel; это особенно верно для реального примера в следующем разделе и дополнительных ссылок в следующем разделе.

Пример из реального мира

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

Обычно этот метод используется в формуле массива.

Пример:

  = СУММ (A1: A6 * (МОД (СТРОКА (A1: A6), 2) = 0))
  

Это формула массива, поэтому вы должны ввести ее, используя Ctrl + Shift + Введите .

Суммирует значения, встречающиеся в каждом таком количестве строк в списке; таким образом, он может складывать значения из каждой второй строки, или третьей строки, или 5-й строки и т. д.

Вот его снимок экрана из учебника «Сумма значений для каждого X числа строк в Excel».

MOD (ROW (A1: A6), 2) - это то, что возвращает целое число (число), которое мы затем можем использовать для получения значений ИСТИНА и ЛОЖЬ.

= 0 добавляется в конец предыдущего фрагмента кода, и это то, что вызывает логическое сравнение, которое затем приводит к выводу значения ИСТИНА или ЛОЖЬ.

Формула массива, содержащая все это, затем использует значения ИСТИНА и ЛОЖЬ, чтобы проверить, какие значения следует суммировать. Он будет суммировать только ИСТИННЫЕ значения.

Больше примеров (проще)

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

Увеличивать значение каждые X строк в Excel

Автоматически затенять все остальные строки при добавлении данных в Excel

Быстро затенить каждую другую строку в Excel

Банкноты

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

Обязательно загрузите образец файла для этого руководства, чтобы вы могли работать с этим примером в Excel.

Истинная / Ложная алгебра Вопросы с ответами

  1. (Верно или Ложь) Неравенство | x + 1 | <0 не имеет решения.
  2. (Верно или Ложно) Если a и b отрицательные числа и | a | <| b |, то b - a отрицательно.
  3. (Верно или Неверно) Уравнение 2x + 7 = 2 (x + 5) имеет одно решение.
  4. (Верно или неверно) Множитель, обратный -1/4, равен -1/8.
  5. (Верно или Ложь) x (2 + z) = x 2 + x z
  6. (Верно или Ложь) | -8 | - | 10 | = -18
  7. (Верно или Ложь) (8 4) 2 = 8 (4 2)
  8. (Верно или Ложь) 31.5 (1,004) 20 <31,6 (1,003) 25
  9. (Верно или неверно) График уравнения y = 4 не имеет точки пересечения по оси x.
  10. (Верно или Ложно) Значение n (n + 3) / 2 = 3/2, когда n = 0.
  11. (Верно или неверно) Расстояние между числами -9 и 20 равно расстоянию между 9 и -20 в числовой строке.
  12. (Верно или Ложно) Если f (x) = sqrt (1 - x), то f (-3) = 2.
  13. (Верно или неверно) Наклон прямой 2x + 2y = 2 равен 2 .
  14. (Верно или неверно) | x + 5 | всегда положительный.
  15. (Верно или Ложно) Расстояние между точками (0, 0) и (5, 0) в прямоугольной системе осей равно 5.
  16. (Верно или Ложно) 1 / (2x - 4) не определено, когда x = -4.
  17. (Истина или Ложь) (-1/5) -2 = 25.
  18. (Верно или Ложь) Обратное значение 0 равно 0.
  19. (Верно или Ложь) Аддитивное значение, обратное -10. равно 10.
  20. (Верно или Ложно) 1 / (x - 4) = 1 / x - 1/4.

Ответы на вышеперечисленные вопросы

  1. ИСТИНА
  2. ИСТИНА
  3. ЛОЖЬ (2x + 7 = 2x + 10, 7 = 10 нет решения)
  4. ЛОЖЬ (множитель, обратный -1/4, равен -4)
  5. ЛОЖЬ ( попробуйте значения x = 8 и z = 2)
  6. FALSE (= 8-10 = -2)
  7. FALSE (левая сторона = 1, правая сторона = 4)
  8. FALSE
  9. TRUE
  10. FALSE (= 0 )
  11. ИСТИНА
  12. ИСТИНА
  13. ЛОЖЬ (= -1)
  14. ЛОЖЬ (= 0 для x = -5)
  15. ИСТИНА
  16. ЛОЖЬ (не определено, если 2x - 4 = 0, x = 2)
  17. ИСТИНА
  18. ЛОЖЬ (величина, обратная 0 не определена)
  19. ИСТИНА
  20. ЛОЖЬ (попробуйте x = 2)

Алгебра Вопросы и задачи
Дополнительные практики ACT, SAT и Compass

.

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

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