簡體   English   中英

如何在sympy中獲取DNF / CNF表達式的子句?

[英]How to get clauses of the DNF/CNF expression in sympy?

根據有關邏輯包的 sympy文檔,我們可以使用to_cnf / to_dnfto_dnf simplify_logic(expr, form='cnf'/'dnf')將任意布爾表達式轉換為DNF / CNF形式。

但是之后,如何從結果中獲取子句呢?

我們可以嘗試使用args字段。 但是使用它非常不方便。 例如,如果你改變一個簡單的語句,比如~a成CNF / DNF,那么你得到~a結果,然后調用(~a).args回報()這不是第追捧! (當然,我可以解決if檢查問題,但這很丑陋)

我在sympy中找不到本機方法,但是當寫到使用args很難看時,我錯了。 這是解決方案。

def clauses(expr) -> tuple:    # for DNFs only
    if not isinstance(expr, sympy.logic.boolalg.Or):
        return expr,
    return expr.args

請注意,該函數針對真/假值返回(true,) / (false,) 對於CNF,請更改為isinstance(expr, And)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM