2017-08-15 5 views
0

私は0から所定の数gまでの数を推測できるプログラムを作成しています。しかし、新しいゲームの継ぎ目を開始する関数は、変数を決して定義しません。後で呼び出されたときに変数シームが割り当てられない

import random 
g = 100 
def new_game(): 
    secret_number = random.randint(0,g) 
    return secret_number 
def input_guess(x): 
    x = int(x) 
    print "guess was",x 
    if x > secret_number: 
     print "lower" 
    elif x < secret_number: 
     print "higher" 
    if x == secret_number: 
     print "correct" 
new_game() 
input_guess(33) 

どんなに私はそれは常にそのsecret_numberが

NameError: name 'secret_number' is not defined 

任意のヘルプ

が定義されていないと言って縫い目変更何?

+0

私の機能でそれを変更させて頂くそのようちょっとである私は申し訳ありませんが、このコード私は決してそれを呼び出すことがないので動作します。 input_guess(33)のような推測を追加すると、それが再現されます。私も元のようにします – Hendrik

+1

'secret_number'は' new_game'メソッドに対してローカルです。最後から2番目の行で呼び出されても、変数に代入されることはありません。さらに、そのようなグローバル変数の使用はぶつかることになります。 – Alexander

+0

'secret_number'に' input_guess'のパラメータを設定する必要があります。 –

答えて

0

secret_numberをグローバル変数にするという2つのオプションがあります。したがって、どの関数でもアクセスできるようになりますが、これは一般的には素晴らしい選択肢ではありません。@alexanderによると、これは推奨された方法ではありません:その変数がすべてのメソッドで同じであることを意味グローバル変数secret_number、そこにあるようにそれを作っている私はここに行っている

import random 
g = 100 
def new_game(): 
    global secret_number 
    secret_number = random.randint(0,g) 
    return secret_number 
def input_guess(x): 
    global secret_number 
    x = int(x) 
    print "guess was",x 
    if x > secret_number: 
     print "lower" 
    elif x < secret_number: 
     print "higher" 
    if x == secret_number: 
     print "correct" 
new_game() 
input_guess(33) 

一度返さsecret_numberの値を格納し、input_guessにパラメータとしてそれを渡すことになり、これを行うには良い方法:

import random 
g = 100 
def new_game(): 
    secret_number = random.randint(0,g) 
    return secret_number 
def input_guess(x, secret_number): 
    x = int(x) 
    print "guess was",x 
    if x > secret_number: 
     print "lower" 
    elif x < secret_number: 
     print "higher" 
    if x == secret_number: 
     print "correct" 
number = new_game() 
input_guess(33, number) 

numberがで返さsecret_numberと等しくなるように、これはそれを作りますnew_game()を入力し、その変数をinput_guess()に入力して秘密番号を与えます。

1

secret_numberあなたが世界的にそれを格納する必要があり、new_game()関数内のローカル変数ですので、:input_guess()の引数として

secret_number = new_game()

または

パスsecret_number:

def input_guess(x, secret_number): 
    x = int(x) 
    print "guess was",x 
    if x > secret_number: 
     print "lower" 
    elif x < secret_number: 
     print "higher" 
    if x == secret_number: 
     print "correct" 
0

試用版:

import random 
    g = 100 
    def new_game(): 
     secret_number = random.randint(0,g) 
     return secret_number 
    def input_guess(x, secret_number): 
     x = int(x) 
     print "guess was",x 
     if x > secret_number: 
      print "lower" 
     elif x < secret_number: 
      print "higher" 
     if x == secret_number: 
      print "correct" 
    secret_number = new_game() 
    input_guess(33, secret_number) 

secret_numberはグローバル変数ではないため、input_guessメソッドは「それが何であるか」を知りませんでした。

0

ありがとうございました。私はちょっとそれを自分で解決するために管理し、Joykillsは

import random 
g = 100 
secret_number = 0 
def new_game(): 
    global secret_number 

に答えるように、私はグローバル変数secret_numberにアクセスし、

secret_number = random.randint(0,g) 
    return secret_number 
def input_guess(x): 
    x = int(x) 
    print "guess was",x 
    if x > secret_number: 
     print "lower" 
    elif x < secret_number: 
     print "higher" 
    if x == secret_number: 
     print "correct" 
new_game() 
input_guess(33) 
関連する問題