我试图在python中计算e(2.718283)并且我意识到你不能简单地划分所以我定义了一个函数来划分和舍入到五位数我还定义了一个函数来找到阶乘,这里它是 - 。
def div(x,y):
t = x + 0.00
p = y + 0.00
a = t / p
round(a,5)
print a
def fact(n):
c = 1
d = 1
while c < n:
p = c * d
d = c*d
c = c + 1
if c >= n:
break
p = p*n
print p
m = 0
while m < 20:
e = div(1,fact(m)) + q
q = div(1,fact(m + 1)) + q
if m >= 20:
break
print e `
我执行它并得到这个UnboundLocalError:局部变量&#39; p&#39;在分配之前引用。但事实(3)似乎完美地工作.. 发生了什么事?
PS:我还没有在这里格式化,但我在实际代码中缩进了
编辑
line 20, in <module>
e = div(1,fact(m)) + q
File "/home/anirudh/Desktop/TEST PY/Hark-1.py", line 16, in fact
p = p*n
UnboundLocalError: local variable 'p' referenced before assignment
答案 0 :(得分:1)
有一些错误:
q
在e = div(1,fact(m)) + q
round(a,5)
的结果分配给任何内容。while c < n:
循环,则p
在执行p = p*n
时无法定义。fact
和div
函数都不会return
。 (他们隐含地返回None
。)if m >= 20:
。答案 1 :(得分:0)
首先,在Python中已经有一些更清晰和下降的内置方法来计算阶乘。
import math
print math.factorial(3) #6
print math.factorial(4) #24
如果你想在除以两个整数之后获得浮点值,那么你可以简单地将它们中的任何一个强制转换为float,而不必转换它们。
float_ans = p/float(q)
#or
float_ans = float(p)/q
使用此信息,您可以通过以下方式计算e的值:
#Knowing the fact that e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + 1/5! ....
import math
e = 0
"""
As factorial of 20 is a very large value and you won't require that much of
precision, I have cut down the no of iterations from 20 to 7 only, it also gives
you a fair amount of precision, you can always change the range to increase and
decrease the precision accordingly.
"""
for num in range(0,7):
e+=(float(1)/math.factorial(num))
print e
2.71805555556