
该教程讲解如何定义两个协同工作的函数:一个计算单个整数的阶乘,另一个生成从 0 到给定上限(含)的所有阶乘值,并以列表形式返回。
要实现 RangeFactorial(10) 这样的调用方式并返回 [0!, 1!, 2!, ..., 10!] 的列表,关键在于职责分离:将“计算单个阶乘”与“批量生成阶乘序列”拆分为两个独立、可复用的函数。
首先,定义基础阶乘函数(注意处理边界情况 0! = 1):
def factorial(n):
if n < 0:
raise ValueError("阶乘未定义于负数")
result = 1
for x in range(1, n + 1):
result *= x
return result接着,定义主函数 range_factorial(n),它接收一个非负整数 n,遍历 range(0, n + 1)(注意:必须包含 0),对每个数调用 factorial(),并将结果逐个追加到列表中,最后返回该列表:
def range_factorial(n):
"""返回 [0!, 1!, 2!, ..., n!] 的列表"""
result = []
for i in range(0, n + 1): # 从 0 开始,到 n(含)
result.append(factorial(i))
return result使用示例:
print(range_factorial(5)) # 输出: [1, 1, 2, 6, 24, 120]
✅ 注意事项:
- 原问题中循环写为 range(1, 10),会遗漏 0! 且上限固定;新函数支持任意 n ≥ 0,且显式包含 0;
- 函数名采用 snake_case(如 range_factorial)符合 Python 官方 PEP 8 风格指南;
- 添加了对负数输入的校验,提升鲁棒性;
- 若需更高性能(尤其对大 n),可考虑使用 math.factorial 或动态规划优化,但本例以清晰教学为目标,保持逻辑直白。
总结:通过组合单一职责函数,我们实现了简洁、可读、可扩展的阶乘序列生成器——只需一次调用 range_factorial(n),即可获得完整结果列表。










