使用' yield'而不是'返回'洗牌卡

时间:2017-10-09 20:20:34

标签: python random

The function at this link and reproduced below uses a yield而非return。由于某种原因,还有一个while True循环。

def lcg(modulus, a, c, seed):
    while True:
        seed = (a * seed + c) % modulus
        yield seed

我想使用lcg()并在没有while循环的情况下对其进行编码,并使用return而不是yield。我的代码在我测试过的10张卡的假甲板上工作正常。但是每次使用基于代码here的shuffle()时,我需要最终洗牌52张。

def shuffle(deck,seed):
    global modulus
    global constant
    global mult
    global last

    n = len(deck)
    last = seed
    for i in range(n):
        last = lcg(modulus, mult, constant , last)
        j = last % n-i
        temp = deck[i-1]
        deck[i-1] = deck[j]
        deck[j] = temp
    return deck

我的问题是,如何在我的应用中更好地使用yield中的whileshuffle()? (使用yield可能会有点矫枉过正,因为我的应用程序一次只会洗牌一次,而不是很多。)

(顺便说一句,我知道lcg()代码存在统计问题,但我没有找到任何方法在python中使用内置的random()功能,这使我可以为我的用户提供{ {1}}因为它们是在这里制作的,所以他们可以重播或分享一个洗牌的套牌。如果你有一个建议我会很乐意听到它。)

0 个答案:

没有答案