2016-06-13 4 views
0

私はプログラミングの面で非常に勇気があります。 簡単な数字の推測ゲームを書くことを試みても、まだ非常に荒いですが、私はエラーが発生しています。UnboundLocalError:代入の前にローカル変数 "tries"が参照されました

これはコードです:

輸入ランダム guessestaken = 0 印刷が

def main(): 
    guessestaken = 0 
    number = random.randint(1,20) 
    guess = 0 
    while guess != number: 

     print ("Take a guess") 
     guess = input("Your guess: ") 
     guess = int(guess) 
     guessestaken = guessestaken + 1 
     if tries is None: 
      tries = 0 
     tries = tries + 1 



     if guess < number: 
      print "Too low, try again" 

     if guess > number: 
      print "Too high" 


     if guess is number: 
      print "Well done, you guessed the number in ", guessestaken, "guesses." 


#  if guess != number: 

x = 1 
while x is 1: 
# if tries is 3: break 
    guessestaken = 0 
    main() 

「あなたは1と20の間の乱数を推測するんだ」そして、私はこのエラーを取得しています後: UnboundLocalError:代入の前にローカル変数 'tries'が参照されました。

+0

def main()の後に 'tries = 0'を追加する必要があります。 –

+0

なぜ最初の3行が繰り返されるのですか? –

+0

'tries = 0' aftef' def main(): 'を追加すると、毎回私のカウンタがリセットされます。 –

答えて

0

あなたはNoneため、未定義の変数を確認することができません。

def main(): 
    while True: 
     if tries is None: 
      tries = 0 
     tries = tries + 1 

ではなく、あなたがそれを定義する必要があり、あらかじめ

def main(): 
    tries = 0 

    while True: 
     tries = tries + 1 
変数を使用して定義されている場合は、確認することができ

try: 
    tries 
except NameError: 
    tries = 0 

が、 私はそれに対して絶対にお勧めします。変数が定義されているかどうかを確認する方法は常にありますが、変数が定義されているかどうかは不確実です。次の文では

+0

あなたが与えたコードは、私が関数が実行された時間を数えようとしていた 'guessestaken'には良いです、私は間違った場所でそれをやっていたと思いますか? –

+0

'試行'を( 'guessestaken'のように)グローバル変数に定義することができます。' main() 'が定義されていてもその値を保持します。 –

0

if tries is None: 
    tries = 0 
    tries = tries + 1 

あなたが存在していない変数の値をチェックしています。関数の最初にtriesに値を加えて修正することで、それを作成することができます。例:tries = 0

+0

これは本当ですが、まずは0でなければなりません。 – VlassisFo

+0

main()関数が実行された回数を数えようとしています。関数の先頭に 'tries = 0'を置くと、毎回リセットされますか? –

0

私が意図したとおりのことをしていますが、それが良いかどうかはわかりません。 whileループに試行を追加し、このループを何度回るかを数えます。

tries = 0    
x = 1 
while x is 1: 

    tries = tries + 1 
    print tries 
# if tries is 3: break 
    guessestaken = 0 
    main() 
関連する問題