Python 3.x 理解阶乘和备用代码

Python 3.x 理解阶乘和备用代码,python-3.x,Python 3.x,这里是Python新手。我试图理解以下计算欧拉数的代码: import math num(i=10): sum([1 / math.factorial(z) for z in range(0, i)]) 我真的很想更好地掌握方程式是如何在代码中实现的。我已经阅读了很多教程,但我对它们的理解还不够透彻,无法将一个概念应用于上述代码中的独特情况。有人能一步一步地向我解释一下代码中发生了什么吗?此外,我还没有弄清楚如何进行阶乘,如果有人能解释如何在没有导入的情况下在函数中输入阶乘(困难的方式

这里是Python新手。我试图理解以下计算欧拉数的代码:

import math

num(i=10):
   sum([1 / math.factorial(z) for z in range(0, i)])

我真的很想更好地掌握方程式是如何在代码中实现的。我已经阅读了很多教程,但我对它们的理解还不够透彻,无法将一个概念应用于上述代码中的独特情况。有人能一步一步地向我解释一下代码中发生了什么吗?此外,我还没有弄清楚如何进行阶乘,如果有人能解释如何在没有导入的情况下在函数中输入阶乘(困难的方式),那将对我非常有帮助。

要理解上述代码,首先必须理解语言本身<代码>e=1/0+1/1!+1/2!+1/3!+1/4!+...,因此您需要执行以下操作:

total=0
for i in range(100):
  total +=1/math.factorial(i)

print(total)
2.7182818284590455
以防您了解什么是for循环以及它是如何运行的。这比你上面写的要快得多

现在在python中有一种叫做列表理解的东西。也就是说,从for循环创建列表而不必预先定义列表。因此,您可以执行“[i for i in range(10)],这将创建一个包含10个元素的列表。因此,您可以在创建列表时操纵每个元素

 [i**2 for i in range(10)]

 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
因此,在您的例子中,您正在对范围(100)内的i执行
[1/math.factorial(i)]
。这将创建列表
[1.0,1.0,0.5,0.16666,0.0416666664,…]
,然后通过在此列表上调用
sum
来添加列表。ie
sum([1/math.factorial(i)表示范围(100)])

定义自己的阶乘 阶乘是将所有数字从1乘至指定值的函数。
factorial(0)
设置为1

阶乘(3)=1*2*3

因此,您可以将其定义为:

def factorial(x):
    if x == 0: return 1
    val = 1
    for i in range(1,x+1):
        val *=i
    return val


factorial(3)
Out[40]: 6

factorial(4)
Out[41]: 24
还可以使用递归性定义阶乘:

def factorial(x):
    if x==0: return 1
    else: return x * factorial(x-1)