【问题标题】:How to create a PyEDA boolean expression using a string containing a boolean expression?如何使用包含布尔表达式的字符串创建 PyEDA 布尔表达式?
【发布时间】:2021-01-22 04:46:31
【问题描述】:

我正在从前端获取( (A & B) | (C & ~D) ) 形式的布尔表达式。我需要将其转换为可以由 PyEDA 解决的布尔表达式。在 PyEDA 中编写布尔表达式有两个步骤。

  1. 使用A,B,C,D = map(exprvar, "abcd") - This becomes a problem when number of boolean variables are dynamicA = exprvars("a", 4) - solves the dynamic variable issue but need to convert letters in the equation to A[0],A[1]... 创建布尔变量A、B、C、D。
  2. 将表达式写为( (A & B) | (C & ~D) )

尝试了以下方法。 boolean_exp 表示布尔表达式字符串,num_variables 表示字符串中变量的个数。

def parse_boolean_expression(boolean_exp,num_variables):
    count = 0
    boolean_exp_list = list(boolean_exp)
    for index,char in enumerate(boolean_exp_list):
        if char.isalpha():
            boolean_exp_list[index] = "Z[{}]".format(count)
            count += 1
    final_bool_exp = "".join(boolean_exp_list)

    Z = exprvars("z", num_variables)
    expression = final_bool_exp

这种方法不起作用,因为创建的表达式和变量是字符串类型,而正确的类型应该是表达式的 <class 'pyeda.boolalg.expr.OrOp'> 和变量的 <class 'pyeda.boolalg.expr.variables'>

在交互模式下,我们可以轻松地完成上述步骤,但我们如何在脚本模式下使用从前端发送的具有动态变量数量的布尔表达式字符串来构建这个表达式?

【问题讨论】:

    标签: python parsing boolean-logic boolean-expression pyeda


    【解决方案1】:

    pyEDA 有一个expr() 函数,可以将文本转换为表达式。 这是它在您的示例中的工作方式。

    >>> f = expr('( (A & B) | (C & ~D) )')
    
    >>> f
    Or(And(C, ~D), And(A, B))
    
    >>> type(f)
    <class 'pyeda.boolalg.expr.OrOp'>
    

    这里是更多信息的链接。
    text to expression

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多