Python. Урок 3: логические выражения и условный оператор
Булевый (логический) тип — это такой тип данных, который имеет только два возможных значения: True (правда) и False (ложь).
Булевый тип применяется когда для результатом выполнения операции являются значения «да» или «нет».
Например, все операции сравнения двух величин (равно, больше, меньше), операции вхождения элемента в множество и проверка на пересечение множеств возвращают в качестве результата булевый тип.
Логические операции и операторы
>>> a = 15 >>> b = 5 >>> f = True # эквивалентность (равенство) (==) >>> a == b False # инверсия (not, !) >>> not f False # сравнение (>, =, !=) >>> a < b False >>> a > b True >>> a >> a != b True # ИЛИ (конъюнкция, логическое сложение) (or, ||) # True, когда хотя бы одна из частей выражения True # a != b (True) or a < b (False) =>True >>> a != b or a < b True # И (дизъюнкция, логическое умножение) (and, &) # True тогда и только тогда, когда все части выражения True # a != b (True) and a < b (False) =>False >>> a != b and a < b False
Условный оператор
Ход выполнения программы может быть линейным: выражения выполняются, начиная с первого и заканчивая последним. Но чаще всего нам необходимо уметь управлять ходом выполнения программы. Например, часть кода должна выполняться лишь при определенном значении конкретной переменной.
a = 14 b = 8 # Проверяем какая из переменных содержит большее число # из большего вычитаем меньшее if a > b: c = a - b else: c = b - a print("c = ", c)
После ключевого слова if проверяется условие выполнения кода после двоеточия (тела условия). Если условие при if окажется ложным — выполняется код после else.
В языке Python не используются разделители «;» или фигурные скобки (<>). Их роль выполняют отступы от начала строки (по клавише Tab).
То есть код инструкции if, который должен выполнятся если условие истинно обязательно должен иметь отступ вправо!
Основная программа должна иметь тот же отступ, что и инструкция if.
Как обозначается дизъюнкция в питоне
Особый класс операций представляют поразрядные операции. Они выполняются над отдельными разрядами чисел типа int. Но чтобы понять природу поразрядных операций, надо понимать что вообще представляет число в двоичном представление.
Двоичное представление чисел
При двоичной системе каждый разряд числа может иметь только два значения - 0 и 1. Например, 0 в десятичной системе также будет равен 0 в двоичной системе, а 1 в десятичной системе будет соответствовать 1 в двоичной системе. Следующее число в десятичной системе - 2 в двоичной системе будет соответствовать 10. То есть, когда мы к 1 прибавляем 1, то результатом будет 10. И так далее.
Например, 5 в двоичном представлении 101 и имеет три разряда. Для вывода десятичного числа в двоичной системе можно применять спецификатор 0b :
number = 5 # в двоичной форме 101 print(f"number = ") # number = 101
Без указания спецификатора функция print() выводит число в десятичной системе.
При этом Python позволяет сразу определять число в двоичной форме. Для этого число в двоичной форме указывается после префикса 0b :
number = 0b101 # определяем число в двоичной форме print(f"number = ") # number = 101 print(f"number = ") # number = 5 - в десятичной системе
Еще несколько примеров сопоставления между двоичной и десятичной системами:
number1 = 1 # в двоичной системе 0b1 number2 = 2 # в двоичной системе 0b10 number3 = 3 # в двоичной системе 0b11 number4 = 4 # в двоичной системе 0b100 number5 = 5 # в двоичной системе 0b101 number6 = 6 # в двоичной системе 0b110
Логические операции
Логические операции выполняются над отдельными разрядами числа. В Python есть следующие логические операции:
-
& (логическое умножение) Умножение производится поразрядно, и если у обоих операндов значения разрядов равно 1, то операция возвращает 1, иначе возвращается число 0. Например:
x1 = 2 # 010 y1 = 5 # 101 z1 = x1 & y1 print(f"z1 = ") # z1 = 0 x2 = 4 # 100 y2 = 5 # 101 z2 = x2 & y2 print(f"z2 = ") # z2 = 4 print(f"z2 = ") # z2 = 100
x1 = 2 # 010 y1 = 5 # 101 z1 = x1|y1 # 111 print(f"z1 = ") # z1 = 7 print(f"z1 = ") # z1 = 111 x2 = 4 # 100 y2 = 5 # 101 z2 = x2 | y2 # 101 print(f"z2 = ") # z2 = 5 print(f"z2 = ") # z2 = 101
x = 9 # 1001 y = 5 # 0101 z = x ^ y # 1100 print(f"z = ") # z = 12 print(f"z = ") # z = 1100
Здесь число 9 в двоичной форме равно 1001. Число 5 равно 0101. Операция XOR дает следующий результат: 1^0, 0^1, 0^0, 1^1. Здесь мы видим, что первые два разряда чисел содержат разные значения, поэтому первые два разряда получат значение 1. А последние два разряда чисел содержат одинаковые значения, поэтому последние два разряда получат значение 0. Таким образом, мы получаем число 1100 или 12 в десятичной системе. нередко данную операцию применяют для простого шифрования:
x = 45 # Значение, которое надо зашифровать - в двоичной форме 101101 key = 102 # Пусть это будет ключ - в двоичной форме 1100110 encrypt = x ^ key # Результатом будет число 1001011 или 75 print(f"Зашифрованное число: ") decrypt = encrypt ^ key # Результатом будет исходное число 45 print(f"Расшифрованное число: ")
Также можно применять эту операцию для обмена значений чисел:
x = 9 # 1001 y = 5 # 0101 x = x ^ y y = x ^ y x = x ^ y print(f"x = ") # x = 5 print(f"y = ") # y = 9
x = 5 y = ~x; print(f"y: ") # -6
Операции сдвига
Операции сдвига также производятся над разрядами чисел. Сдвиг может происходить вправо и влево.
Таким образом, если исходное число, которое надо сдвинуть в ту или другую строну, делится на два, то фактически получается умножение или деление на два. Поэтому подобную операцию можно использовать вместо непосредственного умножения или деления на два. Например:
a = 16 # в двоичной форме 10000 b = 2 c = a > b #Сдвиг числа 10000 вправо на 2 разряда, равно 100 или 4 в десятичной системе print(d) #4
При этом числа, которые участвую в операциях, необязательно должны быть кратны 2::
a = 22 # в двоичной форме 10110 b = 2 c = a > b # Сдвиг числа 10110 вправо на 2 разряда, равно 101 или 5 в десятичной системе print(d) # 5
Как обозначается дизъюнкция в питоне
Конъю́нкция (от лат. conjunctio — «союз, связь») — логическая операция, по смыслу максимально приближенная к союзу «и»
Наиболее часто в заданиях будет отображаться как " /\ ", реже как " & ".
В питоне мы будем заменять на " and ".
Дизъюнкция (Логическое "ИЛИ"):
Дизъю́нкция (от лат. disjunctio — «разобщение»), логи́ческое сложе́ние, логи́ческое ИЛИ, включа́ющее ИЛИ; иногда просто ИЛИ — логическая операция, по своему применению максимально приближённая к союзу «или» в смысле «или то, или это, или оба сразу».
Наиболее часто в заданиях будет отображаться как " /\ ", реже как " & ".
В заданиях №2 отображается как " \/ ", иногда " || ".
В питоне мы будем заменять на " or ".
Логическое отрицание (Обратное по смыслу)
Отрица́ние (инве́рсия, от лат. inversio — переворот, логи́ческое «НЕ») в логике — унарная операция над суждениями, результатом которой является суждение, «противоположное» исходному. Обозначается знаком ¬ перед или чертой — над суждением.
В питоне если перед переменной ¬ или — над суждением ставим переменную в скобки и перед ней ставим " not( ) ".
Импликация (Следствие)
Имплика́ция (от лат. implicatio «связь; сплетение») — бинарная логическая связка, по своему применению приближенная к союзам «если…, то…».
Импликация записывается как посылка ⇒ следствие; применяются также стрелки другой формы и направленные в другую сторону, но всегда указывающие на следствие.
В коде заменяем на "
Эквиваленция (Равно)
Логическая равнозначность или эквиваленция (или эквивале́нтность[1]) — это логическое выражение, которое является истинным тогда, когда оба простых логических выражения имеют одинаковую истинность. Двуместная логическая операция обычно обозначается символом ≡ или ↔.
В питоне обозначаем двумя знаками равно " == ".
Пример суждения:
Как его мы записываем в питоне:
Пример задание №2
Для всех заданий справедлива одна конструкция решения. Давайте её разберём на примере: Задание взято с сайта "СДАМ ГИА: РЕШУ ЕГЭ"
1. Для начала внимательно посмотрим на таблицу, всего переменных 3 - x, y и z. Также нам надо найти где функция принимает значение 0, то есть ложно.
2. Открываем Питон(IDLE, Pycharm или VisualStudio):
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌1) Прописываем print("x, y, z, w") - для того, чтобы когда мы видели, какая переменная
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌отвечает за какое значение.
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌2) Задаём каждой переменной значение, которое она может принимать - " 0 " или " 1 "
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ (пишем in range(2) потому, что учитывается интервал от 0 до 2 не включительно, то есть
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌᠌ ᠌можно просто написать в скобках 2, а не in range(0, 2)
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌3) Записываем условие с помощью " if ", дальше прописываем нашу функцию и значение
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌которое оно принимает:
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌* Если F = 0, то всё условие ставим в скобки и перед ними ставим not -> not(вся
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌функция). Также можно вставить функцию в скобки и написать после неё написать " ==
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌ ᠌False"
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌᠌ ᠌* Иначе F = 1, ничего не делаем с функцией; или ставим её в скобки, а в конце пишем "
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌ ᠌== True"
᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌ ᠌4) Пишем print(x, y, z, w) и запускаем код, выведенные значения сопоставляем с ᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌᠌ ᠌ ᠌ ᠌ ᠌таблицей ᠌и правильно вписываем, строки с таблице не должны повторяться!
3. Сопоставляем значения с таблицей:
4. Записываем ответ: wzxy
5. Ответ на Решу ЕГЭ:
Конструкция
print('x,y,z,w')
for x in range(2):
for y in range(2):
for z in range(2):
for w in range(2):
if (условие в задание) == True/False:
print(x, y, z ,w)
Автор сообщения: author
К сожалению, стим убирает отступы, так, что когда копировать будите - отступы делайте, чтобы код работал
Основы программирования на языке Python. Логическая операция
Логическая операция – способ построения
сложного
высказывания
из
данных
высказываний,
при
котором
значение
истинности сложного высказывания полностью
определяется значениями истинности исходных
высказываний.
4. Инверсия (логическое отрицание)
Инверсия логической переменной истина,
если переменная ложна, и, наоборот,
инверсия ложна, если переменная истинна.
Обозначение: A
5. Конъюнкция (логическое умножение)
Конъюнкция двух логических переменных
истинна тогда и только тогда, когда оба
высказывания, истинны.
Обозначение: A B
6. Дизъюнкция (логическое сложение)
Дизъюнкция двух логических переменных
ложна тогда и только тогда, когда оба
высказывания ложны.
Обозначение: A B
7. Импликация (логическое следование)
Импликация двух логических переменных
ложна тогда и только тогда, когда из истинного
основания следует ложное следствие.
Обозначение: A B
А - условие
В - следствие
8. Эквивалентность (логическое равенство)
Эквивалентность двух логических переменных
истинна тогда и только тогда, когда оба
высказывания одновременно либо ложны, либо
истинны.
Обозначение:
A B
9. Приоритет выполнения логических операций
При вычислении значения логического выражения
(формулы) логические операции вычисляются в
определенном порядке, согласно их приоритету:
1.инверсия,
2.конъюнкция,
3.дизъюнкция,
4.импликация и эквивалентность.
Операции одного приоритета выполняются слева
направо.
Для
изменения
порядка
действий
используются скобки.
10. Пример
Дана формула
A B C D A
Определите порядок вычисления.
Порядок вычисления:
Инверсия – A
Конъюнкция – C D
Дизъюнкция – A B
Импликация – A B C D
Эквивалентность –
A B C D A
11.
Таблица истинности - таблица, показывающая,
какие
значения принимает составное высказывание при всех
сочетаниях (наборах) значений входящих в него простых
высказываний.
Логическое выражение - составные высказывания в виде
формулы.
Равносильные логические выражения – логические
выражения, у которых последние столбцы таблиц
истинности совпадают. Для обозначения равносильности
используется знак «=».
11
12.
Алгоритм построения таблицы истинности:
1.
подсчитать количество переменных n в логическом
выражении;
2. определить число строк в таблице по формуле m=2n,
где n - количество переменных;
3.
подсчитать количество логических операций в
формуле;
4.
установить последовательность выполнения
логических операций с учетом скобок и приоритетов;
5. определить количество столбцов: число переменных +
число операций;
6. выписать наборы входных переменных;
7. провести заполнение таблицы истинности по столбцам,
выполняя логические операции в соответствии с
установленной в пункте 4 последовательностью.
12
13.
Заполнение таблицы:
1.
разделить колонку значений первой переменной
пополам и заполнить верхнюю часть «0», а нижнюю «1»;
2.
разделить колонку значений второй переменной на
четыре части и заполнить каждую четверть чередующимися
группами «0» и «1», начиная с группы «0»;
3.
продолжать деление колонок значений последующих
переменных на 8, 16 и т.д. частей и заполнение их группами
«0» или «1» до тех пор, пока группы «0» и «1» не будут
состоять из одного символа.
13
14.
Пример 1. Для формулы A/\ (B \/ ¬B /\¬C) постройте таблицу
истинности.
Количество логических переменных 3,
следовательно, количество строк - 23 = 8.
Количество логических операций в формуле 5, количество
логических переменных 3, следовательно количество
столбцов - 3 + 5 = 8.
14
15.
Пример 2. Определите истинность логического
выражения F(А, В) = (А\/ В)/\(¬А\/¬В)
Пример 3. Постройте таблицу истинности для логического
выражения F = (A\/ B) /\ ¬С
Пример 4. Определите истинность формулы:
F = ((С \/В) => В) /\ (А /\ В) => В.
15
16.
Пример 5. Символом F обозначено одно из указанных
ниже логических выражений от трех аргументов: X, Y, Z.
Дан фрагмент таблицы истинности выражения F:
X Y Z F
0
0
0
1
0
0
1
0
0
1
0
1
Какое выражение соответствует F?
1) ¬X/\¬Y/\Z
2) ¬X\/¬Y\/Z
3) X\/Y\/¬Z
4) X\/Y\/Z
16