教育目的のために、私はPythonでtic tac toeゲームを実装しています。Python:再帰関数内での戻りでの問題
選手のXまたはOを設定している関数は再帰的である:
def set_marker(player,board):
print "\nplayer",player
x = y = 3
while(x not in range(0,3)):
x = input("x: ")
while(y not in range(0,3)):
y = input("y: ")
if board[x][y] == 0:
board[x][y]=player
return board
else:
set_marker(player,board)
# return board
パラメータ:
board = 2dimensional list ([[0, 0, 0], [0, 0, 0], [0, 0, 0]])
player = int (value = '1' or '2')
私が呼んでいる、既に使用されているフィールドに私の「X」を設定した場合再び機能する。 このケースが起こると私は再び、スクリプトは次のエラーを投げている私のメインループ内で「ボード」を使用していた場合:
Python: TypeError: 'NoneType' object has no attribute '__getitem__'
ボードのタイプがこの場合にありますnone
。 board
をelse:
部分にも返すだけで問題を解決しました。ここで
は私の質問に行く:私は適切なボードを返すまで、私は、関数を呼んでいるよう
は、なぜ私は、他の中にもボードを返さなければならないのですか?
ありがとう、私はそれを再帰関数にしていない場合は、私の戻り値はもはやない右まで、関数を呼び出す間にループを作るだろうか? –