首页 > 解决方案 > 你如何让生成器释放一个值?

问题描述

目前我正在尝试使用 Python 制作二项式系数。所以我尝试创建 3 个不同的生成器,一个用于 n!, k! 和 (nk)!。因为我知道 return 不会返回一个值,而是一个存储内存的位置,所以我尝试使用 yield。但是,如果我将 yield 如下所示,它会以某种方式存储另一个内存,而不是在 ans 公式中相互分割。我仍然感到困惑,因为我认为这是我的缩进,但是当我摆弄它时,它只是不断给出错误消息。任何人都可以帮助修改它以释放一个值吗?我只想让生成器吐出值,以便它们可以用于最后一行中的 ans 公式。

def binom_coeff(n,k):
    def fact(n):
        basic = 1
        for i in range(1,n+1):
            basic = basic * i
    yield basic

    def fact(k):
        basic_3 = 1
        for j in range(1,j+1):
            basic_3 = basic_3 * j
    yield basic_3

    def fact_d(n,k):
        basic_2 = 1
        for m in range(1, n-k+1):
            basic_2 = basic_2 * m
    yield basic_2
        
    ans = basic / (basic_3 * basic_2)

    return ans

标签: pythonpython-3.x

解决方案


我不认为你想要一个发电机在这里。Justreturn basic等。这些语句应该在函数内部。目前,yield声明不是。

即使您确实想使用生成器,也永远不会调用这些函数。此外,还有一些错别字。

def binom_coeff(n,k):
    def fact(n):
        basic = 1
        for i in range(1, n+1):
            basic = basic * i
        return basic

    ans = fact(n) / (fact(k) * fact(n-k))
    return ans

推荐阅读