You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python帕斯卡三角形生成器运行结果全为1的问题排查

帕斯卡三角形生成器输出全为1的问题排查

核心错误

问题出在构造结果列表的逻辑:

  • 列表推导式[next(pascal_triangle()) for _ in range(10)]中,每一轮循环都会重新执行pascal_triangle(),相当于每次都创建了一个全新的、从初始状态开始运行的生成器实例
  • 对全新的生成器调用next(),永远只会拿到生成器产出的第一个值,也就是初始count=0时计算的组合数C(0,0)=1,所以最终列表的10个元素全是1
  • 额外优化点:计算组合数时建议用整数除法//替代普通除法/后转int的写法,能避免大数运算时的浮点数精度问题。

修正方案

只需要提前创建好单个生成器实例,再重复调用next()从这同一个生成器里按顺序取值即可,修正后完整代码:

import math

def combination(n, r):
    t = math.factorial(n) // (math.factorial(r) * math.factorial(n - r))
    return t

def pascal_triangle():
    """Return numbers from pascal triangle"""
    count = 0
    while count >= 0:
        for element in range(count + 1):
            t = combination(count, element)
            yield t
        count += 1

# 初始化单个生成器实例,复用实例取值
gen = pascal_triangle()
lst = [next(gen) for _ in range(10)]
print(lst)

运行结果

执行后输出为[1, 1, 1, 1, 2, 1, 1, 3, 3, 1],和帕斯卡三角按行展开的序列完全一致。你之前写的预期序列漏了第二行开头的1,属于计数偏差。

内容的提问来源于stack exchange,提问作者Curly0606

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:24:23