from sympy import * from convert_formula import * def differential(function, point): """ 计算函数在指定点的导数 :param function: 函数表达式 :param point: 自变量的取值点 :return: 导数值 """ # 转换函数表达式为SymPy表达式 independent_variable, function = split_function(function) function = sympify(convert_formula(function)) independent_variable=symbols(independent_variable) derivative = diff(function, independent_variable) derivative_value = derivative.subs(independent_variable, point) return derivative_value def differential_function(function): """ 计算函数的导数 :param function: 函数表达式 :return: 导函数 """ # 转换函数表达式为SymPy表达式 independent_variable, function = split_function(function) function = sympify(convert_formula(function)) independent_variable=symbols(independent_variable) derivative = diff(function, independent_variable) return str(derivative) def integration(function): """ 计算函数的积分 :param function: 函数表达式 :return: 积分公式 """ # 转换函数表达式为SymPy表达式 independent_variable, function = split_function(function) function = sympify(convert_formula(function)) independent_variable=symbols(independent_variable) integral = integrate(function, independent_variable) return str(integral)+'+C' def test_differential(): """ 测试微分函数 """ function = 'f(x)=x^2' point = 2 assert differential(function, point) == 4 assert differential_function(function) == '2*x' assert integration(function) == 'x**3/3+C' def UI(): """ 用户交互界面 """ while True: print('请选择功能 1. 微分 2. 积分 3. 返回') choice = input('请输入您的选择:') if choice == '1': function = input('请输入函数表达式:(注:只支持形如f(x)=的表达式,不支持y=的表达式)') point = input('请输入自变量的取值点,求导函数请留空:') if point == '': print('导函数为:', differential_function(function)) elif 'pi' in point: print('导数值为:', differential(function, point)) else: print('导数值为:', differential(function, float(point))) elif choice == '2': function = input('请输入函数表达式:(注:只支持形如f(x)=的表达式,不支持y=的表达式)') print('积分公式为:', integration(function)) elif choice == '3': print('谢谢使用') break else: print('输入错误,请重新输入') if __name__ == '__main__': test_differential() UI()