Импликация в питоне как записать python
Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2024. Stepik
Наши условия использования и конфиденциальности
Public user contributions licensed under cc-wiki license with attribution required
Как сделать импликацию?
Нужно сделать таблицу истинности по данной формуле: F = (А→В)˄¬А. И тут есть действие импликация (А→В). И я вот не знаю как его сделать. При выводе, результатом выводится: 1111111111111111111111111111111100110011001100110011001100110011, хотя не должно. И вот я не понимаю, где я сделал ошибку
11 апр 2021 в 12:08
Ничего не понял.
29 фев в 19:25
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
print("A B A➛B") for a in range(0, 2): for b in range(0, 2): print(a, " ", b, " ", +(a<=b), sep="")
A B A➛B 0 0 1 0 1 1 1 0 0 1 1 1
Отслеживать
ответ дан 29 фев в 19:28
124k 24 24 золотых знака 131 131 серебряный знак 312 312 бронзовых знаков
+(a<=b) - прикольно, не видел такого варианта на питоне ) Но может всё же "явное лучше не явного" и int(a<=b) ? ) Хотя красиво, конечно, надо запомнить )
1 мар в 6:55
У меня не удалось найти ошибку в коде, но если нужно просто решить задачу, то можно воспользоваться фрагментом ниже. Там правда задействованы функции, словари и срезы строк, однако в этом не очень сложно, зато очень важно разобраться. Если пишешь свой "мудрённый" код (по сути любой код, в частности если опираешься на самые базовые команды), то опиши алгоритм действий.
def binary(number): b = bin(number) # result is str ans = b[2:] # first 2 simbol is '0b' return ans a = binary(5) b = binary(7) A = a[::-1] # перевернём строки, чтобы уравнять длины B = b[::-1] # строк простым оператором (+=) k = len(A) - len(B) # разница длин чисел в двоичной системе while k != 0: if k > 0: A += '0' else: B += '0' a = A[::-1] #возвращаем строки в исходный b = B[::-1] # порядок c = ' ' dimpl = < '00': '1', '01': '1', '11': '1', '10': '0' >for i in range(len(a)): c += dimpl[ a[i]+b[i] ] '''Все сценарии импликации указаны в словаре dimpl (dict - impl). Поочерёдно подставляем ему в качестве ключа склееные биты из наших бинарных чисел в формате строк, не боясь получить ошибку выхода за конец строки. В результате также получим строку''' print('a =', a, 'b =', b, 'iplicatiom(a,b) =', c)
Как применяется импликация в программировании?
Что тогда будет следованием? Какой код будет являться импликацией со значением 0 и 1?
Вот я написал такой код:
if (a and b) or not a: print('Yeeea')
Тут все понятно, что импликация будет верна, если :
A = False
A = True and B = True
в остальном случае не верна.
Или вот тоже код реализующий импликацию
def implies(a,b): if a: return b else: return True
Только вопрос был в том, как именно тот же Python использует импликацию в работе операторов if?
Ведь конструкция вложенных if будет верна, только в случае, когда оба условия верны, если первый if(который A) = False, то программа никогда не дойдет до условия B.
- Вопрос задан более трёх лет назад
- 10083 просмотра
Комментировать
Решения вопроса 0
Ответы на вопрос 2
В языках программирования импликация используется, как правило, неявно. Например, конструкция, предполагающая истинность условия B в данном участке программы:
if ( выражение A ) < if ( выражение B ) < сделать_что-то_полезное >else < сбой >; >
будет успешно выполняться тогда и только тогда, когда верна импликация A→B. В то же время эти условия можно спокойно написать в одной строке, объединив их оператором конъюнкции.
if ( выражение A ) and ( выражение B )
При стандартных опциях компилятора (Delphi, C++ Builder) проверка идет до тех пор, пока результат не станет очевидным, и если А ложно, то (А и В) ложно вне зависимости от В, и не нужно ставить еще один условный оператор.
//выражение A - ложно if ( выражение A ) < //Дальше проверка не идет . if ( выражение B ) < сделать_что-то_полезное >. >
В функциональных языках импликация может быть не только правилом вычислений, но и видом отношения между данными, то есть обрабатываться (в том числе и выполняться) и создаваться по ходу выполнения программы.
Логические выражения и операторы в Python 3
Сравнение значений Python и для чего это нужно
Когда мы хотим проверить, зарегистрирован ли пользователь на сайте, мы запрашиваем у него логин и пароль. Если логин существует в базе данных и введённый пароль совпадает с паролем в базе, то мы авторизуем пользователя. Иначе продолжаем запрашивать у пользователя логин и пароль.В примерах ниже мы сравним значения одного типа друг с другом на языке программирования Python.
Вот как реализовано сравнение двух строк в Python :
print(10 == 5) #False
print('abc' == 'abc') #True
Пример с проверкой пароля:
correct_password = 'qwerty'
asked_password = input('Введите пароль: ')
if (correct_password == asked_password):
print('Вы авторизованы')
else:
print('Пароль неверный')
Введите пароль: 123
Пароль неверный
Введите пароль: qwerty
Вы авторизованы
Логическое сравнение или его результат используется в конструкциях if-else и циклах while .
Логические выражения
Логическое выражение в самом простом смысле - это математическое сравнение. В Python вопрос " Что больше: 3 или 5? " будет записан в следующем виде: 3 > 5 и звучать как: “Три больше пяти. Правда? - Нет.”
print(3 > 5) #False
Или такой вариант: 4 != 0 ( 4 не равно 0. Правда?)
print(4 != 0) #True
Как записываются операторы сравнения в Python:
a = 5
b = 10
print(a == b) #False
print(a > b) #False
print(a >= b) #False
print(a < b) #True
print(a print(a != b) #True
Результат такого сравнения можно сохранить в переменную, как и любое другое значение:
a = 5
b = 10
expr = a > b
print(expr) #False
Можно сравнивать сразу несколько значений подряд:
a = 4
expr = 0 a 10
print(expr) #True
a = 15
expr = 0 a 10
print(expr) #False
В итоге в первом значении мы получили True, а во втором Python выдал False.
Сравнение строк
Помимо чисел, в Python можно сравнивать друг с другом строки , списки и другие типы данных.
Вот, например, как выглядит сравнение двух строк в Python:
s1 = 'python'
s2 = 'python'
s3 = 'Python' # Поменяем одну букву на заглавную
print(s1 == s2) #True
print(s1 == s3) #False
Во втором случае результатом оказалась ложь, т.к. сравнение чувствительно к регистру символов.
Также строки можно проверять между собой на большинство/меньшинство.
print('abc' > 'abc') #False
print('abc' > 'aaa') #True
print('abc' > 'x') #False
- В первом случае всё просто - строки равны.
- Во втором: происходит посимвольное сравнение строк. Первые два символа равны, сравниваются следующие.
'b' > 'a' истинно, т.к. символ 'b' стоит в алфавите по порядку после 'a' . Поэтому всё выражение истинно. Чтобы проще было понять, можно вместо букв поставить их порядковые номера в алфавите: 123 > 111 - Посимвольное сравнение не зависит от длины строк, поэтому в третьем случае выражение ложно: 'a' > 'x'
print('a' > 'x') #False
Такое сравнение называется лексикографическим: wikipedia.
Сравнение других типов значений
Сравнение списков аналогично сравнению строк. Например, когда условие в Python не равно. Каждый элемент списка по очереди сравнивается с другим.
print([1, 2, 3] > [1, 2, 3]) #False
print([1, 2, 3] > [1, 1, 1]) #True
print([1, 2, 3] > [25]) #False
Значения разных типов можно также сравнивать между собой:
expr1 = '1' == 1
expr2 = '' == 0
print(expr1) #False
print(expr2) #False
Результат ложный, т.к. типы данных не равны. (Строка и число).
Проверка на большинство/меньшинство разных типов выдаст ошибку:
print('a' > 1)
TypeError: '>' not supported between instances of 'str' and 'int'
print((1, 1, 1) [1, 2, 3])
TypeError: '
Преобразование значений в тип bool
Значения False или True можно получить непосредственно из самих значений, без операции сравнения. Например, строка 'a' будет True , а 0 - False . Для этого нужно вызвать функцию bool() и передать ей параметр, который мы хотим преобразовать:
var1 = bool('a')
var2 = bool(0)
print(var1) #True
print(var2) #False
А вот пустая строка или список будут равны False :
var1 = bool('')
var2 = bool([])
print(var1) #False
print(var2) #False
Логика простая - если размер списка или строки равен нулю, то переменная bool в Python будет равна False .
0 - это так же False.
Все остальные значения, отличные от 0 или с длиной больше 0 будут True.
Как правило, булевые операции в Python нужны, когда проверяется наличие какой-либо информации в переменной, например, заполнил ли пользователь необходимые поля в форме регистрации или оставил их пустыми.
Упрощённая версия такой проверки:
user_name = input('Введите Ваше имя: ')
if user_name:
print(f'Добро пожаловать, !')
else:
print('Это обязательное поле')
Введите Ваше имя:
Это обязательное поле
Введите Ваше имя: Иван
Добро пожаловать, Иван!
Логические операторы
Если мы хотим проверить на истинность сразу несколько логических выражений или значений, то нам нужно использовать в Python 3 логические операторы .
Например ввел ли пользователь своё имя и больше ли 12 лет его возраст:
name = 'Иван'
age = 10
expr = name and age > 12
print(expr) #False
Мы использовали логический оператор and . Он возвращает истинное значение, только тогда, когда по обе стороны от него находятся истинные значения.
Есть ещё or и not .
- or - Возвращает истинное значение, когда хотя бы с одной стороны от него находится истинное значение.
- not - Меняет значение на противоположное.
Все они работают с булевыми эквивалентами значений. Т.е. сначала преобразуют их в тип bool , а затем производят вычисления.
print(True and False) # False
print(True or False) # True
print(not True) # False
print(not False) # True
Логические операции можно комбинировать между собой в одном выражении:
expr = not True and False
print(expr) #False
Вычисления происходят по порядку. Чтобы изменить его, надо использовать скобки, как в математике.
expr = not (True and False)
print(expr) #True
Значение поменялось на истинное, т.к. сначала считается выражение внутри скобок ( False ), а затем происходит его инверсия. В Python есть одна особенность при использовании операторов and и or . Они не обязательно возвращают только True b False . Они возвращают непосредственно само значение, на котором остановились вычисления.
Посмотрим на примере:
name1 = 'Иван'
age = 0
name2 = 'Василий'
print(name1 and age and name2) #0
print(name1 or age or name2) #Иван
- В первом случае вернулся 0 , потому что расчёты остановились на переменной age . Так как все операторы являются and , то если одно из значений ложно, то и всё выражение будет ложно, следовательно, дальше считать нет смысла.
- Во втором случае обратная ситуация. Все операторы являются or , поэтому вычисления останавливаются на первом истинном значении. Собственно, оно нам и вернулось - значение переменной name1.
Другие виды логических операторов
Существуют также другие логические операции, которые используются реже и в специфических ситуациях.
Например, есть логические побитовые операции , которые применяются в шифровании данных.
Одна из таких - XOR : исключающее ИЛИ. В Python этой операции соответствует символ ^ .
Пример шифрования числа. Вместо чисел могут быть любые бинарные данные.
phrase = 2022
key = 101
# Шифрование используя ключ
encrypt = phrase ^ key
print(encrypt)
# Расшифровка сообщения используя ключ
decrypt = encrypt ^ key
print(decrypt)
1923
2022
Список всех побитовых операторов в Python:
Операция | Значение |
a & b | Побитовое И для a и b |
a | b | Побитовое ИЛИ для a и b |
a ^ b | Исключающее ИЛИ для a и b |
~a | Инверсия битов для a |
a | Побитовый сдвиг влево для a на b |
a >> b | Побитовый сдвиг вправо для a на b |
Однако не все логические операции присутствуют в питоне. Например, в питоне нет логической операции импликация .
Заключение
Мы рассмотрели логические выражения и операторы в Python 3. Больше о работе с python читайте в блоге timeweb.cloud .
Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.