请在以下链接中找到问题的描述:
EOF while parsing at the end of my code ;estimatePi() problem from pyschools

根据印度数学家Srinivasa Ramanujan找到的公式,编写一个函数EstimatePi()来估计并返回pi的值。它应该使用while循环来计算求和项,直到最后一项小于1e -15为止。计算距离的公式如下:

python - 我已经在PC上尝试以下操作,并且效果很好,但在pyschools网站上仍然显示“浮点除以零”。为什么??-LMLPHP

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停留在09801/(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/

10-11 00:01