2017-07-09 5 views
0

私は2人でチックタックを弾くことができるプログラムを作りようとしています。彼らは行と列を選択する必要があり、トークンはその場所に配置する必要があります。私は多次元リストには新しく、少し苦労しています。なぜ私は定義されていないエラーになっていますか?

def showBoard(): 
    board = [[0,0,0,], 
      [0,0,0], 
      [0,0,0]]  

    print("-------------") 
    print('|',board[0][0], '|',board[0][1], '|',board[0][2],'|') 
    print("|---+---+---|") 
    print ('|',board[1][0], '|',board[1][1], '|',board[1][2],'|') 
    print("|---+---+---|") 
    print ('|',board[2][0], '|',board[2][1], '|',board[2][2],'|') 
    print("-------------") 


def playerX(): 

    row = input("Enter a row (0, 1, or 2) for player X: ") 
    column = input("Enter a column (0 , 1, or 2) for player X: ") 
    board[row][column] = "X" 


def main(): 

    showBoard() 
    playerX() 



main() 

しかし、それは常にbuiltins.NameErrorエラースロー:これは私がこれまで持っているものです名「ボード」が定義されていませんが。 私はそれに似たコードを使ってもよいでしょうか?または、何らかの形でappend()を使用する必要がありますか?

+0

コードを正しくフォーマットしてください。これはほぼ間違いなくスコープの問題ですが、コード内のスコープを難読化したときに診断するのは難しいです。 – Carcigenicate

+0

しかし、見た目からは、 'showBoard'の中に' board'が定義されているように見えます。意味は 'showBoard'の中からしかアクセスできません。 – Carcigenicate

+0

@carcigenicate私はすべてをメインに入れようとしましたが、現在はbuiltins.TypeErrorを取得しています:リストインデックスは、strエラーではなく、整数またはスライスでなければなりません。これは非常にイライラしているようです。 – PyPunk

答えて

2

boarddrawBoardの中に定義してから、playerXで使用しようとしていますか?スコープ内で定義された変数(関数など)は、そのスコープ外では使用できません。あなたが他の場所で変数を使用する必要がある場合は、グローバルに定義するか、いっそのこと、それを引数として渡す:

def newBoard(): 
    # Create a new board, then return it 
    # so it can be used elsewhere. 
    return [[0,0,0], 
      [0,0,0], 
      [0,0,0]] 

def showBoard(board): 
    print("-------------") 
    print('|',board[0][0], '|',board[0][1], '|',board[0][2],'|') 
    print("|---+---+---|") 
    print ('|',board[1][0], '|',board[1][1], '|',board[1][2],'|') 
    print("|---+---+---|") 
    print ('|',board[2][0], '|',board[2][1], '|',board[2][2],'|') 
    print("-------------") 

def playerX(board): 
    row = int(input("Enter a row (0, 1, or 2) for player X: ")) 
    column = int(input("Enter a column (0 , 1, or 2) for player X: ")) 

    board[row][column] = "X" 

def main(): 
    board = newBoard() 

    showBoard(board) 
    playerX(board) 

main() 

私は何が変わった:

  • は、私が作成しnewBoard機能を作成しました新しいボード。私はmainでそれを使ってボードを作った。

  • drawBoardplayerXは引数としてボードを受け入れました。私はmainで作成したボードをそれぞれに渡しました。

  • インデックスを作成する前に入力を数字に変換するようにしました。

関連する問題