2016-04-11 3 views
-3

ワーキングコード:rangeを使用するのはなぜこの関数では動作しますが、リスト名を使用するのはなぜですか?

def censor(text, word): 
    words_split = text.split() 
    for a in range(len(words_split)): 
     if words_split[a] == word: 
      words_split[a] = "".join("*" * len(word)) 
    return " ".join(words_split) 

この1つは、文字列内の単語 がコードを動作していない検閲:

def censor(text, word): 
    words_split = text.split() 
    for a in words_split: 
     if words_split[a] == word: 
      words_split[a] = "".join("*" * len(word)) 
    return " ".join(words_split) 

を二番目は私にエラーを与える: 「リストのインデックスは、整数ではなく、STRでなければなりません" 2番目のコードを最初のコードと同様に動作させるにはどうすればよいでしょうか

+0

を第一の方法に含むアイテムインデックス(整数)は第2の方法でリスト項目を含みます。 。 –

+0

だから、 'if a == word:'を 'if a == word:'を使ってください。 –

+2

ドキュメントを読む!!!!!!!!!!!!!!!!!!!!!!!!!!!! –

答えて

1

the documentation for forで説明したように、これら2つのループの種類が異なるためです。

for a in words_splitawords_splitであなたに値を与えるので、aはすでに文字列値であるとwords_split[a]が存在しません。範囲を使用して

反復処理は、あなたの指標words_splitを与えるので、あなたは値を取得するwords_split[]にそれらを渡します。最初のAで

0

は、第1のAにおいて、要素のインデックスである要素自体

l = ['a', 'b', 'c'] 

指標である:

for i in range(len(l)): 
    print i 

を与える:

0 
1 
2 

要素:

for element in l: 
    print element 

与える:

a 
b 
c 
関連する問題