2016-07-21 9 views
1

このコードが実行されたときに空リストが表示される理由を理解しようとしています。目標は、文字列を取り、母音のインデックスを見つけてそのインデックスをリストに追加することです。インデックスが0ではなく1から始まります。エラーが発生している可能性のあるヒントはすばらしいでしょう。一般的な見落としがある場合は、私に知らせてください。 Pythonに比較的新しい。おかげ母音を追加する場所Python

def vowel_indices(word): 
    vowels = ["a", "e", "i", "o", "u"] 
    vowel_idx = [] 
    word.lower() 
    for idx, letter in enumerate(word, start = 1): 
     if letter == vowels: 
      vowel_idx.append(idx) 
     return vowel_idx  

答えて

1

if letter == vowels:if letter in vowels:

母音であるべきリストで、文字列がリストに等しくなることはありませんし、それはそれのトラックに機能を停止しますと、あなたはまた、ループの外にリターンを移動する必要があります初めてそれが文字列インプレース(文字列である不変)を変更しないlower

1

メソッドをループし、あなたが代わりに行う必要があります。

word = word.lower() 

その後vowelsのリスト内の文字の会員資格を確認するために、あなたはinオペレータはなく==使用する必要があります。

if letter in vowels: 

をそしてreturn文はforの内側に配置すべきではありませんこれは最初の反復の直後に関数を返すので、これは意図したものではありません。これはあなたの意図とは異なります。

for idx, letter in enumerate(word, start = 1): 
    if letter in vowels: 
     vowel_idx.append(idx) 
return vowel_idx 

追加のノートで

、あなたはあまり冗長にしてリストを使用して全体の動作を行うことができます理解

def vowel_indices(word): 
    return [idx for idx, l in enumerate(word.lower(), 1) if l in vowels] 
+0

仕事もreturn文は、外にあります場所。 – Alex

+0

@Alexはい、それも –

+0

私のために多くを明確にしてくれてありがとう! – eeskonivich

1

それは素晴らしい

def vowel_indices(word): 
    vowels = ["a", "e", "i", "o", "u"] 
    word.lower() 
    indexes = [index for c,index in zip(word,range(len(word))) if c in vowels] 
    print(indexes) 
+0

これはOPがどうして望んでいるのか、なぜあなたは 'zip'を使っているのですか? –

+0

ジップは単語の文字の位置を取得するために使用され、zipはwordとrangeの両方を組み合わせます( – Amit

+0

)なぜそれを 'enumerate'で使っていますか? –