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 完全实现代码。
我有以下 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 完全实现代码。