Изменить позицию ввода для вызова функции в Python - PullRequest
0 голосов
/ 19 декабря 2018

Это мой код:

from sympy import symbols, Equivalent
from sympy.logic.boolalg import to_cnf as fnc, Implies, to_cnf
from sympy.abc import a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, v, w, x, y, z


def eq(a, b):
    return fnc(Equivalent(a, b), True)

inr = str(input('Enter formula: '))
x = ' '
for i in inr:
     #print(inr[inr.index(i-2)])
     if i == '>':
         i = '>>'
         x += i
     elif i == '=':

         print(i)
         i = 'Equivalent'
         x += i

     else:
         x += i

print(fnc(x, True))

Вместо input =(a,b) для вызова Equivalent function я хочу ввести (a=b).Как я могу это сделать?Я пытался контролировать элемент до и после = и добавить его в функцию Equivalent, когда вы вводите (a = b), вывод должен быть (a|~b)&(b|~a), но он не работает.

i= sympy.Equivalent(symbols((inr[inr.index(i) - 1])), symbols(inr[inr.index(i) + 1]))

1 Ответ

0 голосов
/ 19 декабря 2018

Итак, исходя из вашего примера ввода / вывода, который был:

IN : поэтому при вводе (a = b) вывод должен быть?- user5173426

OUT : должно быть (a | ~ b) & (b | ~ a) - Yacine Benatia

Я внес несколько изменений в ваш существующий код:

from sympy import symbols, Equivalent
from sympy.logic.boolalg import to_cnf as fnc, Implies, to_cnf
from sympy.abc import a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, v, w, x, y, z


def eq(a, b):
    return fnc(Equivalent(a, b), True)

inr = str(input('Enter formula: '))
x = ' '
# get the part of the formula/string before =
y = inr.rsplit('=', 1)[0]
# get the part of the formula/string after =
z = inr.rsplit('=', 1)[1]
for i in inr:
     if i == '>':
         i = '>>'
         x += i
     elif i == '=':
         i = 'Equivalent'
         x = i
     elif i != ')':
         x += y
         x += ','
         x +=  z
     # print(x)

print(fnc(x, True))

ВЫХОД:

OUT

...