2016-12-15 8 views
0

今、私はグローバル宣言について知っていますが、なぜエラーが発生しているのか(関数内でカウントされていますが、後で呼びます)、回避する方法は考えられません。なぜ私は変数を定義した後にf関数を呼び出していますが、countにエラーがありますか?このコードスニペットはどのように書き直すことができますか? 助けてくれてありがとう!変数参照エラー:この作業を行うにはどうしたらいいですか?

def f(x): 
    if count < x: 
     <some irrelevvant code> 

for i in range(10): 
    count = 1 
    f(3) 
    <some more irrelevant code> 

私の謝罪は、私の元々の質問は明らかではないと思います。私は再帰的に私はcount2waysでの関数の引数として定義されていないことができ、機能waysを呼び出しておりますので

def ways(l, h): 
    if count2 < h: 
     for v in A: #A is a globally defined list 
      if u != v: 
       if check(t, v): 
        count2 += 1 
        t = v 
        ways(l, h) 
    else: 
     count1 += 1 

count1 = 0 
for u in A: 
    count2 = 1 
    t = u 
    ways(9, 3) 

:私が述べた「無関係なコードは、」実際にので、私は私の全体のコードをアップロードしています、関連するかもしれません。 Count2は、u forループが実行されるたびに1にリセットする必要がありますが、waysが呼び出されるたびにリセットする必要はありません。

+1

明示的に 'count'を' f'に渡します。 + f(3、count) – jonrsharpe

+0

+ f(3、count) –

+1

'f(x)'を定義する前に 'count = 1'を実行することはできますが、これをしないと' count'を 'f 'Explicitは暗黙よりも優れているから明示的に.' –

答えて

1
def f(x,count): 
    if count < x: 
     <some irrelevant code> 

for i in range(10): 
    count = 1 
    f(3,count) 
    <some more irrelevant code> 

"count"を関数内でローカルにします。 カウントを関数fに渡すと、グローバルにする必要はなく、うまくいくはずです。

+0

質問に少し詳しく説明しました。関数が再帰的に呼び出されるので、このアプローチはうまくいかないと思います。 – Sphener

関連する問題