2016-05-29 8 views
1

私はこのプログラムを書いた:再帰を使用して2つの文字列を混合し、両方を1の「インターレース」文字列として返す方法

def mix(a,b): 

    if len(a) != len(b): 
     return 
    else: 
     return a[0]+b[0]+a[1]+b[1]+a[2]+b[2]+a[3]+b[3] 

これは、何が、一緒の2列と「インターレース」それらを取るです。たとえば、文字列1としてtacoを選択し、文字列2としてbowlを選択すると、tbaocwolが返されます。文字列の長さが異なる場合は、ただ返します。

私が遭遇している問題は、私のelse return文の再帰です。どのような長さの文字列を受け入れ、2文字、3文字、または4文字に制限されないように書くことができますか?私は元のコードでインデックスをハードコードして、私が行っているように結果を見ていますが、私はこれで疲れています。

私はループや文字列処理関数を使いたくありません。 私が使用することができるものは、スライシングおよび/またはグローバル変数だけです。 .remove()index、または.replace()も使用しないでください。

注:私は似たような質問を見ましたが、それはJavaであり、私はPythonの同値性を理解できませんでした。

+0

関数が 'None'または文字列を返します。実際には意図した動作ですか? – asimes

+0

@asimesまあ、理想的には、もし長さが違うなら、それは何もしたくないのです。多分、私はそこに文字列 'Error:両方の単語が同じ長さでなければならない 'を追加することができます。しかし、それは今のところ意図された行動です。 – adhamncheese

答えて

2

文字列のスライスされたバージョンを渡すことができます。

def mix(a,b): 
    if len(a) != len(b): 
     return 
    elif not a: 
     return "" 
    else: 
     return a[0] + b[0] + mix(a[1:], b[1:]) 

いくつかのテストケース:

>>> print(mix("Hello", "abcde")) 
Haeblcldoe 
>>> print(mix("Guten Tag", "ihgfedcba")) 
Giuhtgefne dTcabga 
>>> print(mix("Ni Hao", "Hello ")) 
NHie lHlaoo 
+1

'len(a)== 0: return b elif len(b)== 0: を' not a:return '' 'に戻すことができます。 –

+0

@AlexHall、これはコードがシンプルになる程、より良い代替品になります。あなたがた両方に感謝します! – adhamncheese

1
def mix(a,b): 
    if len(a) != len(b): 
     return '' 
    if len(a) == 0: 
     return '' 
    else: 
     return mix(a[:-1], b[:-1])+a[-1]+b[-1] 

このトリックを行う必要があります!

+0

Pythonステートメントの最後にセミコロンは必要ありません。 – Blckknght

関連する問題