我已经做了一个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()
它甚至可以在我不把它写进文件的时候工作,但是当我这样做的时候,它只给出经过的时间,不给出其他任何东西,有时它也会给出这个随机数,但就是这样。。。有什么帮助吗?你知道吗
问题在于:
您的
calce
函数定义了一个局部函数,也称为calce
,它什么也不做,什么也不做,只是从末尾掉下来,返回None
。所以,当你运行你的程序时,numb
最后总是字符串'None'
,其他什么都不会发生。你知道吗如果您解决了这个问题,无论是通过删除额外的
def
行,还是通过调用本地函数(比如在本地定义之后的return calce(n)
),您都会得到合理的结果(例如,当给定5
和10
作为输入时,2.71828
),所以我很确定这是您的问题。你知道吗然而,
f.seek(0, 0)
确实意味着用计时信息覆盖输出的开头,这几乎肯定是不需要的。你知道吗calce(n)
的定义返回None
,因为您定义了一个同名的内部函数。默认情况下,外部calce(n)
返回None
,语句numb = numb[:-4]
去掉num的所有值('None')删除内部函数并将calce(n)定义为
会有用的。你知道吗
相关问题 更多 >
编程相关推荐