私はこの機能を持っています:
def req_splitter(req_string):
req = {}
if " AND " in req_string:
cond = "AND"
req_splitted = req_string.split(" AND ")
elif " OR " in req_string:
cond = "OR"
req_splitted = req_string.split(" OR ")
else:
cond = "AND"
req_splitted = [req_string]
if len(req_splitted) > 1:
for sub_req in req_splitted:
sub_req_splitted = req_splitter(sub_req)
req[cond] = list()#new_req
req[cond].append(sub_req_splitted)
else:
req[cond] = req_splitted
return req
次のような文字列を json-logic 条件に変換することを目的としています。
Barracks AND Tech Lab
Lair OR Hive
Hatchery OR Lair OR Hive
Cybernetics Core AND Gateway OR Warpgate
Forge AND Twilight Council AND Ground Armor 1
Spire OR Greater Spire AND Hive AND Flyer Flyer Carapace 2
Spire OR Greater Spire AND Lair OR Hive AND Flyer Attacks 1
json_logic 条件は次のようになります。
{
"and": [
{
"or": [
"Gateway",
"Warpgate"
]
},
"Cybernetics Core"
]
}
上記の例のように、文字列を条件オブジェクトに分割するために、再帰関数はどのように機能する必要がありますか?
問題を理解するには、次のようにします。
json_logicは、上記の辞書のように条件をチェックし、比較内容に応じて結果を返すモジュールです。
条件の仕組み: Key-Value par は 1 つの論理ステートメントです。キーは論理条件を表します。リスト内の値はオペランドを表します。値自体がリストではなく辞書の場合、再帰します。
「ポーランド語表記」と比較できます
最後に、AND ステートメントは OR ステートメントよりも優先度が高く、OR ステートメントは常に一緒に使用されます。