Python 3.x 理解阶乘和备用代码
这里是Python新手。我试图理解以下计算欧拉数的代码: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)]) 我真的很想更好地掌握方程式是如何在代码中实现的。我已经阅读了很多教程,但我对它们的理解还不够透彻,无法将一个概念应用于上述代码中的独特情况。有人能一步一步地向我解释一下代码中发生了什么吗?此外,我还没有弄清楚如何进行阶乘,如果有人能解释如何在没有导入的情况下在函数中输入阶乘(困难的方式
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
来添加列表。iesum([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)