【问题标题】:Breaking complex condition to sub conditions - Python将复杂条件分解为子条件 - Python
【发布时间】:2019-11-28 09:24:16
【问题描述】:

我正在尝试将充满复杂条件的文档解析为逻辑字典。

eval() 有帮助,但在材料条件(->) 方面我遇到了麻烦(Python 不支持)。

我确信有一个现有的算法可以正确地打破这些条件并以正确的逻辑方式找出每个子条件(这就是我计划在发送之前将“A->B”更改为“not(A) 或 B”的地方到 eval())

我在搜索时找不到任何有用的东西,希望获得见解。

例子:

变量(在代码中):

x = True
y = False
m = True
z = False
c = 3

文件.txt:

(x && y) || m
(x || m) && (y || z)
((x && y) -> m) || z 
(c in {3,5}) && z

期望的输出:

dict = { '(x && y) || m': True, '(x || m) && (y || z)': False, etc.. }

【问题讨论】:

    标签: python parsing conditional-statements eval brackets


    【解决方案1】:

    我之前必须做类似的练习,所以这就是我要做的

    首先要弄清楚eval不能解决哪些操作。您提到了“->”运算符,似乎还有大括号而不是方括号中的列表 例如

    c in {3,5}
    

    对于“->”运算符,您需要获取左右操作数并将它们放入“not (A) || B”。问题在于 A 或 B 是否是括号内的表达式,它们可能是嵌套的。为此,您需要循环遍历左侧(对于 A)和右侧(对于 B)的每个字符并存储表达式,直到找到相应的右括号。然后您可以解决这些问题,然后替换它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多