理解python中的def函数

时间:2014-12-20 14:21:18

标签: python

我试图在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

2 个答案:

答案 0 :(得分:1)

有一些错误:

  • qe = div(1,fact(m)) + q
  • 中使用之前未定义任何地方
  • 您不能将round(a,5)的结果分配给任何内容。
  • 如果未输入while c < n:循环,则p在执行p = p*n时无法定义。
  • factdiv函数都不会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