0

私は2つの関数で構成される関数を持っています:

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 に答える