痞子问题,功能找不到列表



需要帮助,我正在尝试做一个完美的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)。香港专业教育学院看到人们在课堂上做这件事,尽管如此,我想这样做...

这里有一些问题:

  1. Riffel中的 r列表从未初始化。
  2. 您永远不会将n传递给r.shuffle()
  3. (正如R NAR的评论所说,由于它的范围是本地的,因此 r的状态丢失了。
  4. 调用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

相关内容

  • 没有找到相关文章

最新更新