我已经用S1代替S并且它运行正常。我无法理解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
答案 0 :(得分:3)
S是SymPy的单身人士登记处。它实现了调用方法,这是sympify()的简写。使用S是构造有理数的最简洁方法
http://mattpap.github.io/scipy-2011-tutorial/html/gotchas.html
答案 1 :(得分: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)