2016-11-08 14 views
0

私はPythonの本を使っていて、チック - タック - トゥーゲームを作成し、私が行っているコードを理解するように求められました。プログラムを実行するには時間が来て、私は完全なエラーされた状態で、この奇妙なエラーにPythonゲーム| TypeError:タイプ 'NoneType'の引数は反復可能ではありません

TypeError: argument of type 'NoneType' is not iterable

を与えられました。ここで

Traceback (most recent call last): 
    File "Tac Tac Toe Game revised.py", line 182, in <module> 
    main() 
    File "Tac Tac Toe Game revised.py", line 173, in main 
    move = human_move(board, human) 
    File "Tac Tac Toe Game revised.py", line 100, in human_move 
    while move not in legal: 
TypeError: argument of type 'NoneType' is not iterable 

は、それがline 173

def main(): 
    display_instruction() 
    computer,human = pieces() 
    turn = X 
    board = new_board() 
    display_board(board) 

    while not winner(board): 
     if turn == human: 
      move = human_move(board, human) 
      board[move] == human 
     else: 
      move = computer_move(board,computer,human) 
      board[move] == computer 
     display_board(board) 
     congrats_winner(the_winner,computer, human) 

にを参照するコードです次の関数でエラーが発生します。

def human_move(board,human): 
'''Get human move''' 
legal = legal_moves(board) 
move = None 
while move not in legal: 
    move = ask_number('Where will you move? (0-8): ',0, NUM_SQUARES) 
    if move not in legal: 
     print ('\nThat square is already occupied, foolish human. Choose another.\n') 
print('Fine...') 
return move 

move = Nonemove = ' 'に変更しようとしましたが、違いはありません。何か案は?

ここで要求されたように、あなたの問題はあなたが与える場合は...

をあなたはこれが問題であるので、何をカウントしないようにしてみてくださいなし変数にwhileループを行うカントあるlegal_moves

def legal_moves(board): 
'''Creates a legal list of moves''' 
    moves = [] 
    for square in range(NUM_SQUARES): 
     if board[square] == EMPTY: 
      moves.append(square) 
+4

'legal'ているもの?それは反復可能ではなく、「動く」ではないものです。明らかに、「合法」は「なし」ですが、どうすればよいでしょうか? –

+1

'legal_moves'は何を返しますか? –

+0

追加のヘルプが必要な場合は、 'legal_moves'の定義を投稿してください。 –

答えて

1

を使用することであなたはmovesリストを返す必要があります。

def legal_moves(board): 
    '''Creates a legal list of moves''' 
    moves = [] 
    for square in range(NUM_SQUARES): 
     if board[square] == EMPTY: 
      moves.append(square) 
    return moves 
-2

するための機能ですあなたはlegal_moves

でエレガントな解決策を何も返すように忘れてしまったあなたは

+0

fiddleとは何ですか?私のコード全体でpopのように? – Lucky38i

+0

は誤解を招きます。メンバーシップのテスト( 'in'を使用)は' None'にできません。 'while None'は有効ですPython –

+0

あなたは何を書き直すことをお勧めしますか? – Lucky38i

0

あなたのコードの病気の助けのFIDLEを希望代わりに移動リストの「正方形の収量」

+0

私は 'yield square'が何であるか分かりませんが、うまくいけばそれを学びます。この答えは非常に役に立ちましたが、ヘンリーはもっと好都合でした。 – Lucky38i

+0

for-loopには繰り返し可能性が必要です。ジェネレータは、簡単で効率的な方法です。 –

+0

ジェネレータは、(あなたの '動き'のような)リストにそれらを保存するのではなく、即座に戻り値を生成します。http://stackoverflow.com/a/1756156/1562285またはhttps://wiki.python.org /モイン/ジェネレータ –

関連する問題