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

2024-09-27 19:23:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经做了一个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()

它甚至可以在我不把它写进文件的时候工作,但是当我这样做的时候,它只给出经过的时间,不给出其他任何东西,有时它也会给出这个随机数,但就是这样。。。有什么帮助吗?你知道吗


Tags: importinputreturntimedefnumwriteint
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)),您都会得到合理的结果(例如,当给定510作为输入时,2.71828),所以我很确定这是您的问题。你知道吗

然而,f.seek(0, 0)确实意味着用计时信息覆盖输出的开头,这几乎肯定是不需要的。你知道吗

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)

会有用的。你知道吗

相关问题 更多 >

    热门问题