2016-06-19 8 views
0

私はPythonにはかなり新しく、whileループやブール値のwin値に問題があるようです。勝った。私の人生の変数にも問題があります。なぜなら、私が間違った答えを得るたびにエラーが出てくるからです。 "UnboundLocalError:割り当て前に参照されるローカル変数 'lives' ps。 「ランダム」番号は常に45ですので、私は簡単に問題を整理するために勝つことができる lives variable pic while loop problem pic 輸入ランダム インポート時Python 3.5 - 数値ピッカーゲームwhileループ&変数(初心者)

def compare(): 
if guess == rand_num: 
    print("You guessed correct!") 
    win = True 
elif guess > rand_num: 
    print ("Guess lower!") 
    lives = lives - 1 
else: 
    print ("Guess higher!") 
    lives = lives - 1 

win = False 
rand_num = 45 
lives = 10 
while lives > 0: 
if win == False: 
    guess = int(input("Guess a number!")) 
    compare() 
time.sleep(3) 
print("Well done!") 
+0

機能には分離が必要です。 compareメソッドは実際にはcompareAndPrintAdjustLivesAndSetWinCondition()です。 -1、0、1を返す比較を書くことを検討してください。それに基づいて、それを誰でも呼び出して、人生を調整してください。より多くのグローバル、懸念の分離、より洗練されたコード。 – Halsafar

+0

あなたの質問で受け取ったエラーメッセージを常に述べるべきです。 – Matthew

答えて

0

あなたの比較関数の開始時に行global livesを追加します。

local variable lives referenced before assignmentというエラーは、ローカル変数にアクセスしていますが、その変数が存在しないことを意味します。この場合、変数がローカル変数ではなくグローバル変数であることをPythonに伝える必要があります。

これは、値が割り当てられていない場合は発生しません(たとえば、関数compareにはprint(lives)があるだけです)。その場合、Pythonインタプリタはグローバル値を使用します。 Pythonでローカル変数として扱われ、代入を行うには、を計算する必要があります。global lives行は、ローカル変数を作成する代わりにモジュール内の変数を使用します。

-1

まず、関数の先頭にグローバルライフを追加し、if文をwhileループの一部にします。

def compare(): 
    global lives,win 
    if guess == rand_num: 
     print("You guessed correct!") 
     win = True 
    elif guess > rand_num: 
     print ("Guess lower!") 
     lives = lives - 1 
    else: 
     print ("Guess higher!") 
     lives = lives - 1 
win = False 
rand_num = 45 
lives = 10 
while lives > 0 and win == False: 
    guess = int(input("Guess a number!")) 
    compare() 
time.sleep(3) 
print("Well done!") 
0

現在、あなたのコードは、「比較」関数がどの変数を使用するかを知っていると考えています。関数は、それらの変数を明示的に定義または提供しない限り、内部で使用する値を認識しません。コードを修正するには、compare()を引数なしで使用する代わりに、

def compare(guess, lives, rand_num): 
    ... 

と書く必要があります。次に、あなたのwhileループでは、代わりに呼び出すあなたがそうのような関数に2つの変数を渡す、「)(比較」:

compare(guess, lives, rand_num) 

をあなたはまた、whileループのブレークはあなたがそう勝つときことを確認する必要があります永遠に走っていないことあなたのwhileループは次のようになります:

while lives>0: 
    if win==False: 
     guess = int(input("Guess a number!")) 
     compare(guess, lives, rand_num) 
    if win==True: #you could also write "if win:" 
     break 

このようにして、あなたのループは勝つと終了します。

関連する問題