
该教程讲解如何定义一个函数,接收单个整数参数n,计算并返回包含0!到n!的完整阶乘列表,同时修正原始代码中的语法错误、逻辑偏差(如遗漏0!)和命名规范问题。
要实现 RangeFactorial(10) 这样的调用方式,并返回 [0!, 1!, 2!, ..., 10!] 的列表,需明确两点:
- 阶乘函数(factorial(n))应正确处理边界情况(特别是 0! = 1);
- 范围阶乘函数(推荐命名为 range_factorial(n),遵循 Python 命名规范)负责遍历 0 到 n(含),逐个调用 factorial 并收集结果。
以下是完整、可运行的实现:
def factorial(n):
"""计算非负整数 n 的阶乘"""
if n < 0:
raise ValueError("阶乘未定义于负数")
result = 1
for x in range(1, n + 1): # 当 n==0 时,range(1, 1) 为空,循环不执行,result 保持为 1
result *= x
return result
def range_factorial(n):
"""返回从 0! 到 n! 的阶乘值列表(长度为 n+1)"""
return [factorial(i) for i in range(n + 1)] # 使用列表推导式,简洁高效
# 示例调用
print(range_factorial(5))
# 输出: [1, 1, 2, 6, 24, 120] ← 对应 0!, 1!, 2!, 3!, 4!, 5!
print(range_factorial(10))
# 输出包含 11 个元素的列表,首项为 1(0!),末项为 3628800(10!)✅ 关键改进说明:
- 修复原始代码中缺失的冒号 :(def RangeFactorial(n):);
- 将循环范围改为 range(n + 1),确保包含 0(原代码 range(1, 10) 跳过了 0! 且上限错误);
- 使用小写加下划线的函数名(range_factorial),符合 PEP 8 规范;
- 添加输入校验,提升鲁棒性;
- 采用列表推导式替代显式 append,更 Pythonic;
⚠️ 注意事项:
- 阶乘增长极快,n > 100 时数值会非常大(Python 支持任意精度整数,但内存与性能需关注);
- 若后续需频繁调用,可考虑动态规划预计算以避免重复运算;
- 不建议在 range_factorial 中直接 print——函数职责应是“计算并返回”,输出交由调用方控制,利于复用与测试。










