Python中接收用户自定义非线性多项式方程输入及eval用法疑问
处理用户输入的非线性方程(含三角函数)的Python实现
问题
要写Python代码让用户输入类似2*x**2 - sin(x) + 1的非线性方程,试了eval()但不知道怎么定义变量x,当前测试代码是:
s = input("enter your equation here") equation = eval(s)
解决方法
1. 直接计算特定x值的结果
如果只是想算某个x对应的数值,先给x赋值再用eval()就行,别忘了导入math模块(因为用到sin这类数学函数):
import math s = input("输入你的方程:") x = float(input("输入x的值:")) result = eval(s) print(f"结果:{result}")
2. 做成可反复调用的函数
要是需要多次用不同x计算,把方程包装成函数更方便:
import math s = input("输入你的方程:") def calculate(x): return eval(s) # 举个例子测试 print(f"x=0时:{calculate(0)}") # 结果是1 print(f"x=π/2时:{calculate(math.pi/2)}") # 结果约为4.9348
3. 安全提醒
eval()会直接执行用户输入的代码,要是有人输入恶意指令(比如删文件的代码)会搞出大问题。如果是给不熟悉的人用的程序,要么用ast.parse限制允许的语法,要么提前过滤输入里的危险内容。
内容的提问来源于stack exchange,提问作者siddhartha U
相关产品推荐
相关产品推荐

