我计算e的程序停止了工作

时间:2014-10-27 20:41:00

标签: python calculus

我已经制作了一个python程序来计算e并且直到前一段时间才开始工作,但是现在突然间它再也没有工作并且行为非常奇怪。这是源代码:

from decimal import *
import time
dig = int(input('Enter number of digits: '))
getcontext().prec = dig +5
def factorial(n):
    num = Decimal(1)
    while Decimal(n) >= Decimal(1):
        num = Decimal(num)*Decimal(n)
        n = Decimal(n)-Decimal(1)
    return Decimal(num)
def calce(n):
    def calce(n):
        e = 0
        for i in range(0, n+1):
            e = e + Decimal((Decimal(2)*Decimal(i)+Decimal(2)))/Decimal(factorial(Decimal(2)*Decimal(i)+1))
        return Decimal(e)
n = int(input('How many iterations for e?: '))
t0= time.clock()
numb = str(calce(n))
numb = numb[:-4]
f = open("edigits.txt", 'w')
f.write(str(dig))
f.write(" digits.")
f.write("\n")
f.write(str(n))
f.write("!\n\n")
f.write(numb)
t= str(time.clock() - t0)
f.seek(0, 0)
f.write(t)
f.write(" seconds.\n\n")
f.close()

它甚至可以在我不将其写入文件时起作用,但是当我这样做时它只给出了时间并且没有提供任何其他内容,有时它也可能会给出这个随机数,但这是它......有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

问题在于:

def calce(n):
    def calce(n):
        e = 0
        for i in range(0, n+1):
            e = e + Decimal((Decimal(2)*Decimal(i)+Decimal(2)))/Decimal(factorial(Decimal(2)*Decimal(i)+1))
        return Decimal(e)

你的calce函数定义了一个本地函数,也称为calce,对它不执行任何操作,不执行任何操作,只是从最后退出,返回None。因此,当您运行程序时,numb最终始终是字符串'None',并且没有其他任何事情发生。

如果你解决这个问题,无论是删除额外的def行,还是通过调用本地函数(如本地定义后的return calce(n)),你都会得到合理的结果(例如,{{1} }当给出2.718285作为输入时,所以我很确定这是你的问题。

但是,10表示您使用时间信息覆盖输出的开头,这几乎肯定是您不想要的。

答案 1 :(得分:2)

def calce(n):
    def calce(n):
        e = 0
        for i in range(0, n+1):
            e = e + Decimal((Decimal(2)*Decimal(i)+Decimal(2)))/Decimal(factorial(Decimal(2)*Decimal(i)+1))
        return Decimal(e)

calce(n)的定义返回None,因为您已经定义了一个具有相同名称的内部函数。外部calce(n)默认返回None,语句numb = numb[:-4] 删除num的所有值('None')

删除内部函数并将calce(n)定义为

def calce(n):
            e = 0
            for i in range(0, n+1):
                e = e + Decimal((Decimal(2)*Decimal(i)+Decimal(2)))/Decimal(factorial(Decimal(2)*Decimal(i)+1))
            return Decimal(e)

它会起作用。