需要帮助,我正在尝试做一个完美的riffleshuffle或" faro shuffle"。我一直在努力,我做了另一个线程,但违反了规则,希望我这次的问题更好。
这就是我的代码现在的外观:
def shuffle(n):
r=[]
for (a, b) in zip(lista[0:int(n/2)], lista[int(n/2):n]):
r.append(a)
r.append(b)
def riffel(n):
lista = []
for a in range(0,n):
lista.append(a)
for i in range(1,1000):
r.shuffle()
if lista==r:
print("done",i)
我要我的功能几乎可以计算卡戴克需要多少个riffleshuffle(在我的情况下,它应该适用于任何偶数n)才能再次恢复正常(0,1,2,3,...,51)。香港专业教育学院看到人们在课堂上做这件事,尽管如此,我想这样做...
这里有一些问题:
- Riffel中的
r
列表从未初始化。 - 您永远不会将
n
传递给r.shuffle()
- (正如R NAR的评论所说,由于它的范围是本地的,因此
r
的状态丢失了。 - 调用
r.shuffle()
是无效的
您可以按以下方式修复此代码:
def shuffle(n, lista): #<--- Now passing in lista as a parameter
r = []
for (a, b) in zip(lista[0:int(n/2)], lista[int(n/2):n]):
r.append(a)
r.append(b)
return r
def riffel(n):
lista = []
for a in range(0,n):
lista.append(a)
r_prev = lista
for i in range(1,1000):
r = shuffle(n, r_prev) #<--- changed how this is called, added arguments to func call
if r == lista: #<--- List a doesn't change so we can keep comparing to it.
print("done",i)
r_prev = r #<--- Making r_prevthe newly shuffled entry to pass to shuffle in next iteration