0

我有一个由两个函数组成的函数:

def cipher_functions(afile):

    def swap_joker1(afile):
        idx = afile.index(27)

        if idx == len(afile) - 1:
            afile[idx],afile[0]=afile[0],afile[idx]
        else:
            afile[idx],afile[idx+1]=afile[idx+1],afile[idx]
        return afile

    def swap_joker2(afile):
        idx = afile.index(28)
        if idx!=len(afile)-2 and idx!=len(afile)-1:
            afile[idx],afile[idx+1],afile[idx+2]=afile[idx+1],afile[idx+2],afile[idx]
        elif idx==len(afile)-2 and idx!=len(afile)-1:
            a=afile.pop(idx)
            afile.insert(1,a)
        elif idx!=len(afile)-2 and idx==len(afile)-1:
            a=afile.pop(idx)
            afile.insert(2,a)
        return afile

    def swap_jokers(afile):
        idx1=afile.index(27)
        idx2=afile.index(28)
        a=afile[0:idx1]
        b=afile[0:idx2]
        if len(a) < len(b) and idx1!=0 and idx2!=len(afile)-1:
            afile = afile[idx2+1:] + cfile[idx1:idx2+1] + afile[:idx1]
        elif len(a)<len(b) and idx1==0 and idx2!=len(afile)-1:
            afile = afile[idx2+1:] + afile[idx1:idx2+1]
        elif len(a)<len(b) and idx1!=0 and idx2==len(afile)-1:
            afile = afile[idx1:idx2+1] + afile[:idx1]
        elif len(a)<len(b) and idx1==0 and idx2==len(afile)-1:
            afile = afile
        elif len(b)<len(a) and idx2!=0 and idx1!=len(afile)-1:
            afile = afile[idx1+1:] + afile[idx2:idx1+1] + afile[:idx2]
        elif len(b)<len(a) and idx2==0 and idx1!=len(afile)-1:
            afile = afile[idx1+1:] + afile[idx2:idx1+1]
        elif len(b)<len(a) and idx2!=0 and idx1==len(afile)-1:
            afile = afile[idx2:idx1+1] + afile[:idx2]
        elif len(b)<len(a) and idx2==0 and idx1==len(afile)-1:
            afile=afile
        return afile

    def bottom_move(afile):
        lastvalue=afile[-1]
        if lastvalue is 28:
            afile=afile
        else:
            afile=afile[lastvalue:-1]+afile[0:lastvalue]+afile[-1:]
        return afile

    def top_move(afile):
        firstvalue=afile[0]
        if firstvalue is 28:
            return afile[-1]
        else:
            return afile[firstvalue]

     return top_move(bottom_move(swap_jokers(swap_joker2(swap_joker1(afile)))))

如果 swap_joker2(swap_joker1(afile)) 的结果不是 27 或 28,则记住这个数字并返回步骤 1(swap_joker1),如果结果为 27 或 28,则返回步骤 1(swap_joker1)。我对这部分感到困惑,我尝试使用 while 语句,但我不知道如何表达“回到第 1 步”。谁能帮助我?

4

1 回答 1

0

如果你是为特殊情况做的,swap_joker2(swap_joker1(afile))那么,这可能有点困难,但我想你不是在尝试那样做。

如果您的问题是swap_joker2(afile)不是 27 或 28,请记住这个数字并返回步骤 1(swap_joker1)。如果这个结果也不是 27 或 28,重复步骤 1,那么你的函数定义应该有点递归。

你的 spaw_joker1 和 swap_joker2 应该看起来像

def swap_joker1(afile):
    idx = afile.index(27)

    if idx == len(afile) - 1:
        afile[idx],afile[0]=afile[0],afile[idx]
    else:
        afile[idx],afile[idx+1]=afile[idx+1],afile[idx]

    # Add the recursive code
    if not afile in {27, 28}: # Check the resulting afile & act accordingly
        return swap_joker1(afile)
    else:
        return afile

def swap_joker2(afile):
    idx = afile.index(28)
    if idx!=len(afile)-2 and idx!=len(afile)-1:
        afile[idx],afile[idx+1],afile[idx+2]=afile[idx+1],afile[idx+2],afile[idx]
    elif idx==len(afile)-2 and idx!=len(afile)-1:
        a=afile.pop(idx)
        afile.insert(1,a)
    elif idx!=len(afile)-2 and idx==len(afile)-1:
        a=afile.pop(idx)
        afile.insert(2,a)

    # Check the resulting afile & act accordingly
    if not afile in {27, 28}:
        return swap_joker1(afile)
    else:
        return afile
于 2013-11-07T23:08:50.987 回答