私は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 に戻る」の表現方法がわかりません。誰でも私を助けることができますか?