首页 > 解决方案 > 向后打印阶乘?

问题描述

我想做一个循环,给出从 10 到 1 的阶乘。

所以我有这个代码:

factorial = 1
for i in range(1,11):
    factorial = factorial * i
    print(i,'!=', factorial)

但这显示了这样的结果:

1 != 1
2 != 2
3 != 6

但是我希望他们这样:

10 != 3628800
9 != 362880
8 != 40320

我尝试了一些不同的东西,但没有什么真正有效,请问有什么想法吗?

标签: pythonpython-3.x

解决方案


results = []
factorial = 1
for i in range(1,11):
    factorial = factorial * i
    results.append('{:2,}! = {:,}'.format(i, factorial))

print('\n'.join(reversed(results)))

输出:

10! = 3,628,800
 9! = 362,880
 8! = 40,320
 7! = 5,040
 6! = 720
 5! = 120
 4! = 24
 3! = 6
 2! = 2
 1! = 1

为了减少所需的内存量,您可以这样做:

results = []
factorial = 1
for i in range(1, 11):
    factorial *= i
    results.append(factorial)

for i, value in enumerate(reversed(results)):
    print('{:2,}! = {:,}'.format(len(results)-i, value))

如果你喜欢列表推导,也可以用这种有点老套的方式来完成:

res = []
res = [res[-1] for x in range(1, 11) if not res.append(x*res[-1] if res else 1)]

for i, value in enumerate(reversed(res)):
    print('{:2,}! = {:,}'.format(len(res)-i, value))

推荐阅读