Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法用逻辑语句(not、and、or)替换一段字符串_Python_Python 3.x_Logical Operators - Fatal编程技术网

Python 有没有办法用逻辑语句(not、and、or)替换一段字符串

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

所以,我刚刚开始学习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 = 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解释器来完成此任务,或者编写公式解析器是否也是任务的一部分。然后你必须自己解决所有的关联和优先顺序等问题。