Python 有没有办法用逻辑语句(not、and、or)替换一段字符串
所以,我刚刚开始学习Python,我得到了一个任务,来制作一个程序,它以命题演算公式和X,Y,Z(真或假)的值作为输入。然后写下答案是否正确。公式应仅包含3个运算:-(非),&(和),v(或)。公式中的变量应仅为X、Y、Z,且“全部”可以出现0次或更多次Python 有没有办法用逻辑语句(not、and、or)替换一段字符串,python,python-3.x,logical-operators,Python,Python 3.x,Logical Operators,所以,我刚刚开始学习Python,我得到了一个任务,来制作一个程序,它以命题演算公式和X,Y,Z(真或假)的值作为输入。然后写下答案是否正确。公式应仅包含3个运算:-(非),&(和),v(或)。公式中的变量应仅为X、Y、Z,且“全部”可以出现0次或更多次 可能的公式示例: Y -((YvX)和Y) --X(双负) -Z&Z 变量的值应以二进制形式给出,如下所示: 010(X=f,Y=t,Z=f)。对于变量的值,我这样做了 value = input("Value: ") X = valu
可能的公式示例:
- Y
- -((YvX)和Y)
- --X(双负)
- -Z&Z
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、and、or替换符号(-,&,v)。大概是这样的:
a = input()
print(a.replace("v", or))
但是你不能这么做,所以我不知道怎么做。你可以试试这个:
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))
请注意,替换的“or”、“and”和“not”是字符串,而不是逻辑运算符。您可以执行以下操作:
>>> 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
您可以使用所应用的更改创建一个新字符串(这实际上是
str.replace
所做的),但是字符串是不可变的,因此不能就地更改。也就是说,您必须用字符串”或“
”来替换“v”
,而不是运算符,因为运算符不是标识符,所以不能这样使用。首先,我认为最好知道您是否应该使用Python的eval/code解释器来完成此任务,或者编写公式解析器是否也是任务的一部分。然后你必须自己解决所有的关联和优先顺序等问题。