2016-09-04 39 views
-2
import random 

def game(n): 
     while counter < n: 
     n1 = random.randrange(1,10) 
     n2 = random.randrange(1,10) 
     counter = 0  
     print (str(n1) + " + " + str(n1)) 
     answer = input("Enter answer: ") 
if answer == n1+n2: 
    print("Correct.") 
else: 
    print("Incorrect.") 
    counter += 1 
    pass 

この行には、n1が定義されていないというエラーがあります。変数が関数で定義されていません

print (str(n1) + " + " + str(n1)) 
+0

インデントをご確認ください。 'while 'の行はインデントされていません。 – timrau

+1

あなたが提供したコードによれば、字下げの問題があり、 'counter'も定義されていません。あなたの側にいる最初のエラーがprintステートメントであることに私は驚いています。 – idjaw

+0

あなたはインデントして作業する必要があります。実行しているコードと一致することを確認してください。これは、スコープの問題のように聞こえる、とあなたが投稿したコードのインデントは、あなたの実際のコードと一致しない限りインデントはPythonで範囲を定義するので、それは助けることは難しいです。また、あなたのコードにも論理エラーがあるように見えます。 –

答えて

0

は、ここでは、修正するために必要なものです:

  1. あなたのインデントはすべての場所です。
  2. あなたもこれに値を与えた前に、あなたのループであなたの条件の一部として使用counterをしようとしていました。
  3. whileループの本体の内部にn1n2を作成したため、すべての推定値n1n2が再度作成され、異なる値が割り当てられた後に作成されました。私はあなたがそれが起こることを望んでいるかどうかはわかりませんが、もしあなたがしたら、2行をループ内に戻すことができます。
  4. ユーザーが正しい答えを推測している場合は、正しくループの外に破壊されませんでした。だから私はbreakを追加しました。それは成功した答えのループを終了します。また、答えが間違っている場合は、passは必要ありません。ループは、正しい答えを受け取るか、またはcounterの値に達するまで続きます。

とにかく、ここにあなたのコードの固定/作業バージョンです。

import random 

def game(n): 
    counter = 0 
    n1 = random.randrange(1,10) 
    n2 = random.randrange(1,10) 
    while counter < n: 
     # move creation of n1, n2 here if you want #'s to change after every guess 
     print ('{} + {}'.format(n1, n2)) 
     answer = input("Enter answer: ") 
     if answer == int(n1 + n2): 
      print("Correct.") 
      break 
     else: 
      print("Incorrect.") 
      counter += 1 

あなたは本当に、このようなインデント、whileループ、および変数として、いくつかの基本的なPythonの話題、上に読んでください。

希望すると便利です。

は最後に、ここでは2つのテストです。そのうちの1つは正解を正しく推測し、もう1つはカウンタに達するまで推測します。

4 + 9 
Enter answer: 3 
Incorrect. 
4 + 9 
Enter answer: 2 
Incorrect. 
4 + 9 
Enter answer: 1 
Incorrect. 


9 + 8 
Enter answer: 17 
Correct. 

これらの例の両方で、私はgame(3)という関数を呼び出しました。

関連する問題