2017-01-05 9 views
-1

"e"を残している以外は、このコードはうまくいくようです。コードは、指定された文字列をループし、母音を削除し、新しい母音文字列を返すように設計されています。メソッドの置き換え

def anti_vowel(text): 
    anti_v = '' 
    for c in text: 
     if c in "aeiouAEIOU": 
      anti_v = text.replace(c, '') 
     else: 
      anti_v.join(c) 
    return anti_v 

テストコードは:

anti_vowel("Hey look Words!") 

これは、 "WRDS LKねえ!" を返します

何がありますか?ありがとう!

+1

'anti_v.join(c)'はあなたが思っているようなことをしません。 'text.replace(c、 '')'は、 '' e''や '' o''などの特定のインスタンスを置き換えません。すべてのインスタンスを置き換えます。別の交換作業を行うたびに古い交換品を捨ててしまいます。 – user2357112

答えて

0

ループを実行するたびに、textパラメータを置き換えます。 しかし、置き換えを実行すると、元の値は変更されません。だから次の時に元の文字列に置き換えます。例:

他の母音は、他の母音がcをanti_vに結合するため、他の母音には機能するようです。

あなたはelseをまったく必要としません。単にanti_vをtextに等しく設定し、anti_vで置き換えます。それがあなたの問題を解決します。

def anti_vowel(text): 
    anti_v = text 
    for c in text: 
     if c in "aeiouAEIOU": 
      anti_v = anti_v.replace(c, '') 

    return anti_v 

それとも、すべて一緒にanti_v変数を削除し、テキストを使用します。

def anti_vowel(text): 
    for c in text: 
     if c in "aeiouAEIOU": 
      text = text.replace(c, '') 

    return text 
1

あなたは母音ではありません、あなたの文字列中のすべての文字を結合するために理解を使用することができます。

def anti_vowel(text): 
    return ''.join(c for c in text if c not in 'aeiouAEIOU') 
1

私は問題がアンチ_vに値を格納していると思いますが、ループを実行するたびにanti_vの値をtext.replace(c、 '')の値に置き換えますが、テキスト変数doe変わらない たとえば、テキストが 'aae'の場合です。

c = 'a' ---> anti_v = 'aae'.replace('a', '') --> anti_v='e' 
c = 'a' ---> anti_v = 'aae'.replace('a', '') --> anti_v='e' 
c = 'e' ---> anti_v = 'aae'.replace('e', '') --> anti_v='aa' 

したがって、この場合のanti_vowelの戻り値は、空の文字列ではなく「aa」になります。

この問題を解決する1つの方法は、@ Vハリトップが提案したことです。

また、thisスレッドを見て、文字列の母音を削除するための他のオプションを確認することもできます。

関連する問題