2

S を S1 に置き換えましたが、正常に動作しています。sympy における S の意味がわかりませんでした。

#!/usr/bin/env py
import itertools
import sys
import sympy

data = ['next_state=(D1&S1&~SE)|(~S1&~SE&D0)|(SE&SI))']

#data = ['next_state=(D1&S&~SE)|(~S&~SE&D0)|(SE&SI))']


data_1 = data[0].split(',')
com = None
for item in data_1:
    if item.find('next_state=')!= -1:
        item_list = item.split('=')
        item_op = item_list[len(item_list) -1].lstrip('(').rstrip(')')
        item_op = "(" + item_op + ")"
        print item_op
        expr = sympy.sympify(item_op)
        temp_list = [ str(data) for data in expr.free_symbols]
        temp_list.remove('D1')

        #print len(temp_list), temp_list
        for truth_values in sympy.cartes([0, 1], repeat=len(temp_list)):
            values = dict(zip(temp_list, truth_values))
            print  values.items(), expr.subs(values)
            if str(expr.subs(values)) =="D1":
                com = sorted(values.items())
                break
        print "com",com
4

2 に答える 2

1

を使用すると、解析をよりきめ細かく制御できますparse_expr。特に、SymPy 名を使用したくない場合は、グローバルを に設定できます{}

>>> from sympy.parsing.sympy_parser import parse_expr
>>> parse_expr('(D1&S&~SE)|(~S&~SE&D0)|(SE&SI)', global_dict={'Symbol':Symbol})
(SE ∧ SI) ∨ (D₀ ∧ ¬S ∧ ¬SE) ∨ (D₁ ∧ S ∧ ¬SE)

(Symbolシンボルを解析するには、インクルードが必要です)。

または、使用したくない名前がわかっている場合は、それらを上書きすることができますsympify

>>> sympify('(D1&S&~SE)|(~S&~SE&D0)|(SE&SI)', {'S': Symbol('S')})
(SE ∧ SI) ∨ (D₀ ∧ ¬S ∧ ¬SE) ∨ (D₁ ∧ S ∧ ¬SE)
于 2013-11-14T04:14:46.700 に答える