Импликация в питоне как записать python
Перейти к содержимому

Импликация в питоне как записать python

  • автор:

Как сделать импликацию?

Нужно сделать таблицу истинности по данной формуле: F = (А→В)˄¬А. И тут есть действие импликация (А→В). И я вот не знаю как его сделать. При выводе, результатом выводится: 1111111111111111111111111111111100110011001100110011001100110011, хотя не должно. И вот я не понимаю, где я сделал ошибку

11 апр 2021 в 12:08
Ничего не понял.
2 дня назад

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 

Отслеживать
ответ дан 2 дня назад
123k 24 24 золотых знака 128 128 серебряных знаков 307 307 бронзовых знаков

+(a<=b) - прикольно, не видел такого варианта на питоне ) Но может всё же "явное лучше не явного" и int(a<=b) ? ) Хотя красиво, конечно, надо запомнить )

2 дня назад

У меня не удалось найти ошибку в коде, но если нужно просто решить задачу, то можно воспользоваться фрагментом ниже. Там правда задействованы функции, словари и срезы строк, однако в этом не очень сложно, зато очень важно разобраться. Если пишешь свой "мудрённый" код (по сути любой код, в частности если опираешься на самые базовые команды), то опиши алгоритм действий.

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.

  • Вопрос задан более трёх лет назад
  • 9959 просмотров

Комментировать
Решения вопроса 0
Ответы на вопрос 2

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

if ( выражение A ) < if ( выражение B ) < сделать_что-то_полезное >else < сбой >; >

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

if ( выражение A ) and ( выражение B )

При стандартных опциях компилятора (Delphi, C++ Builder) проверка идет до тех пор, пока результат не станет очевидным, и если А ложно, то (А и В) ложно вне зависимости от В, и не нужно ставить еще один условный оператор.

//выражение A - ложно if ( выражение A ) < //Дальше проверка не идет . if ( выражение B ) < сделать_что-то_полезное >. >

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

Есть ли логический оператор импликации в python?

TTL согласен - но это не обязательно так легко увидеть в коде, хотя и проще, чем оригинал. Функция, т. implies(x, y) может помочь в передаче идеи больше, если такая конструкция встречается достаточно часто, чтобы оправдать имя.

user2246674 06 май 2013, в 19:39
@user2246674 user2246674 Согласен, я бы порекомендовал сделать это функцией для ясности.
Gareth Latty 06 май 2013, в 19:42
en.wikipedia.org/wiki/Material_nonimplication также эквивалентен p and not(q)
Sylvain 15 янв. 2019, в 10:36
Показать ещё 2 комментария

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

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

Gareth Latty 06 май 2013, в 19:54
Поделиться
Пожалуйста, посмотрите на этот ответ. Похоже, не все можно найти в документах .
running.t 18 нояб. 2015, в 10:11

@running.trunning.t Его нет в документации, потому что этот ответ неверен - такого оператора нет, вместо этого это злоупотребление другим оператором, которое приводит к тому же результату. Конечным результатом использования этого будет ужасно не понятный, неэффективный код, который может привести к ошибкам.

Gareth Latty 22 нояб. 2015, в 14:03

Просто потому, что это смешно: x = > y может быть bool(x)
Adam Sosnowski 07 окт. 2015, в 16:11
Поделиться

И это (наконец-то) убедительное доказательство того, что True должно быть -1 а False должно быть 0 для логических значений! (Вместо текущего соглашения Python True == 1 ) Потому что тогда мы будем иметь x => y совпадающее с y
Mark Dickinson 07 окт. 2015, в 18:44

Существует оператор обратной импликации:

if y ** x: do_sth() 

Это гласит: если y подразумевается x.

David Zaragoza 17 нояб. 2015, в 23:40
Поделиться

Да. Это именно то, что я искал. И похоже, что это обратное следствие недокументировано, поэтому ответ @Latty в основном неверен.

running.t 18 нояб. 2015, в 10:08

@running.trunning.t Это то, что имеет тот же эффект, что и x => y , но не является оператором для этой цели. Это оператор степени и не логический, а числовой. Он не возвращает True или False , но число. Это медленнее и может привести к ошибкам, не говоря уже о том, что он невероятно неясен и труден для чтения. Я бы настоятельно рекомендовал не делать этого, а вместо этого использовал бы not(p) or q согласно ответу Джуампи .

Gareth Latty 22 нояб. 2015, в 14:02

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

#!/usr/bin/python # From http://code.activestate.com/recipes/384122/ (via http://stackoverflow.com/questions/932328/python-defining-my-own-operators) class Infix: def __init__(self, function): self.function = function def __ror__(self, other): return Infix(lambda x, self=self, other=other: self.function(other, x)) def __rlshift__(self, other): return Infix(lambda x, self=self, other=other: self.function(other, x)) def __or__(self, other): return self.function(other) def __rshift__(self, other): return self.function(other) def __call__(self, value1, value2): return self.function(value1, value2) from itertools import product booleans = [False,True] # http://stackoverflow.com/questions/16405892/is-there-an-implication-logical-operator-in-python # http://jacob.jkrall.net/lost-operator/ operators=[ (Infix(lambda p,q: False), "F"), (Infix(lambda p,q: True), "T"), (Infix(lambda p,q: p and q), "&"), (Infix(lambda p,q: p or q) , "V"), (Infix(lambda p,q: p != q) , "^"), (Infix(lambda p,q: ((not p) or not q)), "nad"), (Infix(lambda p,q: ((not p) and not q)), "nor"), (Infix(lambda p,q: ((not p) or q)), "=>"), ] for op,sym in operators: print "\nTruth tables for %s" % sym print "\np\tq\tp %s q\tq %s p" % (sym,sym) for p,q in product(booleans,repeat=2): print "%d\t%d\t%d\t%d" % (p,q,p |op| q,q |op| p) print "\np\tq\tr\tp %s q\tq %s r\t(p %s q) %s r\tp %s (q %s r)\tp %s q %s r" % (sym,sym,sym,sym,sym,sym,sym,sym) for p,q,r in product(booleans,repeat=3): print "%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d" % (p,q,r,p |op| q,q |op| r, (p |op| q) |op| r, p |op| (q |op| r), p |op| q |op| r) assert( (p |op| q) |op| r == p |op| q |op| r) 

Логические операции в Python

Иллюстрация для баннера личного помощника Иллюстрация для баннера личного помощника

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

Задачи на отрезки

Чтобы найти длину отрезка, нужно из координат конца вычесть координаты начала.

Чтобы найти количество точек - конец минус начало + 1

Задачи на ДЕЛ

Обязательно обращай внимание на ЦЕЛЫЕ НЕОТРИЦАТЕЛЬНЫЕ ИЛИ ПОЛОЖИТЕЛЬНЫЕ ЗНАЧЕНИЯ элементов!

Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наименьшего натурального числа А формула тождественно истинна (то есть принимает значение 1 при любом натуральном значении переменной х)?

for a in range (1, 1500): f = 0 for x in range (1,1500): if ((((x % 23 )!= 0) or ((x % 17) != 0)) 

Задачи на побитовую конъюнкцию

Определи наименьшее натуральное число A, такое что выражение тождественно истинно (то есть принимает значение 1 при любом натуральном значении переменной X)?

for a in range (1, 500): f = 0 for x in range (1,1350): if (((x & 135) !=0) <=(((x & 233) ==0) <= ((x & a) !=0))) == 0: f = 1 if f == 0: print (a)

Общий вариант решения задач:

for A in range(1,500): flag = 1 for x in range(1,1000): if (логическое выражение из задачи) == 0: #ОБРАТИ ВНИМАНИЕ НА ОБЩУЮ СКОБКУ flag = 0 if flag == 1: print(A)

Добавить комментарий

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