我已经制作了一个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()
它甚至可以在我不将其写入文件时起作用,但是当我这样做时它只给出了时间并且没有提供任何其他内容,有时它也可能会给出这个随机数,但这是它......有什么帮助吗?
答案 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.71828
和5
作为输入时,所以我很确定这是你的问题。
但是,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)
它会起作用。