2016-10-07 8 views
-2

これは私のコードです:なぜPythonで "UnboundLocalError:ローカル変数 'yes'が代入の前に参照されていますか?

from random import randint 

ant1 = 1 
ant2 = 2 
ant3 = 3 
ant4 = 4 
cntNum = 0 
no = 0 
yes = 0 

def antMove(antNum): 
    randomNum = randint(0,3) 
    if randomNum == antNum: 
     yes += 1 
    else: 
     print("No") 

while cntNum < 20: 
    antMove(ant1) 
    antMove(ant2) 
    antMove(ant3) 
    antMove(ant4) 
    cntNum = cntNum + 1 

if cntNum == 20: 
    print(yes)  
+0

どのラインでエラーが発生しますか? – GingerPlusPlus

+0

SRY、私の悪い:ライン12と17 –

+0

フルエラー:トレースバック(最新の呼び出しの最後): antMove(ANT1) ファイル」で ファイル "/Users/2020_dimitri_kachler/Desktop/Ant.py"、17行目、 /Users/2020_dimitri_kachler/Desktop/Ant.py "、antMove内の12行目 はい+ = 1 UnboundLocalError:割り当て前に参照されるローカル変数 'yes' >>> –

答えて

1

あなたがここにスコープの問題を得ました。あなたのスクリプトの中で、yes apperas 2回。グローバル変数として1回、存在しないローカル変数として1回。これは危険であるという事実の横に、あなたは

def antMove(antNum): 
    global yes 
    randomNum = randint(0,3) 
    if randomNum == antNum: 
     yes += 1 
    else: 
     print("No") 

ようなもので、あなたの問題を解決することができますが、global yesの文を参照していますか?これにより、メソッドのコンテキスト内にグローバル変数yesを書くことができます。

私はこれを見てきましたが、グローバルはCか悪いコーディングの人のサインです。あなたの小さなスクリプトを再利用するなら、間違った増加をデバッグするのは楽しいでしょうyes

2

メッセージの重要な部分は太字である:結合していないローカルエラー:ローカル変数「はい」の割り当ての前に参照しました。次の行で

、あなたが機能のローカルスコープに存在しないyes変数の値を更新しようとしている。

yes += 1 

私はあなたがをグローバルに更新したかったと仮定しますyes変数。この場合は、あなたの関数内でグローバルとしてyes変数を宣言する必要があります。

def antMove(antNum): 
    global yes 

をしかし、悪いpraticeであり、あなたはどのようなあなたの希望を達成するためのよりよい方法を見つける必要があることを認めています。

関連する問題