Python 的布尔逻辑

Boolean logic with Python

我有以下 JSON:

{
  "condition": "AND",
  "rules": [
    {
      "condition": "OR",
      "rules": [
        {
          "id": "u.url",
          "operator": "contains",
          "value": "URL_A"
        },
        {
          "id": "u.url",
          "operator": "contains",
          "value": "URL_B"
        }
      ]
    },
    {
      "condition": "OR",
      "rules": [
        {
          "id": "u.url",
          "operator": "contains",
          "value": "URL_C"
        },
        {
          "id": "u.url",
          "operator": "contains",
          "value": "URL_D"
        }
      ]
    }
  ]

表示布尔公式:(A or B) and (C or D) 其中A,比如是这个JSON对象:

{
   "id": "u.url",
   "operator": "contains",
   "value": "URL_A"
}

通常,JSON 文件可以用(仅)AND 和 OR 运算符表示任何布尔逻辑。

问题是return一个字符串表示原始公式的乘积之和。即:(A or C) and (A or D) and (B or C) and (B or D)。 例如,结果将是:

(u.url contains URL_A) OR (u.url contains URL_C) AND
(u.url contains URL_A) OR (u.url contains URL_D) AND
(u.url contains URL_B) OR (u.url contains URL_C) AND
(u.url contains URL_B) OR (u.url contains URL_D)

Python 有一个 json 库,可以将您的 Json 数据转换成字典列表。您可以实现一个能够输出 SOP 的递归函数。

例如:

>>> import json
>>> json.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
'[1,2,3,{"4":5,"6":7}]'

如果您使用 DFS 递归到基数,您可以找到基数表达式并按您的方式返回。

因此,浏览字典列表,直到找到基本状态(即字典没有条件字段。

然后备份并取两个规则并对其应用操作。这可以通过一个函数来完成,该函数接受两个字典和 returns 字符串。

由于您正在执行 DFS,因此您会进入下一个分支并发现您 return 'C or D'。

然后你会得到根,这将是这两个分支 ANDed 在一起。

综上所述,如果您不熟悉递归和 DFS 以及如何在 Python 中实现它们,问题基本上就变成了 "Hey, someone implement a full fledged python implementation for me"

为了进一步帮助您,post 可以查看的代码。我怀疑有人会为此 post 完全实现代码。