我正在制作一个程序(w/python 2.7),用泰勒级数近似sin(x),代码如下:
from math import pi
from math import sin
from math import factorial
x=float(raw_input("Degree(in radian, example: 5*pi/4): "))
n=input("n: ")
Sum=0
for i in range(1,n+1):
Sum=Sum+(pow(-1,(i+1))*pow(x,(2*i-1))/factorial(2*i-1))
error=math.fabs(sin(x)-Sum)
print "Using Taylor series for sin(%s) with n = %d returns %f,with error= %f"(x,n,Sum,error)
(很抱歉from math import
搞砸了,这不太好)
但是,当以x=5*pi/4运行时,程序返回
ValueError:float()的文字无效:5*pi/4
我在这里做错了什么?我认为python将x读取为字符串,但无法浮动,但我对了解多少
任何帮助都将不胜感激!
你是对的,python确实将x读取为字符串:
y = raw_input("Degree(in radian, example: 5*pi/4): ")
print y => 5*pi/4
您必须预先计算弧度值,并将其传递给您的程序:
(5 * math.pi)/2 = 7.853981633974483
这将是您作为程序输入所提供的值。
可能有一个实现您想要的解决方案。不过,在使用此解决方案之前,请阅读Python 2 input()
函数的文档。该文档还解释了它在Python 3中被删除的原因!
这是代码:
from math import pi
x = input()
print x
如果运行此代码并输入3 * pi
,它将打印9.42477796076938
。
如果您想从命令行获取a*pi/b格式的值,可以使用以下方法。
x=(raw_input("Degree(in radian, example: 5*pi/4): "))
numerator = float (x.split('*')[0])
denominator =float (x.split('/')[1])
x = numerator* pi /denominator