2013-11-13 2 views
2

Я заменяю S на S1, и он отлично работает. Я не мог понять, что такое значение S в sympy.Значение S в Sympy

#!/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 

ответ

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) 
+0

Thx для обеспечения исправления – user765443

3

S является реестром синглетов SymPy. Он реализует метод , который является сокращением для sympify(). Использование S является наиболее лаконичным способом построения рациональных чисел

http://mattpap.github.io/scipy-2011-tutorial/html/gotchas.html

 Смежные вопросы

  • Нет связанных вопросов^_^