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
中的while
和shuffle()
? (使用yield
可能会有点矫枉过正,因为我的应用程序一次只会洗牌一次,而不是很多。)
(顺便说一句,我知道lcg()
代码存在统计问题,但我没有找到任何方法在python中使用内置的random()
功能,这使我可以为我的用户提供{ {1}}因为它们是在这里制作的,所以他们可以重播或分享一个洗牌的套牌。如果你有一个建议我会很乐意听到它。)