与sympy / pyqt python集成和区分

时间:2015-02-23 19:57:06

标签: python math sympy

我正在创建一个系统,使用python 3来对用户进行集成和区分,当我显示问题时,它们的形式如下:

-25*x**(3/5)/3 + 6*x**(4/3) - 5*x**6/3 + x**2/2 - 4*x

如何将其更改为以下形式:

-25x^(3/5)/3 + 6x^(4/3) - 5x^6/3 + x^2/2 - 4x

我也想要它,所以当用户输入等效的答案时,它仍然被识别

2 个答案:

答案 0 :(得分:1)

对于简单的显示更换,您可以使用:

def format_math(string):
    return (string.replace("**", "^")).replace("*", "")

然后您可以使用它与用户输入来比较他们的输入答案与您的输入答案。

 x = format_math("-25*x**(3/5)/3 + 6*x**(4/3) - 5*x**6/3 + x**2/2 - 4*x")
 # -25x^(3/5)/3 + 6x^(4/3) - 5x^6/3 + x^2/2 - 4x
 user_input = format_math(input("Enter your answer: "))
 # If the user enters # -25x^(3/5)/3 + 6x^(4/3) - 5x^6/3 + x^2/2 - 4x or
 # -25*x**(3/5)/3 + 6*x**(4/3) - 5*x**6/3 + x**2/2 - 4*x the program will 
 # recognize both as correct
 if x == user_input:
     return True

来自python docs:

答案 1 :(得分:1)

如果打算使用sympy,则以下内容将起作用:

import sympy as sp
x = sp.symbols('x')
sp.init_printing()

y = -25*x**(sp.Integer(3)/sp.Integer(5)
    )/sp.Integer(3) + 6*x**(sp.Integer(4)/sp.Integer(3)
    ) - sp.Integer(5)*x**sp.Integer(6)/sp.Integer(3) + x**sp.Integer(
    2)/sp.Integer(2) - 4*x

y

SymPy expression

然后可以使用sympy工具简化和比较表达式。如果最好不要显式地使用sp.Integer()来阻止Python进行分割,那么在使用sp.sympify()将字符串转换为SymPy表达式之前,可以使用正则表达式将其替换为原始表达式字符串。 / p>