2017-03-31 13 views
0

私の関数が文字列内の文字のインデックスを呼び出さないのはなぜかと思います。私はこれのためにforループを使いました。何らかの理由で、文字列のすべての可能なインデックスをリストしています。特定のif文を作成しましたが、その指示に従わない理由はわかりません。文字列内のインデックスを検索するためのループ

def where_is(char,string): 
    c=0 
    for char in string: 
    if char==(string[c]): 
     print (c) 
     c+=1 
    else: 
     print ("") 
where_is('p','apple') 
+0

サンプルの入力、結果、予想される出力との違いを常に含めてください。 – timgeb

+1

'else'部分のインデックスを増やさないでください。 – Kasramvd

+1

@ Kasramvd 'else'の部分はこれまで実行されていないと思うので、それは問題ではありません:) – timgeb

答えて

1

最初に、使用したインデックスはelse部分では増えていません。第2に、私は一般に、whileループを使用してforループを優先します。このを見て、自分のコードに若干の変更を加える:

def where_is(char,string): 
    i=0 
    while i<len(string): 
    if char==(string[i]): 
     print (i) 
    else: 
     print ("") 
    i+=1 
where_is('p','apple') 

入力:where_is( 'P'、 'りんご')

出力:1 2

Check it out here

1

ループがパラメータcharを上書きしています。ループを入力するとすぐに、それは文字列の文字で上書きされます。次に文字列を文字列と比較します。パラメータまたはループ変数の名前を変更します。また、カウンターのインクリメントc+=1ifの外にある必要があります。一致しているかどうかにかかわらず、索引を増やしたい場合は、結果がオフになります。

ちょうどスタイルの問題として、あなたは本当にそのelseブロックを必要としません、printコールはあなたがおそらく望ましくない余分な改行を与えるだけです。

0

問題は、指定されたコードが文字列に格納されているすべてのものを繰り返し、 'c'の値が増えて印刷されるたびに一致するということです。 私はあなたのコードがあるべきだと思う:

これは、すべての「Pの中に 『』リンゴのインデックスを出力します。

0

として、コメントで述べたように、あなたはforループで正しくインクリメントしません。

def where_is(char, word): 
    current_index = 0 
    while current_index < len(word): 
     if char == word[current_index]: 
      print (current_index) 
     current_index += 1 

where_is('p', 'apple') 

を返す:あなたは手紙が発見された場合、それぞれの時間をインクリメントし、インデックスを出力し、単語をループにしたい

1 
2 

また、enumerateとリストの内包表記を使用することにより、あなたは減らすことができ印刷されます

def where_is(char, word): 
    print [index for index, letter in enumerate(word) if letter == char] 

where_is('p', 'apple') 

:ダウンに全部

[1,2] 

さらに、処理するために、作成したリストをreturnにすることもできます。

関連する問題