2016-06-20 3 views
0

私は文字列入力を受け取る関数を持っています。入力に文字列が現れる回数を数えたいと思います。未解決のリファレンス - Python

例、私は、文字列車=「トヨタ、ホンダ、トヨタ、BMW、トヨタ」

を持って、私は何度なしを返す関数、文字列が

toyota_count = 0 
honda_count = 0 
BMW_count = 0 

def count_cars(cars): 
    if "toyota" in cars: 
     toyota_count += 1 
    if "honda" in cars: 
     honda_count += 1 

を発生します。しかし、これは私を与えます関数内のtoyota_countでエラーが発生しました。「未解決参照toyota_count」と表示されます。

+1

あなたのエラーの**完全なトレースバック**をコピーしてください。手で入力しないでください。 Pythonに「未解決参照toyota_count」というエラーはありません。代わりに 'UnboundLocalError:代入前に参照されるローカル変数 'toyota_count'が得られます。 –

+0

さらに、サンプル入力とその入力に基づいて期待する出力を追加してください。 'str.count()'がここで助けになるかどうか推測するように私たちに任せないでください。 –

答えて

1

その理由は、toyota_countがグローバルであるためです。 あなたのメソッド内の変数を定義します(推奨)またはそのようなグローバルとしてあなたmethot内に指定のどちらか:あなたはまた、単に数の合計を取得するためにcars.count("Toyota")を使用することができEDIT

def myfunc(): 
    gobal toyota_count 

文字列内の部分文字列。

+0

'cars.count()'は1以上の整数を与えることができ、常に文字列全体をスキャンする必要があります。 'in'は文字列* once *を探すだけです。 –

+0

@MartijnPieters:OPの中で:_入力に文字列が現れた回数を数えたい。私に聞いてみると、彼らは1つだけでなく、総数を求めています。 –

+0

ああ、はい、もし 'cars'文字列あたりの回数を数えたいなら、' yes'は '.count()'を使います。残念なことに、「車」がどのように見えるのか、そして期待される出力は何かの例を挙げていない。 –

1

文字列が重複しないと仮定して、文字列count()を使用してください。これは効率的ではありませんが(count()への3回の呼び出しと3回の検索)、あなたの説明したユースケースに合っています。

cars = "Toyota, Honda, Toyota, BMW, Toyota" 
toyota_count = cars.count("Toyota") 
honda_count = cars.count("Honda") 
1
toyota_count = 0 
honda_count = 0 
BMW_count = 0 

def count_cars(cars): 
    global toyota_count 
    toyota_count = cars.count('Toyota') 


count_cars("Toyota, Honda, Toyota, BMW, Toyota") 
print (toyota_count)