此处是Python新手。我试图理解以下代码来计算欧拉数:
import math
num(i=10):
sum([1 / math.factorial(z) for z in range(0, i)])
我真的很想更好地掌握如何在代码中完成方程式。我已经阅读了许多教程,但是我对它们的理解不够充分,无法将概念应用于上述代码中的独特情况。有人可以向我逐步解释此代码中发生了什么吗?此外,我还无法弄清楚如何进行阶乘,如果有人能解释如何在不导入的情况下以函数(困难的方式)输入阶乘,这对我很有帮助。
答案 0 :(得分:1)
为使您理解上面的代码,首先必须了解语言本身。 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 range(10)中的i]],这将创建10个元素的列表。因此,您可以在创建列表时操纵每个元素,即
[i**2 for i in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
因此,根据您的情况,您正在做[1/math.factorial(i) for i in range(100)]
。这将创建列表[1.0, 1.0, 0.5, 0.16666666666666666, 0.041666666666666664,...]
,然后通过在此列表上调用sum
来添加列表。即sum([1/math.factorial(i) for i in range(100)])
阶乘是将所有数字从1乘以指定值的函数。 factorial(0)
设置为1
factorial(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)