2016-09-13 8 views
0

私は、 'Fish、Carrot、Beef、Fish'のようなテーブルを入力すると、 'Fish'が何回入力されたかを検出する機能を作ろうとしています。これは2の代わりに 'None'を返します。与えられた変数にいくつの文字列が存在するかを検出しますか?

def word_count(x): 
    count = 0 
    for item in x: 
     if item == 'Fish': 
      count = count + 1 
      return count 
word_count(['Fish', 'Carrot', 'Beef', 'Fish']) 

私はPythonにはかなり新しくて、何か助けていただきありがとうございます。

+0

ようになります。 'word_count( '' Fish '、' Carrot '、' Beef '、' Fish ')')で呼び出すと、末尾にあるcountを返すだけです(forループの外側) – L3viathan

+1

collections.Counterはこの仕事をします。 .. –

答えて

1

それは除いて、ほとんど正しいです:関数を呼び出すときに[]で囲む必要がありますので

x、あなたのロジックによれば、文字列のリストでなければなりません。その後、それを反復することができます。

答えが得られたとき、つまりリストを反復するときは、関数から戻る必要があります。

ので修正版は、あなたが今、文字列内の文字を反復処理している

def word_count(x): 
    count = 0 
    for item in x: 
     if item == 'Fish': 
      count = count + 1 
    return count 
word_count(['Fish', 'Carrot', 'Beef', 'Fish']) 
+1

私は質問を更新しました。それが '[]'の場合、関数はエラーになるはずですが、代わりに 'None'を返しています。つまり、OPはこの質問に間違った例を入力しました。実際に彼はそれを正しく呼んでいたのです –

+1

@MoinuddinQuadriは 'TypeError'を与えておくべきだと合意しましたが、コードを変更するのは賢明ではないかもしれません。コメントをしよう – Li357

+0

私は実際にそれを取得しません。あなたは絶対に正しいですが、リストのように彼がそれを呼び出すと、最初の「魚」に遭遇した直後に1を返します。 –

1

コードに問題がありますreturnの値がifステートメント内にあります。だからxリストにFishがない場合、None)が返されます。これは、Pythonの関数が返すデフォルト値です。コードの下に試してみて、それが動作します:

def word_count(x): 
    count = 0 
    for item in x: 
     if item == 'Fish': 
      count = count + 1 
    return count 

提案:あなたがリストを持つ存在count()機能を利用することで機能し簡素化することがあります。たとえば:

>>> my_list = ['Fish', 'Carrot', 'Beef', 'Fish'] 
>>> my_list.count('Fish') 
2 
関連する問題