51 — 격자: 목록의 판
목록은 목록을 담을 수 있습니다. 바깥 목록이 판이고, 안쪽 목록 하나가 행이며, 각 칸은 하나의 표시입니다. 칸을 읽고 쓸 때는 인덱스가 두 개 필요합니다 — 먼저 행, 그다음 열.
단계
3x3 판은 행 세 개이고, 각 행은 표시 세 개의 목록입니다.
board[0]이 첫 행,board[1]이 둘째 행입니다. 칸을 읽으려면 인덱스 두 개가 필요합니다 — 행 먼저, 열 그다음 — 쓰기도=와 함께 같습니다. 인덱스는0부터 시작하므로board[0][0]이 왼쪽 위 칸입니다:
실행해 보기 →board = [["-", "-", "-"], ["-", "-", "-"], ["-", "-", "-"]] 말해 board[0] board[0][0] = "X" board[1][2] = "O" 말해 board[0][0] 말해 board[1][2]첫 행이 출력되고, 이어서
X와O가 출력됩니다.-는 빈 칸입니다.for반복이 모든 행을 방문하므로, 판 전체를 출력하는 일은 세 줄이면 됩니다:
실행해 보기 →board = [["X", "O", "-"], ["-", "-", "-"], ["-", "-", "-"]] for row in board: 말해 row반복은 바깥 목록을 위에서 아래로 읽고, 각
row는 안쪽 목록 하나입니다.이제 판을 만들고, 출력하고, 표시를 놓고, 다시 읽고, 세는 프로그램을 씁니다. 세는 반복은 두 번째 안쪽 반복을 사용해 모든 행의 모든 칸을 방문합니다.
grid.ko.nme으로 저장합니다:
실행해 보기 →# grid.ko.nme — 목록으로 만든 3x3 판. # 실행: nme 실행 grid.ko # 판은 행들의 목록이고, 각 행은 칸들의 목록입니다. 판 = [["-", "-", "-"], ["-", "-", "-"], ["-", "-", "-"]] def 판보여줘(판): for 행 in 판: 말해 행 말해 "빈 판:" 판보여줘(판) 판[0][0] = "X" 판[0][1] = "O" 판[1][1] = "X" 판[2][2] = "X" 말해 "네 개 표시 후:" 판보여줘(판) 말해 f"왼쪽 위 칸: {판[0][0]}" 말해 f"가운데 칸: {판[1][1]}" 말해 f"오른쪽 아래 칸: {판[2][2]}" 말해 f"0행 2열은 비어 있음: {판[0][2]}" 판[1][1] = "-" 말해 "가운데를 비우고 다시 채움:" 판[1][1] = "O" 판보여줘(판) x개수 = 0 o개수 = 0 for 행 in 판: for 칸 in 행: if 칸 == "X": x개수 = x개수 + 1 if 칸 == "O": o개수 = o개수 + 1 말해 f"판에는 X {x개수}개, O {o개수}개"실행합니다:
nme 실행 grid.ko빈 판: ['-', '-', '-'] ['-', '-', '-'] ['-', '-', '-'] 네 개 표시 후: ['X', 'O', '-'] ['-', 'X', '-'] ['-', '-', 'X'] 왼쪽 위 칸: X 가운데 칸: X 오른쪽 아래 칸: X 0행 2열은 비어 있음: - 가운데를 비우고 다시 채움: ['X', 'O', '-'] ['-', 'O', '-'] ['-', '-', 'X'] 판에는 X 2개, O 2개쓰고 다시 읽으면 정확히 저장한 값이 나옵니다 — 그것이 격자의 핵심입니다. 52 가이드가 이 판을 실제로 할 수 있는 게임으로 만듭니다.
직접 해보기
첫 번째 열이 위에서 아래로 X가 되도록 표시를 놓고 판을 출력한 뒤 판[2][0]을 다시 읽어 보세요. 그다음 세는 반복을 바꿔 아직 비어 있는 칸이 몇 개인지 출력하게 해 보세요.
배운 것
- 격자는 행들의 목록이고, 각 행은 칸들의 목록입니다.
board[row][col]은 칸을 읽고,board[row][col] = "X"는 칸을 씁니다.for 행 in 판:이 각 행을 방문하고, 안쪽 반복이 각 칸을 방문합니다.-는 빈 칸이므로 판은 표시와 빈칸을 구별할 수 있습니다.