2017-10-05 5 views
0

私は文字列内の特定の文字をチェックし、特定の順序でそれらを返す再帰関数を記述する必要があるので、この問題があります。基本的には、文字列を2つの部分に分割することになっています。最初の部分は小文字の "_"と "。"を、2番目の部分は大文字の ""と "|"を含む必要があります。他のすべての文字は無視する必要があります。文字列内の特定の文字をチェックする再帰関数を作成するにはどうすればよいですか?

はここで文字列の再帰の私の知識は本当に悪いです、私のコードです:

def split(n): 
    if len(n) <= 1: 
     return n 
    elif (n[0].isalpha() and n[0].lower() == n or "_" == n[0] or "." == n[0]): 
     return n[0] + split(n[1:]) 
    elif (n[0].isalpha() and n[0].upper() == n) or n[0] == " " or n[0] == "|": 
     return n 
    else: 
     return n[0] + split(n[1:]) 

だから、例えば私がsplit("'lMiED)teD5E,_hLAe;Nm,[email protected]&Eg ,#[email protected]§&e7#4E #<(S0A?<)NT8<0'"))

を書く場合、それがあなたならば、それは簡単です私見('lite_hemligare', 'MEDDELANDE INTE SANT')

+1

本当に再帰的にする必要がありますか? 're'gular式でこれを非常に簡単に解くことができます。 –

+0

なぜ再帰的でなければならないのか分かりませんが、明らかにそうである必要はありません。 –

+0

私は同じ問題の反復関数を作っていますが、再帰的なものを作りたいと思っています。 – Lukas

答えて

3

を返すことになっています関数は常に2つの文字列を持つタプルを返します。次に、どのルールがトリガされるかに応じて、タプルの最初または2番目の文字列に追加することができます。実際には、関数は次のようになります。

def separate(p, idx=0): 
    if idx == len(p): 
     return '', '' 

    l1, l2 = separate(p, idx + 1) 

    item = p[idx] 

    if (item.isalpha() and item.lower() == item) or "_" == item or "." == item: 
     l1 = item + l1 
    elif (item[0].isalpha() and item[0].upper() == item) or item[0] == " " or item[0] == "|": 
     l2 = item + l2 
    return l1, l2 

このように、結果はまさにあなたが探しているものです。

+1

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](/レビュー/低品質の投稿/ 17540997) – eandersson

関連する問題