Логические выражения и операции. Булевый тип данных
Для того, чтобы программа была не линейной (т.е. в зависимости от ситуации выполнялись разные инструкции) в языках программирования используются логические выражения, результат которых может быть либо правдой ( true ), либо ложью ( false ). Результат логических выражений обычно используют для определения пути выполнения программы.
Простые логические выражения являются результатом операций отношения между двумя операндами (значениями). В примерах ниже операндами являются значения переменных x и y . Операндами могут быть числа, символы и другие типы данных. Все что можно сравнивать между собой. Однако не рекомендуют сравнивать вещественные числа из-за особенностей их хранения в памяти компьютера.
В Паскале предусмотрены следующие операторы отношений:
- меньше: x < y
- больше: x > y
- равно: x = y
- не равно: x <> y
- меньше или равно: x <= y
- больше или равно: x >= y
Булевы типы
Результатом логического выражения всегда является булево (логическое) значение. Булев тип данных ( boolean ) может принимать только два значения: true (истина) или false (ложь). Эти величины упорядочены следующим образом: false < true .
Операции and , or , not (применяемые к булевским операндам) дают булевские значения.
Это значит, что данные булевого типа являются не только результатом операций отношения, но и могут выступать в роли операндов операции отношения. Также к ним можно применять функции ord , succ , pred , процедуры inc и dec .
Значение типа boolean занимает в памяти 1 байт.
В примере шести булевым переменным присваиваются значения простых логических выражений. Значения, хранимые в таких переменных, затем выводятся на экран.

Кроме типа boolean в Pascal введены еще три булевых типа — bytebool (занимает 1 байт), wordbool (занимает 2 байта) и longbool (занимает 4 байта).
Для всех булевых типов значению false соответствует 0, а значению true — любое ненулевое значение. Логические переменные, принадлежащие разным булевым типам, ведут себя по-разному при выполнении над ними операций. Ниже приводится пример, реализованный на языке FreePascal (в комментариях отображается результат).
Логические операции
С помощью логических операторов можно формировать сложные логические выражения. Логические операторы часто применяются по отношению к простым логическим выражениям.
В языке программирования Pascal предусмотрены следующие логические операции:
Конъюнкция (логическое умножение, пересечение) — and . Выражение a and b дает значение true только в том случае, если a и b имеют значение true . Во всех остальных случаях значения выражения a and b дает false .
Дизъюнкция (логическое сложение, объединение) – or . Выражение a or b дает значение false только в том случае, если a и b имеют значение false . Во всех остальных случаях результат – true .
Отрицание (инверсия) – not . Выражение not a имеет значение, противоположное значению a .
Исключающее ИЛИ – xor . Выражение a xor b дает значение true только в том случае, когда только один из операндов имеет значение true .
Последовательность выполнения логических операторов: not, and, or.
В языке Паскаль сначала выполняются логические операторы ( and , or , xor , not ), а уже потом операторы отношений ( > , >= , < , <= , <> , = ), поэтому не нужно забывать расставлять скобки в сложных логических выражениях.

Сложные булевы выражения могут не обрабатываться до конца, если продолжение вычислений не изменит результат. Если булево выражение в обязательном порядке нужно обрабатывать до конца, то это обеспечивается включением директивы компиляции .
#6 Boolean Логический тип данных. Логические выражения. Операции AND и OR. Таблицы истинности. Приоритет операция. Паскаль
![]()
Логический тип данных (boolean) служит для хранения значений, которые обладают одним из двух возможных состояний:
- или истина
- или ложь
Логический тип данных нужен, чтобы программировать различные альтернативные действия, развивать сценарий программы различными путями, тем самым имитируя настоящую жизнь.
Переменные типа boolean
Объявление переменных логического типа
В коде программы переменные логического объявляются, по той же схеме, что и integer, но для указания типа используется ключевое слово boolean, например:
Литералы логического типа (логические литеры) и присваивание значений переменным
Литеры логического типа — это два специальных слова, зарезервированных в рамках синтаксиса языка Паскаль.
Для обозначения истины используется литерал:
а для обозначение лжи литерал:
Оба этих значения могу быть присвоены переменным логического типа, например:
— как всегда, после операции присваивания, ставятся точка с запятой.
Значение переменных логического типа после объявления
Сразу после объявления переменные логического типа имеют значение false.
Логические операции. Таблицы истинности
Подобно арифметическим значениям для логических тоже можно строить выражения, но вместо арифметических операций для логических значений используются логические операции.
В этом уроке мы рассмотри три логические операции:
- OR — т.н. логическое ИЛИ (или «логическая сумма» или «дизъюнкция»).
- AND — т.н. логическое И (или «логическое умножение» или «конъюнкция»).
- Not — отрицание («инверсия»)
Операция OR (логическое ИЛИ) — логическая сумма
Операция OR принимает два операнда логического (boolean) типа (один слева другой справа) и возвращает результат, опять же, логического типа.
Правила работы операции, описываются т.н. таблицей истинности — то есть таблицей, которая показывает при каких значениях операндов какой именно результат мы получим.
Итак, построим таблицу истинности для операции OR, она будет выглядеть так:
Если условно считать, что $true$ это $1$, а $false$ это $0$, то таблицу истинности логическое операции OR можно переписать так:
— обычно её записывают в математике именно с нулями и единицами.

Или в виде картинки:
Посмотрим на любую из двух таблиц — можно видеть, что:
Операция $OR$ возвращает $true$, если хотя бы один аргумент истинен, а в остальных случаях $false$.
Проиллюстрируем это ещё одной картинкой:
Операция AND (логическое И) — логическое умножение
Операция AND, как и OR, принимает два операнда логического (boolean) типа (один слева другой справа) и возвращает результат, опять же, логического типа.
Её таблица истинности:

Или в виде картинки:
Операция $AND$ возвращает $true$, только если оба аргумента истинны, а в остальных случаях $false$.
Если использовать более длинную форму записи, то получим:
Ещё одна иллюстрация работы AND (логическое И):
Операция Not — отрицание (логическое отрицание)
В отличие от предыдущих двух операций, которые использовали два аргумента (их называют «бинарными») операция отрицания использует только один (правый) аргумент (т.н. «унарные», то есть использующие один аргумент).
Не правда — это ложь, а не ложь — это истина
— на этом высказывании и основа таблица истинности для операции not:

Или:
Или ещё более красочная иллюстрация, объясняющая работу данной операции:
Логические выражения и порядок выполнения операций в них
Логические выражения — это выражения, результат которых имеет тип boolean.
Если в логическом выражении более одной операции, то они выполняются в некотором порядке, как именно мы посмотрим ниже.
Если есть скобки
Если есть в выражении есть скобки, то подвыражения вычисляются также как в математике — то есть сначала вычисляются те подвыражения, которые окружает наибольшее число скобок, например:
Если в выражении только AND или только OR и нет скобок
Если используется одна и та же операция и нет скобок, то вычисление происходит слева направо, например (запишем, упрощая выражение):
— в последнем выражении мы указали по шагам как вычисляется выражение (скобками отметили первый шаг), сначала вычисляется самое левое подвыражение, и его результат используется как операнд для правого выражения.
Посчитаем значения для тех же самых операндов, но заменив OR на AND:
Если есть и OR и AND и без скобок. Приоритет операций
У операции AND более высокий приоритет, чем у OR, это значит, что в случае когда нет скобок, все подвыражения с AND вычисляются раньше, чем подвыражения с OR.
Поясним порядок вычисления выражения, скажем:
— это выражение эквивалентно выражению со скобками (в силу приоритета AND над OR — точно так же как арифметическое умножение выполняется раньше сложения в ситуации, когда нет скобок):
Логические выражения с литералами и переменными
Как и для целых чисел, для логического типа в выражениях могут участвовать и переменные и литералы.
Возьмём какое-нибудь выражение из уже рассмотренные выше, например:
Мы можем вынести какое-нибудь из значений в этом выражении в переменную и результат присвоить какой-то другой переменной, например:
Можно и вообще все значения хранить в переменных (значение $b$ от этого не изменится):
Вывод данных логического типа на экран
Данные логического типа могут быть аргументами для стандартных процедур вывода данных, а это значит, что можно выводить на экран значения переменных, например, самих по себе:
или вменсте с аргументами другого типа:
Конечно, можно выводить значения и нескольких переменных сразу:
Значения типа boolean как результат сравнения данных других типов
Помимо выражений с участием логических операндов и логических операций (которые мы рассмотрели выше), логическим типом (boolean) также обладают операции сравнения:
- $=$ (проверка на равенство)
Например: - $\lt>$ — «не равно» (проверка на неравенство)
Например: - $>$ («больше«)
Например: - $>=$ («больше либо равно«)
Например: - $\lt $ («меньше«)
Например: - $\lt= $ («меньше либо равное«)
Например:
ВЫВОД: результат сравнения данных всегда обладает логическим типом.
Смешанные выражения
Допустимы и смешанные выражения, лишь бы операнды логических операций были логического типа, например рассмотрим выражение:
Вычислим это выражение по шагам:
— скобки имеют приоритет, потому сначала вычисляем арифметическое выражение с наиболее высоким приоритетом — его результат типа integer и =3, а именно:
Далее сравниваются два целых числа, результат же сравнения имеет уже тип boolean:
— true, т.к. $3$ действительно больше либо равно $3$. Далее просто считаем слева направо:
Этим вычислением мы просто показали как работает Паскаль, на практике, конечно, программа вычислит значение сама, но нам нужно понимать её логику, чтобы правильно описывать желаемое поведение кода.
Разбор задач
Пример №1
Сравните число $5$ и число $2.3$ результат сравнения выведите на экран.
Самое простое решение:
Если же требуется сравнивать значения переменных, то:
Ну и наконец если требуется записать результат сравнения в переменную, то:
Пример №2
Дано целое число A. Проверить истинность высказывания: «Число A является положительным».
— в этом решении при выводе ответа, мы в качестве второго аргумента процедуры вывода передали выражение возвращающее логический результат.
Пример №3
Дано целое число A. Проверить истинность высказывания: «Число A является нечетным».
Для того чтобы узнать, является ли данное число нечетным в Паскале предусмотрена специальная функция Odd, которая возвращает true, если число нечетное и false, если число четное.
Запустите код и проверьте как работает программа.
Пример №4
Дано целое число A. Проверить истинность высказывания: «Число A является четным».
Для того чтобы узнать является ли число нечетным, используем уже известную нам функцию, затем инвертируем результат (используя логическую операцию Not — см. правила её работы выше):
Пример №5
Даны три целых числа: $A$, $B$, $C$. Проверить истинность высказывания: «Число $B$ находится между числами $A$ и $C$».
В решении этой задачи нам потребуется операция логического умножения, таблица истинности которой требует одновременности выполнения условий:
Видео-пояснения
Для этого урока имеются следующие видео (см. в таком порядке):
Самостоятельная работа — вопросы и задачи
Теоретические вопросы:
- Чтобы такое логический тип данных? Для чего он нужен?
- Какие литералы логического типа вы знаете? Сколько их?
- Какие выражения могут возвращать логический тип данных?
Какой тип возвращает выражение:
? А какой тип у выражения:
Практические задачи:
Следующие задачи решите в виде программы:
Подсказка: если не получается решить, или для самопроверки — см. этот разбор решения.
Типы bool и NoneType в Python
В Python , как и в других языках программирования, тип данных bool (т.е. логический тип данных) выражает истинность или ложность и состоит, соответственно, всего из двух предопределенных объектов True и False. Логические константы обычно являются результатом операций сравнения, особенно в выражениях управляющих конструкций, где они определяют ход дальнейших действий программы (см. пример №1 ).
Пример №1. Логический тип данных в Python (часть 1).
Обратите внимание, что в Python имена булевых констант True и False являются регистрозависимыми, поэтому использовать их нужно именно в указанном здесь регистре.
Стоит добавить, что True и False по сути являются обычными целыми числами 1 и 0 , пусть и с некоторыми особенностями отображения на экране (см. пример №2 ).
Пример №2. Логический тип данных в Python (часть 2).
Как видим, булевы константы действительно можно использовать в математических выражениях на равных с числами. Точно также и в операциях сравнения можно использовать вместо констант True и False числа 1 и 0 (попробуйте заменить константы числами в первом примере). Поэтому для себя их можно считать просто именованными «ноликами» и «единичками» не забывая при этом, что мы имеем дело с отдельным типом данных.
Логические операторы в Python
Python поддерживает следующие стандартные логические операторы: and (логическое И), or (логическое ИЛИ), not (логическое НЕ). Все они используются в логических выражениях для определения того или иного хода выполнения программы в зависимости от возвращаемого выражением результата (см. таблицу №3 ).
| Пример | Название | Результат |
|---|---|---|
| not x | Логическое НЕ | True, если значение x равно False. |
| x and y | Логическое И | True, если оба значения x и y равны True. |
| x or y | Логическое ИЛИ | True, если оба значения равны True или хотя бы одно из значений x или y равно True. |
Таблица №3. Логические операторы Python.
Важно понимать, как интерпретатор обрабатывает логические выражения в общем случае. Если в выражении x or y результат вычисления операнда x будет интерпретироваться как True или в выражении x and y результат вычисления этого операнда будет интерпретироваться как False , то правый операнд, т.е. операнд y , уже вычисляться не будет. Вместо этого будет просто возвращен результат вычисления левого операнда x . В противном случае, когда в выражении x or y результат вычисления левого операнда будет интерпретироваться как False или в выражении x and y результат вычисления этого операнда будет интерпретироваться как True , интерпретатор вернет результат вычисления правого операнда, т.е. операнда y . Именно поэтому инструкции print(5 or 0) и print(0 or 5) выведут ‘5’ , а print(0 and 5) и print(5 and 0) , выведут ‘0’ .
Следует быть внимательным и не помещать в правый операнд код, от которого может зависеть правильная работа программы (см. пример №4 ).
Пример №4. Особенности использования логических операторов.
Тип NoneType в Python
Специальная константа None, означающая отсутствие значения, является в Python единственным представителем типа данных NoneType . Обычно ее используют для инициализации переменных и объектов, которым значения потребуется присвоить позже. Кроме того, None неявно возвращается функциями, у которых отсутствует оператор return (см. пример №5 ).
Пример №5. Тип NoneType в Python.
Опять же, как и в случае с логическими константами, имя None чуствительно к регистру символов, поэтому использовать его нужно именно в указанном здесь виде.
Что касается проверки переменной на значение None , то сделать это надежнее всего при помощи известного нам оператора is . Например, для инструкции n = None проверка n is None вернет True .
Вопросы и задания для самоконтроля
1. Выберите верные варианты написания имен: NONE , True , false , None , true , False . Объясните свой ответ. Показать решение.
Ответ. В Питоне имена переменных и констант регистрозависимы и должны использоваться в следующем виде: True , False , None .
2. Установите соответствия между константами None , True , False и утверждениями «Истина», «Ложь», «Нет значения». Показать решение.
Ответ. True ⇨ «Истина», False ⇨ «Ложь», None ⇨ «Нет значения».
3. Посчитайте устно, а затем проверьте себя программно: 3 + False , True*5 + False , 7 — False*5 . Показать решение.
4. Какой результат вернут выражения: 5 < 7 , 5 > 7 , 5 <= 7 . Показать решение.
Ответ. 5 < 7 ⇨ True , 5 > 7 ⇨ False , 5 <= 7 ⇨ True .
5. Будет ли осуществлен вызов функций в следующих примерах: False and foo() , not True or foo() , 1 and foo() ? Показать решение.
Ответ. Вызов функций будет осуществлен во втором и третьем примерах, т.к. после обработки левой части условий конечный результат вычислений еще будет неопределенным. В ответе мы учли, что во втором примере not True == False , а в третьем примере 1 == True .
6. Укажите верный результат выполнения кода print(10 and 20) : 10 and 20 , 10 , 20 , 1 , True . Показать решение.
Ответ. Верным ответом будет 20 , т.к. согласно документации в ходе вычисления выражения x and y интерпретатор сперва вычисляет левый операнд x , возвращая результат вычислений, если он интерпретируется как False . Если же результат будет интерпретироваться как True , интерпретатор вернет результат вычисления правого операнда y . Например, print(10*0 and 20) выведет 0 , print([] and 20) выведет [] , print(False and 20) выведет False , print(True and 20) выведет 20 , print([10*0] and 20) выведет 20 , print([10*5] and 20*3) выведет 60 .
7. Дополнительные тесты по теме расположены в разделе «Логический тип» нашего сборника тестов.
8. Дополнительные упражнения и задачи по теме расположены в разделе «Логические выражения» нашего сборника задач и упражнений.
# Логические выражения
Все люди знакомые с математикой знают и понимают, что такое математическое выражение. Мы часто пользуемся математическими выражениями в уме, хотя можем и не задумываться о терминологии. Например при подсчете сколько стоит купить товар или сколько времени затратили на дорогу.
Математические выражения оформленные в виде кода могут выглядеть следующим образом:
Результатом выполнения математического выражения будет вычисление числа. В примере выше строки с математическими выражениями содержат дополнительные комментарии: результат вычисления и указание, что это математическое выражение.
# Логические выражения
B реальной жизни мы соглашаемся с каким-либо утверждением или отрицаем его. Например, если вам скажут, что сумма чисел 3 и 5 больше 7, вы согласитесь, скажете: «Да, это правда». Если же кто-то будет утверждать, что сумма трех и пяти меньше семи, то вы расцените такое утверждение как ложное.
Логические выражения похожи по своему виду и принципу работна на математические выражения у них лишь два основных различия:
- математические операторы (+, -, *, / и т.п.) заменены логическими операторами (<, >, ==, != и т.п.)
- результатом вычисления логического выражения будет True или False , а не число.
- Математические примеры: 5 + 7 = 12
- Логические примеры: 5 > 7 = False
Логические выражения оформленные в виде кода могут выглядеть следующим образом:
Логическое выражение — это выражение результатом которого является True или False . Еще логические выражения называют также булевы выражения в честь ученого Джордж Буль, который основал булеву алгебру (алгебру логики).
Например, выражение 4 > 5 является логическим, так как его результатом является либо правда, либо ложь. Выражение 4 + 5 не является логическим, так как результатом его выполнения является число.
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
В функциях print записаны выражения, определите их тип и запишите в место троеточия . буквы:
- L для логических выражений,
- M для математических выражений:
# Сравнение чисел
Основное правило сравнения помогает избежать и/или исправить наиболее частые ошибки:
Соблюдайте совпадение типов
Тип сравниваемых значений всегда должен быть одинаковый!
Допустимо сравнение разных типов чисел:
- integer — int()
- дробные числа или числа с плавающей точкой float — float()
Чтобы узнать тип объекта можно воспользоваться функцией type() :
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
В функциях print записаны выражения, определите какие из выражений составлены правильно, а какие нет. Неправильные выражения закомментируйте:
# Операторы сравнения чисел
Говоря на естественном языке мы обозначаем сравнения словами «равно», «больше», «меньше». В языках программирования используются специальные знаки, подобные тем, которые используются в математике:
| Название | Оператор | Синтаксис | Вывод |
|---|---|---|---|
| равно | == | a == b | Если значения a и b равны, то условие становится истинным: True . |
| не равно | != | a != b | Если значения a и b не равны, то условие становится истинным: True . |
| больше | > | a > b | Если значение a больше, чем значение b , то условие становится истинным: True . |
| меньше | < | a < b | Если значение a меньше значения b , тогда условие становится истинным: True . |
| больше или равно | >= | a >= b | Если значение a больше или равно значения b , то условие становится истинным: True . |
| меньше или равно | <= | a <= b | Если значение b меньше или равно значения b , то условие становится истинным: True . |
Присваивание и сравнение – разные операции. Не путайте операцию присваивания с операцией сравнения:
- операцию присваивания значения переменной, c одиночным знаком «равно» = : (value = 15),
- операцию сравнения — два знака «равно» == : value == 15 # True
# Простые логические выражения
Простыми логическими выражениями можно, условно, считать выражения, в которых сравнение происходит между двумя значениями и используется соответственно один оператор сравнения:
В данном примере выражение c = a == b состоит из двух подвыражений. Сначала происходит сравнение (==) переменных a и b. После этого результат логической операции присваивается переменной c. Выражение a, b, c просто выводит значения переменных на экран.
# Упражнения
При работе с водимыми данными не забывайте о преобразовании типов. Все что вводит пользователь — это строка! А в упражнениях предполагается работа с числами. Функции преобразования в числа: int() и float() .
Самостоятельно, без запуска кода, решите логические примеры, т.е. что выведет функция print() :
Сверьте Ваши ответы c ответами компьютера.
Возьмите за основу предыдущий код задания, измените значения переменных: a = — 15, b = 12, c = 8. Решайте самостоятельно все логические выражения и запустив код, сверьте ваши ответы с ответами компьютера.
Напишите программу, которая спрашивает у пользователя: "What year were you born?" И выводит True — если год указан верно, и False — если год указан не верно. Верным можно считать любое положительное число.
Примеры работы программы:
Напишите программу, которая спрашивает у пользователя: "What year is it?" И выводит True — если год указан верно, и False — если год указан не верно. Проверку сравнения проведите с текущим годом.
Примеры работы программы:
Напишите программу, которая запрашивала у пользователя два числа и выводила бы True или False в зависимости от того, больше первое число второго или нет.
Напишите программу, которая запрашивает у пользователя цену мороженного, сколько штук он хочет купить и сколько у него наличных. Если наличных средств достаточно, программа должна выводить True , иначе False .
Напишите программу, которая просит пользователя ввести любые положительное и отрицательное числа. Далее Выводит примеры: с заданными числами и спрашивает чему они равны. Если пользователь вводит правильное решение то выводиться ответ True , иначе False .
# Сравнение строк
Основное правило сравнения помогает избежать и/или исправить наиболее частые ошибки:
Обязательное совпадение типов
Тип сравниваемых значений всегда должен быть одинаковый!
# Операторы сравнения строк
| Оператор | Синтаксис | Вывод |
|---|---|---|
| == | a == b | Если значения a и b равны, то условие становится истинным: True . |
| != | a != b | Если значения a и b не равны, то условие становится истинным: True . |
| > | a > b | Если значение a больше, чем значение b , то условие становится истинным: True . |
| < | a < b | Если значение a меньше значения b , тогда условие становится истинным: True . |
| >= | a >= b | Если значение a больше или равно значения b , то условие становится истинным: True . |
| <= | a <= b | Если значение b меньше или равно значения b , то условие становится истинным: True . |
| in | a in b | Принимает значение True , если находит подстроку a в строке b , и False в противном случае. |
| not in | a not in b | Принимает значение True , если НЕ находит подстроку a в строке b , и False в противном случае. |
# Простые логические выражения
Сравнение строк происходить не столь очевидным способом как числа. Для примера предлагаю подумать над следующими выражениями:
Правила сравнения строк:
- Сравнения строк, т.е. символов содержащихся в кавычках (даже если это цифры), происходит посимвольно.
- Каждый символ закодирован цифровым порядковым номером, и чем выше номер символа, тем он больше, причем для разных букв (заглавных или строчных, русских или английских) разные порядковые номера.
- Если начальные символы совпадают, то сравнение происходит по следующему символу.
Проверку по-символьно происходит следующим образом:
- берется первый символ каждой строки, сравнивается, если символы не равны вычисляется результат True или False . Иначе сравнение переключается к следующему символу.
- берется следующий символ каждой строки, сравнивается, если символы не равны вычисляется результат True или False . Иначе происходит сравнение по следующему символу.
- Если в одной строке ещё остались символы, а в другой закончились, то будет произведено сравнение символа с пустотой. Любой символ больше пустоты, и даже пробел больше пустоты. Результатом будет True или False в зависимости от оператора сравнения.
Пошаговое выполнение логического выражения можно представить следующим образом:
Для общего ознакомления с некоторым объемом символов можно запустить следующий код:
Результат выполнения будет примерно следующим, троеточием заменены не которые малопонятные символы:
Данный пример вывода необходим для понимания сравнения строк посимвольно.
Представим числовую ось например от -20 до 20. Мы понимаем, что одно число больше другого, потому что оно расположено правее от числа, с которым сравнивается. И число меньше, если стоит левее числа с которым оно сравнивается.
Если выведенную последовательность символом представить как числовую ось, то вес символа будет определяться по правилу: чем правее символ находится тем больше он весит.
Для примера можно запустить следующий код и осознать правильность его выполнения:
Данный пример кода специально приведен с результатом True , для простоты понимания.
Для наглядности веса символа и его отображения можно запустить следующий код:
Результат выполнения будет следующим:
Вывод до 1105 символа.
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите ваши варианты ответа (True, False) заданные:
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите символы в результате сравнения которых ответ должен совпадать заданными:
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите символы в результате сравнения которых ответ должен совпадать заданными:
# Сравнение строк операторам "in"
Сравнение строк с использованием оператора in достаточно простая и при этом объемная проверка.
Особенность in заключается в том, что при помощи него можно производить общую проверку для всей строки не по отдельным символам. Т.е. есть возможность проверки наличия символа или строки в другой строке:
Таким образом можно реализовать проверку наличия слова в строке или другого набора символов в строке.
# Упражнения
Решите примеры в задаче сначала самостоятельно, а потом запустите код и сверьте ваши решения с правильными.
Задание: Внутри функции print() вместо троеточия (. ) напишите ваши варианты ответа (True, False) заданные:
Напишите напишите программу, которая спрашивает "What day of week is it?" и выводит True — если название введенного дня существует, и False — если такого дня нет. Реализовать необходимо корректность проверки для любого типа ввода (sunday, Sunday, SUNDAY, SunDay и т.п) для любого дня недели.
Напишите напишите программу, которая спрашивает "What month is your vacation?"
- выводит "Why not" при условии True — если название введенного месяца существует,
- выводит "Incorrect input, no such month" при условии False — если такого месяца нет.
- реализовать необходимо корректность проверки для любого типа ввода (May, mAY, MAY и т.п) для любого месяца.
Напишите напишите программу, которая просит "Enter your login to register: "
- выводит "Congratulations! You are registered." при условии True — если такого имени нет.
- выводит "This login already exists" при условии False — если название введенного имени существует,
- реализовать необходимо корректность проверки для любого типа ввода (Log, lOG, LOG и т.п) для любого имени.
- строка с исходными именами может быть следующая: "log, login, pass, password" и т.п.
# Методы проверки строк
Сравнение строк происходит посимвольно уложняет их проверку, если проводить сравнение с числами. Усложнение заключается в том, чтобы правильно проверить строку необходимо применять циклы для перебора всех символом и отдельно проверки каждого. Но есть еще один простой способ полной проверки строк — это использование методов.
Пример определения, что строка является числом можно сделать двумя способами:
- длинное решение состоит из 6 строк,
- короткое решение в одну сроку с использованием метода .isdigit()
В коде выше можно поменять значения строки "485" на любую другую строку, и убедиться что итог решений одинаков.
Методы — это функции обработки принадлежащие определнному классу и/или объекту. Это команды со скобочками, которые пишутся после точки, после обращения к объкту: object.method(params) . Несколько строчек примеров приведены ниже:
Вспомним, что строка это объект, и это значит что у неё есть методы, которые не только могут изменять сам объект, но и сообщить информацию о нем самом.
В английском языке общие вопросы, на которые отвечают да/нет выглядят следующим образом:
- Is it a cat?
- Is this a boy?
- Is that a car?
Общее в этих вопросах то, что все они начинаются со слова 'is' . Вот и в программировании функции и методы, которые возвращают True/False (сообщаю информацию об объекте "да/нет"), принято именовать со слова is. () .
Чтобы увидеть все параметры проверки строки достаточно обратиться к строке, поставить точку и напечатать 'is': "".is — в выпадающей подсказке выводятся методы пренадлежащие к данному объекту и возвращающие True/False .
# Проверка строк методами без параметров
.isalnum() : определяет, являются ли все символы в данной строке буквенно-цифровыми, то есть только алфавитами и цифрами. Если да, то возвращает True , иначе возвращает False . Если между символами есть пробел, возвращается False .
.isalpha() : определяет, все ли символы в данной строке являются буквами. Если да, вернет True , иначе False . Если между символами есть пробел, возвращается False .
.isdigit() : определяет, все ли символы строки являются цифрами и есть хотя бы один символ. Если да, вернет True , иначе False . Если между символами есть пробел, возвращается False .
.isdecimal() : определяет, все ли символы в данной строке являются десятичными. Если да, то возвращает True , иначе возвращает False . Если между ними есть пробел, возвращается False .
.islower() : определяет, все ли символы в данной строке находятся в нижнем регистре (строчные). Если да, то возвращает True , иначе возвращает False .
.isnumeric() : определяет, все ли символы в данной строке являются числовыми, то есть числами и показателями степени, которые могут быть дробными. Если да, то возвращает True , иначе возвращает False .
.isprintable() : определяет, можно ли распечатать все символы в данной строке. Если да, то возвращает True , иначе возвращает False . Такие символы, как « \t » или « \n », не печатаются.
.isspace() : определяет, все ли символы в данной строке являются пробелами. Если да, то возвращает True , иначе возвращает False .
.istitle() : определяет, следует ли строка набору правил, чтобы ее можно было квалифицировать как заголовок. Если да, то возвращает True , иначе возвращает False .
.isupper() : определяет, все ли символы в данной строке находятся в верхнем регистре (заглавные). Если да, то возвращает True , иначе возвращает False .
# Проверка строк методами c параметрами
.startswith(prefix, start=None, end=None) : — вернет True , если строка начинается с указанной части стоки (префикса), иначе возвращает False .
- prefix — обязательный параметр — символ или часть строки, которая служит проверкой начала строки;
- start не обязательный параметр, указывает с какого по счету символа начинать проверку строки;
- end не обязательный параметр, указывает на каком по счету символе закончить проверку строки.
.endswith(suffix, start=None, end=None) : — вернет True , если строка заканчивается указанной частью строки (суфиксом), иначе возвращает False .
- suffix — обязательный параметр — символ или часть строки, которая служит проверкой окончания строки;
- start не обязательный параметр, указывает с какого по счету символа начинать проверку строки;
- end не обязательный параметр, указывает на каком по счету символе закончить проверку строки.
# Упражнения
Напишите программу, которая будет определять характеристики строки. Программа запрашивает на ввод строку и далее определяет соответствие строки указанным параметрам:
- состоит из цифр и разных букв,
- только из разных букв,
- только из цифр,
- из строцных букв,
- из прописных букв,
- из пробелов,
- строка заголовок
Пример работы программы может быть следующим:
Напишите программу, которая будет определять характеристики строки. Программа запрашивает на ввод строку и далее определяет не соответствие строки указанным параметрам:
- не состоит из цифр и разных букв,
- не состоит из разных букв,
- не только из цифр,
- не из строцных букв,
- не из прописных букв,
- не из пробелов,
- не строка заголовок
Пример работы программы может быть следующим:
Напишите программу, которая будет определять характеритику строки. Использовать нужно методы обработки и провеки строк. Пользователя просят вести строку, далее происходит проверка символов:
- наличие только из цифр (numbers),
- содержит большие буквы (upper case),
- содержит маленькие букв (lower case),
- наличие только из пробелов (space only),
- строка содержит разные символы (different symbols, len),
- строка пустая (empty)
В итоге выводится результат характеристики введеной строки.
Пример работы программы:
Другой пример работы программы:
Напишите программу, которая будет определять отсутствующие элеменый в строке. Использовать нужно методы обработки и провеки строк. Пользователя просят вести строку, далее происходит проверка символов:
- не состоит из цифр (numbers),
- не содержит большие буквы (upper case),
- не содержит маленькие букв (lower case),
- не состоит только из пробелов (space only)
В итоге выводится результат характеристик несоотвествия введеной строки.
Пример работы программы:
Другой пример работы программы:
# Преобразование к логическому типу
Нам известны три типа данных – целые и вещественные (дробные) числа, и также строками. Новый четвертый – логический тип данных (тип bool ). Его также называют булевым. У этого типа всего два возможных значения: True (правда) и False (ложь):
Здесь переменной a было присвоено значение True , после чего с помощью встроенной в Python функции type() проверен ее тип. Интерпретатор сообщил, что это переменная класса bool . Понятия «класс» и «тип данных» в данном случае одно и то же. Переменная b также связана с булевым значением.
В программировании False обычно приравнивают к нулю, а True – к единице. Чтобы в этом убедиться, можно преобразовать булево значение к целочисленному типу:
Возможно и обратное. Можно преобразовать какое-либо значение к булевому типу:
И здесь работает правило: всё, что не 0 и не пустота , является правдой: True .
# Инверсия — not
В Python есть унарный логический оператор not — отрицание. Он превращает True в False , а False в True . Унарный он потому, что применяется к одному выражению, стоящему после него, а не справа и слева от него как в случае бинарных and и or .
Выражение у < 15 возвращает True . Применив оператор not , получаем False .
Число 5 преобразуется в True , отрицание True дает False . Ноль приравнивается к False . Отрицание False дает True .
# Сложные логические выражения
Логические выражения типа kByte >= 1023 являются простыми, так как в них выполняется только одна логическая операция. Однако, на практике нередко возникает необходимость в более сложных выражениях. Может понадобиться получить ответ «Да» или «Нет» в зависимости от результата выполнения двух простых выражений. Например, «на улице идет снег или дождь», «переменная news больше 12 и меньше 20».
В таких случаях используются специальные операторы, объединяющие два и более простых логических выражения. Широко используются два оператора – так называемые логические И (and) и ИЛИ (or).
Чтобы получить True при использовании оператора and, необходимо, чтобы результаты обоих простых выражений, которые связывает данный оператор, были истинными. Если хотя бы в одном случае результатом будет False , то и все сложное выражение будет ложным.
Чтобы получить True при использовании оператора or , необходимо, чтобы результат хотя бы одного простого выражения, входящего в состав сложного, был истинным. В случае оператора or сложное выражение становится ложным лишь тогда, когда ложны оба составляющие его простые выражения.
Допустим, переменной x было присвоено значение 8 (x = 8), переменной y присвоили 13 (y = 13). Логическое выражение y < 15 and x > 8 будет выполняться следующим образом. Сначала выполнится выражение y < 15 . Его результатом будет True . Затем выполнится выражение x > 8 . Его результатом будет False . Далее выражение сведется к True and False , что вернет False .
Если бы мы записали выражение так: x > 8 and y < 15 , то оно также вернуло бы False. Однако сравнение y < 15 не выполнялось бы интерпретатором, так как его незачем выполнять. Ведь первое простое логическое выражение x > 8 уже вернуло ложь , которая, в случае оператора and , превращает все выражение в ложь .
В случае с оператором or второе простое выражение проверяется, если первое вернуло ложь , и не проверяется, если уже первое вернуло истину . Так как для истинности всего выражения достаточно единственного True , неважно по какую сторону от or оно стоит.
# Упражнения
Напишите следующую программу:
- Присвойте двум переменным любые числовые значения.
- с помощью оператора and составьте два сложных логических выражения, одно из которых дает истину , другое – ложь .
- используя оператор or составьте два сложных логических выражения, одно из которых дает истину , другое – ложь .
Составьте программу сравнения строковых переменных:
- с пятью простыми разными логическими выражениями;
- с четырьмя сложными логическими выражениями;
- объясните результат.
Напишите программу, которая спрашивает у пользователя: "What day of month is it?" И выводит True — если день указан верно, и False — если день указан не верно. Указанный день считается верным, если число от 1 до 31.
Напишите программу, которая спрашивает у пользователя: "What number of month were you born?" И выводит True — если месяц указан верно, и False — если не верно. Указанный месяц считается верным, если число от 1 до 12.