请在以下链接中找到问题的描述:
EOF while parsing at the end of my code ;estimatePi() problem from pyschools
根据印度数学家Srinivasa Ramanujan找到的公式,编写一个函数EstimatePi()来估计并返回pi的值。它应该使用while循环来计算求和项,直到最后一项小于1e -15为止。计算距离的公式如下:
import math
def estimatePi():
k=0
x=0
sum1=0
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
while x<1/1000000000000000 :
x=(factorial((4*k))*(1103+26390*k))/(factorial(k)**4*396**(4*k))
sum1+=x
k+=1
return 9801/(2*math.sqrt(2)*sum1 )
print(estimatePi())
最佳答案
一些注意事项:
在Python2中,由于整数除法,1/1000000000000000
恰好是0
,因此while循环永远不会运行,sum1
停留在0
且9801/(2*math.sqrt(2)*sum1)
失败并被0除。您可以将其替换为1E-15
。
您从x = 0
开始,但是一旦计算出x
,它就会变得比1E-15
大,因此while
循环仅运行一次。您可以将x
设置为1
并运行while
循环,只要x
大于1E-15
pi
是在math
中定义的,因此您可能不应该导入math
。您可以简单地使用**0.5
而不是sqrt
。
对于大于1的任何(factorial((4*k))*(1103+26390*k))/(factorial(k)**4*396**(4*k))
,0
在Python2中返回k
。您应该改用浮点除法。
这是经过修改的代码,应该可以在Python2和Python3上正常工作:
def estimatePi():
k = 0
x = 1
sum1 = 0
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
while x > 1E-15:
x = float(factorial(4*k)*(1103+26390*k)) / (factorial(k)**4*396**(4*k))
sum1 += x
k += 1
return 9801/(2*2**0.5*sum1)
print(estimatePi())
# 3.141592653589793 in Python3
# 3.14159265359 in Python2
关于python - 我已经在PC上尝试以下操作,并且效果很好,但在pyschools网站上仍然显示“浮点除以零”。为什么??,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53756163/