有没有办法用逻辑语句替换一段字符串(不,和,或)

时间:2017-09-15 11:47:27

标签: python python-3.x logical-operators

所以,我刚刚开始学习Python,并且我得到了一个赋值,用于创建一个程序,该程序采用命题演算公式和X,Y和Z(True或False)的值作为输入。然后如果答案是真或假,它应该写。公式应该只包含3个操作: - (不),& (和),v(或)。公式中的变量应该只是X,Y,Z,并且所有变量都可以出现0次或更多次。

可能的公式示例:

  • ý
  • - ( - (YvX)及Y)
  • - X(双阴)
  • -Z&安培; Z

变量的值应以二进制形式给出,如下所示:  010(X = f,Y = t,Z = f)。对于变量的值,我做了这个

value = input("Value: ")

X = value[0]
Y = value[1]
Z = value[2]

if X == "0":
    X = False
elif X = "1":
    X = True
else:
    print("False input")

if Y == "0":
    Y = False
elif Y = "1":
    Y = True
else:
    print("False input")

if Z == "0":
    Z = False
elif Z = "1":
    Z = True
else:
    print("False input")

很确定有更好的方法可以做到这一点,但这应该仍然有效。问题在于阅读公式。我的想法是用not,和,或替换符号( - ,&,v)。像这样:

a = input()
print(a.replace("v", or))

但是你不能这样做,所以我不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

input_string = "--X&Y"
output_string = []
for elem in input_string:
    if elem in ["-"]:
        elem = "not "
    elif elem in ["&"]:
        elem = " and "
    elif elem in "v":
        elem = "or "
    output_string.append(elem)
print ("".join(output_string))

请注意,被替换的“或”,“和”和“不是”是字符串,而不是逻辑运算符。

答案 1 :(得分:0)

您可以执行以下操作:

>>> def interpret(values, formula):
...     X, Y, Z=[int(i) for i in values]
...     newF=formula.replace('-', ' not ').replace('v', ' or ').replace('&', ' and ')
...     return eval(newF)
... 
>>> val = raw_input("Value: ")
Value: 011
>>> form = raw_input("Formule : ")
Formule : -(-(YvX)&Y)
>>> interpret(val, form)
True