2017-07-27 18 views
-1

Pythonで "Reversi"ゲームのプログラミングに問題があります。私はゲームボードのサイズをオプションにしたいので、ユーザーは例えば4x4または10x10(それ以上のものではありません)を要求することができます。しかし、私はコーディングしようとした:Pythonの "変数が定義されていません"エラー

+0

は、貼り付けた1と同じ元のコードであなたのインデントですか?その理由だけではうまくいきません。 –

+0

表示されているコードのインデントが悪い*と*は、 'Q'という言葉に全く言及していません。 – chepner

+0

申し訳ありませんが、偶然古いコードを投稿しました – Aurum

答えて

0

あなたはちょうどあなたがその変数を使用する関数でグローバルQを書くことをあなたがするQ.のグローバル値を使用したいのpythonを伝えるためにグローバルを使用する必要があります。

+0

Pythonでグローバル変数を使用するのは、実際に必要で正当化される場合を除いて一般的には良い習慣ではありません。このケースでは、この変数を必要とする関数の入力引数として単に 'Q 'を渡すのが良いと思います。 – Eskapp

1

この質問には複数の問題があります。

Qを定義する場所を確認することはできません。スローされたエラーを見て、おそらくローカルスコープで定義しています。 Qはこのローカルスコープ内にのみ存在します。

今何が起こるかを確認するには:

def foo(): 
    Q = input("which size of board would you like? for example a 4x4 is a 4") 
    print(Q) 

foo() 
print(Q) 

>> which size of board would you like? for example a 4x4 is a 48 
>> 8 
>> Traceback (most recent call last): 

File "<ipython-input-37-56b566886820>", line 1, in <module> 
    runfile('C:/Users/idh/stacktest.py', wdir='C:/Users/idh') 

    File "c:\users\idh\appdata\local\continuum\anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 688, in runfile 
    execfile(filename, namespace) 

    File "c:\users\idh\appdata\local\continuum\anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 101, in execfile 
    exec(compile(f.read(), filename, 'exec'), namespace) 

    File "C:/Users/idh/stacktest.py", line 15, in <module> 
    print(Q) 

NameError: name 'Q' is not defined 

Qを定義するあなたの方法は、とにかくあなたのコードの残りの部分を壊しれる文字列を返します。

Q = int(input("Which size of board would you like?") 
for i in range(Q): 
    print(i) 
>> Traceback (most recent call last): 

    File "<ipython-input-39-5abb59a2214a>", line 1, in <module> 
    for i in range(Q): 

TypeError: 'str' object cannot be interpreted as an integer 

以下のようなものを試してみてください:

try: 
    Q = int(input("Which size of board would you like? For example, a 4x4 board is a 4 \n\n >>")) 
except: 
    print("Requires an integer between 4 and 10") 
    Q = int(input("Which size of board would you like? For example, a 4x4 board is a 4 \n\n >>")) 

def whatever_function1(*args, **kwargs): 
    whatever it is supposed to do 
    return whatever it is supposed to return 

def whatever_function2(*args, **kwargs): 
    whatever it is supposed to do 
    return whatever it is supposed to return 

etc 

alternatively, you can manually pass Q through to each function after defining it: 
Q = int(input("What size would you like?\n") 
def getNewBoard(Q): 
    # Creates a brand new, blank board data structure. 
    board = [] 
    for i in range(Q): 
     board.append([' '] * Q) 
    return board 
+1

質問は非常に基本的なものであるという事実に関して、私は '* args'と' ** kwargs'という言葉がこの良い答えを読んでいる人にとって理解しにくいかもしれないと思います。そこで、これらのコンセプトについてもっと知るためのリンクです:https://stackoverflow.com/questions/36901/what-does-double-star-and-star-do-for-parameters – Eskapp

関連する問題