2014-12-26 8 views
2

Что я не понимаю?Python Sympy MathML: mathml vs print_mathml

Следующий код работает отлично:

from sympy.printing.mathml import print_mathml 
s = "x**2 + 8*x + 16" 
print_mathml(s) 

Но это порождает ошибку:

from sympy.printing.mathml import mathml 
s = "x**2 + 8*x + 16" 
print mathml(s) 

В конце концов, что я пытаюсь сделать, это получить «х ** 2 + 8 * х + 16 ", преобразованный в презентацию MathML для вывода в Интернете. Так что мой план был использовать функцию MathML() на строке, а затем отправить выход через C2p, например, следующее:

from sympy.printing.mathml import mathml 
from sympy.utilities.mathml import c2p 
s = "x**2 + 8*x + 16" 
print(c2p(mathml(s)) 

Но, как было сказано, функция MathML() бросает ошибку.

ответ

3

У меня недостаточно очков репутации для комментариев, поэтому я отвечу тогда.

Согласно документу Sympy doc. Функция Sympy.printing.mathml mathml ожидает выражения. Но в строчном формате?

http://docs.sympy.org/dev/modules/printing.html#sympy.printing.mathml.mathml

Часть кода:

def mathml(expr, **settings): 
    """Returns the MathML representation of expr""" 
    return MathMLPrinter(settings).doprint(expr) 

-

def doprint(self, expr): 
    """ 
    Prints the expression as MathML. 
    """ 
    mathML = Printer._print(self, expr) 
    unistr = mathML.toxml() 
    xmlbstr = unistr.encode('ascii', 'xmlcharrefreplace') 
    res = xmlbstr.decode() 
    return res 

Какие ошибки вы получили?

ли вы получили это:

[....] 
return MathMLPrinter(settings).doprint(expr) File "C:\Python27\lib\site-packages\sympy\printing\mathml.py", line 39, in doprint 
unistr = mathML.toxml() AttributeError: 'str' object has no attribute 'toxml' 

Я предполагаю, что это что-то не так с библиотекой.

unistr = mathML.toxml() 

Вы могли бы взглянуть здесь http://docs.sympy.org/dev/_modules/sympy/printing/mathml.html , чтобы увидеть файл.

+0

спасибо. Основываясь на вашем ответе, я смог выкопать функцию «sympify», которая преобразует строку в выражение следующим образом: –

2

Как отмечает @Emyen, проблема в том, что ваш ввод является строкой. Используйте sympify, чтобы преобразовать строку в выражение, или, еще лучше, создать выражение как выражение Python с использованием символов, как

x = symbols('x') 
expr = x**2 + 8*x + 16 

См https://github.com/sympy/sympy/wiki/Idioms-and-Antipatterns#strings-as-input по ряду причин, почему использование строк вместо выражений является плохой идеей.

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