Логические выражения и операторы. Урок 6 курса «Python. Введение в программирование»
Логические выражения и логический тип данных
Часто в реальной жизни мы соглашаемся с каким-либо утверждением или отрицаем его. Например, если вам скажут, что сумма чисел 3 и 5 больше 7, вы согласитесь, скажете: «Да, это правда». Если же кто-то будет утверждать, что сумма трех и пяти меньше семи, то вы расцените такое утверждение как ложное.
Подобные фразы предполагают только два возможных ответа – либо «да», когда выражение оценивается как правда, истина, либо «нет», когда утверждение оценивается как ошибочное, ложное. В программировании и математике если результатом вычисления выражения может быть лишь истина или ложь, то такое выражение называется логическим.
Например, выражение 4 > 5 является логическим, так как его результатом является либо правда, либо ложь. Выражение 4 + 5 не является логическим, так как результатом его выполнения является число.
На позапрошлом уроке мы познакомились с тремя типами данных – целыми и вещественными числами, а также строками. Сегодня введем четвертый – bool
). Его также называют булевым. У этого типа всего два возможных значения: True (правда) и False (ложь).
>>> a = True >>> type(a) <class 'bool'> >>> b = False >>> type(b) <class 'bool'>
Здесь переменной a было присвоено значение True
, после чего с помощью встроенной в Python функции type()
проверен ее тип. Интерпретатор сообщил, что это переменная класса bool
. Понятия «класс» и «тип данных» в данном случае одно и то же. Переменная b также связана с булевым значением.
В программировании False
обычно приравнивают к нулю, а True
– к единице. Чтобы в этом убедиться, можно преобразовать булево значение к целочисленному типу:
>>> int(True) 1 >>> int(False) 0
Возможно и обратное. Можно преобразовать какое-либо значение к булевому типу:
>>> bool(3.4) True >>> bool(-150) True >>> bool(0) False >>> bool(' ') True >>> bool('') False
И здесь работает правило: всё, что не 0 и не пустота, является правдой.
Логические операторы
Говоря на естественном языке (например, русском) мы обозначаем сравнения словами «равно», «больше», «меньше». В языках программирования используются специальные знаки, подобные тем, которые используются в математике: >
(больше), <
(меньше), >=
(больше или равно), <=
(меньше или равно), ==
(равно), !=
(не равно).
Не путайте операцию присваивания значения переменной, обозначаемую в языке Python одиночным знаком «равно», и операцию сравнения (два знака «равно»). Присваивание и сравнение – разные операции.
>>> a = 10 >>> b = 5 >>> a + b > 14 True >>> a < 14 - b False >>> a <= b + 5 True >>> a != b True >>> a == b False >>> c = a == b >>> a, b, c (10, 5, False)
В данном примере выражение c = a == b
состоит из двух подвыражений. Сначала происходит сравнение (==
) переменных a и b. После этого результат логической операции присваивается переменной c. Выражение a, b, c
просто выводит значения переменных на экран.
Сложные логические выражения
Логические выражения типа kByte >= 1023
являются простыми, так как в них выполняется только одна логическая операция. Однако, на практике нередко возникает необходимость в более сложных выражениях. Может понадобиться получить ответа «Да» или «Нет» в зависимости от результата выполнения двух простых выражений. Например, «на улице идет снег или дождь», «переменная news больше 12 и меньше 20″.
В таких случаях используются специальные операторы, объединяющие два и более простых логических выражения. Широко используются два оператора – так называемые логические И (and) и ИЛИ (or).
Чтобы получить True
при использовании оператора and
, необходимо, чтобы результаты обоих простых выражений, которые связывает данный оператор, были истинными. Если хотя бы в одном случае результатом будет False
, то и все сложное выражение будет ложным.
Чтобы получить True
при использовании оператора 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 >>> y = 13 >>> y < 15 and x > 8 False
Если бы мы записали выражение так: x > 8 and y < 15
, то оно также вернуло бы False
.
y < 15
не выполнялось бы интерпретатором, так как его незачем выполнять. Ведь первое простое логическое выражение (x > 8
) уже вернуло ложь, которая, в случае оператора and
, превращает все выражение в ложь.В случае с оператором or
второе простое выражение проверяется, если первое вернуло ложь, и не проверяется, если уже первое вернуло истину. Так как для истинности всего выражения достаточно единственного True
, неважно по какую сторону от or
оно стоит.
>>> y < 15 or x > 8 True
В языке Python есть еще унарный логический оператор not
, то есть отрицание. Он превращает правду в ложь, а ложь в правду. Унарный он потому, что применяется к одному выражению, стоящему после него, а не справа и слева от него как в случае бинарных and
и or
.
>>> not y < 15 False
Здесь у < 15
возвращает True
. Отрицая это, мы получаем False
.
>>> a = 5 >>> b = 0 >>> not a False >>> not b True
Число 5 трактуется как истина, отрицание истины дает ложь. Ноль приравнивается к False
. Отрицание False
дает True
.
Практическая работа
Присвойте двум переменным любые числовые значения.
Используя переменные из п. 1, с помощью оператора
and
составьте два сложных логических выражения, одно из которых дает истину, другое – ложь.Аналогично выполните п. 2, но уже с оператором
or
.Попробуйте использовать в логических выражениях переменные строкового типа. Объясните результат.
Напишите программу, которая запрашивала бы у пользователя два числа и выводила бы
True
илиFalse
в зависимости от того, больше первое число второго или нет.
Примеры решения и дополнительные уроки в pdf-версии и android-приложении курса
Что значит //, %, not in, == и другие операторы Python ~ PythonRu
Главная Уроки №8 Операторы в Python / Уроки по Python для начинающих
Предыдущий урок: Строки в Python
Операторами пользуются для выполнения операций с переменными и значениями.
Python делит операторы на следующие группы:
- Арифметические операторы
- Операторы присваивания
- Операторы сравнения
- Логические операторы
- Операторы тождественности
- Операторы принадлежности
- Побитовые операторы
Арифметические операторы в Python
Арифметические операторы используются с числовыми значениями для выполнения общих математических операций:
Оператор | Значение | Пример |
---|---|---|
+ | добавление | 4 + 5 |
— | вычитание | 8 — 3 |
* | умножение | 5 * 5 |
/ | деление | 4 / 2 |
% | остаток от деления | 7 % 2 |
** | возведение в степень | 2 ** 3 |
// | целочисленное деление | 15 // 4 |
Операторы присваивания в Python
Операторы присваивания используются для присваивания значений переменным:
Оператор | Пример | Так же как |
---|---|---|
= | x = 5 | x = 5 |
+= | x += 3 | x = x + 3 |
-= | x -= 3 | x = x — 3 |
*= | x *= 3 | x = x * 3 |
/= | x /= 3 | x = x / 3 |
%= | x %= 3 | x = x % 3 |
//= | x //= 3 | x = x // 3 |
**= | x **= 3 | x = x ** 3 |
&= | x &= 3 | x = x & 3 |
|= | x |= 3 | x = x | 3 |
^= | x ^= 3 | x = x ^ 3 |
>>= | x >>= 3 | x = x >> 3 |
x | x = x |
Операторы сравнения в Python
Операторы сравнения используются для сравнения двух значений:
Оператор | Значение | Пример |
---|---|---|
== | равно | x == y |
!= | не равно | x != y |
> | больше чем | x > y |
меньше чем | x | |
>= | больше чем или равно | x >= y |
меньше чем или равно | x |
Логические операторы в Python
Логические операторы используются для объединения условных операторов:
Оператор | Значение | Пример |
---|---|---|
and | Возвращает значение True если оба утверждения верны | x |
or | Возвращает True если одно из утверждений верно | x |
not | Меняет результат, возвращает False если результат True | not(x |
Операторы тождественности в Python
Операторы тождественности используются для сравнения объектов. Являются ли они одним и тем же объектом с одинаковым местоположением в памяти:
Оператор | Значение | Пример |
---|---|---|
is | Возвращает true если переменные являются одним объектом | x is y |
is not | Возвращает true если переменные разные | x is not y |
Операторы принадлежности в Python
Операторы принадлежности используются для проверки того, представлена ли последовательность в объекте:
Оператор | Значение | Пример |
---|---|---|
in | Возвращает True если последовательность присутствует в объекте | x in y |
not in | Возвращает True если последовательность не присутствует в объекте | x not in y |
Побитовые операторы в Python
Побитовые операторы используются для работы в битовом (двоичном) формате:
Оператор | Название | Значение |
---|---|---|
& | И | Устанавливает каждый бит в 1, если оба бита 1 |
| | Или | Устанавливает каждый бит в 1 если один из двух битов 1 |
^ | только или | Устанавливает каждый бит в 1 если только один из битов 1 |
~ | Не | Переставляет все биты |
Сдвиг влево | Сдвигает влево на количество бит указанных справа | |
>> | Сдвиг вправо | Сдвигает вправо на количество бит указанных справа |
Далее: Списки (list)
- ТЕГИ
- Уроки Python для начинающих
Максим
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Python Q https://yandex.ru/q/loves/python Online
Python QCEO [email protected]://secure.gravatar.com/avatar/b16f253879f7349f64830c64d1da4415?s=96&d=mm&r=gCEO PythonruPythonАлександрРедакторhttps://t.me/cashncarryhttps://pythonru.com/https://yandex.ru/q/profile/cashnc/[email protected] Zabrodin2018-10-26OnlinePython, Programming, HTML, CSS, JavaScriptJavaScript — двойное равенство против тройного равенства | by Brandon Morelli
Изучите равенство в JavaScript за 3 минуты
Udemy Black Friday Sale — Тысячи курсов по веб-разработке и разработке программного обеспечения продаются со скидкой всего за 10 долларов в течение ограниченного времени! Подробную информацию и рекомендации по курсам можно найти здесь .
Проблема
JavaScript имеет два визуально похожие, но очень разные , способы проверки равенства. Вы можете проверить равенство с помощью ==
или ===
. Вот отличия:
Triple Equals
При использовании Triple Equals ===
в JavaScript мы проверяем строгое равенство . Это означает, что и тип , и значение , которые мы сравниваем, должны быть одинаковыми.
Давайте рассмотрим пару примеров строгого равенства.
В этом первом примере мы сравниваем номер 5 с номером 5. Как и ожидалось, возвращается true
. Оба являются числами , и оба имеют одно и то же значение из 5.
5 === 5
// true
Имея это в виду, мы можем рассмотреть еще два примера, которые вернут true
:
'hello world' === 'hello world'
// true (оба строк , равны значений ) true === true
// true (оба логических значений , равны значений )
Потрясающе. Теперь давайте посмотрим на некоторые примеры, которые вернут false
:
В этом примере мы сравним число 77 со строковым значением из 77. Это означает, что наши операнды будут иметь то же значение , но другой тип . Это вернет false
77 === '77'
// false (Number v. String)
Вот два дополнительных примера:
'кошка' === 'собака'
// ложь (оба являются строками, но имеют разные значения) ложь === 0
// ложь (другой тип и другое значение)
Отлично! Опять же, ключевым выводом для тройного (строгого) равенства является то, что и тип , и значение , которые мы сравниваем, должны быть одинаковыми.
Двойное равно
При использовании двойного равенства в JavaScript мы проверяем свободное равенство. Двойное равно также работает приведение типа .
Приведение типа означает, что два значения сравниваются только после попытки преобразовать их в общий тип.
Пример проиллюстрирует это. Напомним ранее, когда мы проверяли следующее со строгим равенством:
77 === '77'
// false (Число против строки)
77
строго не равно '77'
, потому что они имеют разные типы. Однако, если бы мы проверили эти значения с нечетким равенством…
77 == '77'
// true
Как видите, мы получаем true
. Это из-за приведения типов. JavaScript на самом деле попытается преобразовать наши значения в аналогичный тип. В данном случае это удается. Строковое значение '77'
можно легко преобразовать в числовое значение 77
. Поскольку 77
равно 77
, мы получаем ответ true
.
Давайте рассмотрим еще один пример.
Напомним ранее, когда мы тестировали со строгим равенством, если false
равно 0
:
false === 0
// false (другой тип и другое значение)
Очевидно, что это ложь. Однако, если мы запустим то же уравнение с нечетким равенством…
false == 0
// true
Мы получим true
? Почему это? Это связано с ложными значениями в JavaScript. Мы рассмотрим эту концепцию в следующем разделе.
Ложные значения
Итак, почему false == 0
в JavaScript? Это сложно, но это потому, что в JavaScript 0
— это ложное значение .
Приведение типа фактически преобразует наш ноль в ложное логическое значение, тогда false
равно false
.
Есть только шесть фальшивых значений в JavaScript.
ноль 9
— Not A Number Это то, что вы должны в конечном итоге запомнить, если будете часто работать с JavaScript.-
false
,0
и""
При сравнении любого из наших первых трех ложных значений с нечетким равенством они всегда будут равны! Это потому, что все эти значения будут преобразованы в ложь
логическое значение.
false == 0
// true 0 == ""
// true "" == False
// True
2. NULL
и Undeficed
, когда сравните null
и undefined
, они равны только себе и друг другу:
null == null
// true undefined == undefined
// true null == undefined
// true
Если попытаться сравнить null
на любое другое значение, он вернет false
.
3. NaN
Наконец, NaN
ничему не эквивалентны. Даже круче, это даже не она!
NaN == null
// false NaN == undefined
// false NaN == NaN
// false
Key Takeaways
- немного сумасшедший в JS. Если вы не очень хорошо знакомы с JavaScript, свободное равенство может принести больше головной боли, чем оно того стоит. Запоминание шести ложных значений и правил, связанных с ними, может иметь большое значение для понимания слабого равенства.
- Triple Equals лучше, чем double equals. Когда это возможно, вы должны использовать тройное равенство для проверки равенства. Проверяя тип и значение, вы можете быть уверены, что всегда выполняете истинный тест на равенство.
Спасибо за внимание! Если вы готовы, наконец, изучить веб-разработку, ознакомьтесь с Полное руководство по изучению полнофункциональной веб-разработки за 6 месяцев .
Каждую неделю я публикую 4 статьи по веб-разработке. Пожалуйста, учтите введите свой адрес электронной почты здесь , если вы хотите, чтобы вас добавляли в мой еженедельный список рассылки, и подписывайтесь на меня в Twitter .
Если этот пост был полезен, пожалуйста, нажмите кнопку хлопка 👏 несколько раз, чтобы выразить свою поддержку! ⬇⬇
JavaScript Showdown: == vs ===.
Истинные и ложные ценности. Двойное равно… | Брэндон МореллиИстинные ценности против ложных. Двойное равно против тройного равного. Узнай разницу за три минуты.
Эй! Я Брэндон. Я создал codeburst.io и пишу учебные пособия и статьи по JavaScript, чтобы помочь новичкам лучше понять внутреннюю работу веб-разработки. Если у вас есть какие-либо вопросы по статье, оставьте комментарий, и я свяжусь с вами, или найдите меня в твиттере @brandonmorelli. Наконец, когда вы будете готовы по-настоящему погрузиться в веб-разработку, ознакомьтесь с лучшими курсами для изучения полнофункциональной веб-разработки 9.0005
Одна простая причина. В JavaScript есть два визуально похожих, но совершенно разных способа проверки равенства. Это ваш общий обзор различий.
Тройное равенство (===)
Знак тройного равенства вам, вероятно, знаком. Он проверяет на строгое равенство между двумя значениями. И тип , и значение , которые вы сравниваете, должны быть абсолютно одинаковыми.
Примеры строгого равенства:
3 === 3
// истина (оба числа, равные значения) 'test' === 'test'
// истина (обе строки, одинаковые значения) false === false
// true (Оба логических значения, равные значения)
Не строгое равенство:
3 === '3'
// false (Число по сравнению со строкой) 'hello' === 'goodbye'
/ / false (различные строки) false === 0
// false (различный тип: логическое или числовое значение)
Double equals (==)
Двойное равенство проверяет свободное равенство и преформы принуждение типа . Это означает, что мы сравниваем два значения после приведения их к общему типу.
Давайте посмотрим на примеры, чтобы помочь понять это. Помните выше, когда мы проверяли строгое равенство строки и числа?
3 === '3'
// false (Число по сравнению со строкой) 3 == '3'
// true
Когда мы сравниваем число 3
со строкой '3'
с помощью расплывчатого равенства получаем истинных
— они равны.
При двойном равенстве JavaScript пытается преобразовать значения в общий тип. В этом примере JavaScript преобразует строковое значение '3'
в число, а затем сравнивает 3
и 3
. Отсюда истинное значение
.
Falsy Values
Как насчет другого примера:
false === 0
// false (другой тип: логическое значение или число) false == 0
// true
В этом примере мы видим, что при сравнении с нечетким равенством false == 0
оценивается как true
. Это более сложный пример, но он связан с тем фактом, что в JavaScript 0
является значением false .
В JavaScript всего шесть ложных значений.
- ложь
- 0 (ноль)
- «» (пустая строка)
- ноль
- Не определенный
- NAN (не число)
Сравнение False
, 0
и "
с свободным равенством (= Quare). = 0
// true 0 == «»
// true «» == false
// true
null
и undefined
равны только сами себе:
не определено == не определено
null == undefined // true
NaN
не эквивалентен ничему (даже самому себе!):
NaN == null
NaN == undefined
NaN == NaN
// false
Triple Equals === победитель.
По возможности для проверки равенства следует использовать тройное равенство. Проверяя тип и значение, вы всегда выполняете настоящую проверку на равенство.
Приведение типов может включать некоторые сумасшедшие правила (как я показал выше). Если вы не очень хорошо знакомы с JavaScript, двойное равенство может привести к большему количеству проблем и головной боли, чем оно того стоит. Знание шести ложных значений может иметь большое значение для определения того, почему что-то оценивается до 9.