使用Sympy实现用户输入的正确方式?求导恒返回0问题排查
问题解决:sympify用户输入求导结果始终为0的原因及修复
问题根源
当你用sympify(input("testinput: "))处理用户输入时,sympify会创建新的符号对象——哪怕输入里的变量名和你之前定义的x、y完全一致,这两个x在SymPy里也是完全独立的实体。后续对预先定义的x求导时,新符号和它没有关联,结果自然为0。
而直接赋值userinput = x**0.5+y时,用的是你提前定义好的x、y符号,求导逻辑自然正常。
修复方法
调用sympify时,通过locals参数把已定义的符号传递进去,让sympify直接使用这些现有符号,而非新建:
修改后的代码:
init_printing(use_unicode=True) x, y = symbols('x y', real=True) # 传递已定义的x、y给sympify userinput = sympify(input("testinput: "), locals={'x': x, 'y': y}) x_diff = diff(userinput, x) print(x_diff)
或者更简洁地直接传入当前局部作用域:
userinput = sympify(input("testinput: "), locals=locals())
这样用户输入的公式就会绑定到你预先定义的x、y符号上,求导就能得到正确结果。
内容的提问来源于stack exchange,提问作者DPhysics_Student
相关产品推荐
相关产品推荐

