간단한 체커 프로그램을 쓰고 있습니다. 나는 게임 상태의 좋은 ASCII 출력을 얻으려고 노력하고있다.Maddening Python For Loop
def function(self):
board = [["+", " - "]*8 + ["+", "\n"], \
["|", " "]*8 + ["|", "\n"]]*8 + \
[["+", " - "]*8 + ["+", "\n"]]
i = 0
for row in self.state:
j = 0
for cell in row:
if cell == WHITE:
board[2*i+1][2*j+1] = ' w '
elif cell == WHITE_KING:
board[2*i+1][2*j+1] = ' W '
elif cell == BLACK:
board[2*i+1][2*j+1] = ' b '
elif cell == BLACK_KING:
board[2*i+1][2*j+1] = ' B '
j += 1
i += 1
return board
(클래스 정의 외부) : 내가 잘못이다, 그러나 여기에서 무슨 일이 일어나고 있는지 무엇을 볼 수 없습니다
EMPTY, WHITE, WHITE_KING, BLACK, BLACK_KING = range(5)
여기 내가 사용하려고하는 기능입니다.
>>> B = CheckerBoard()
>>> B.state
[[3, 0, 3, 0, 3, 0, 3, 0], [0, 3, 0, 3, 0, 3, 0, 3], [3, 0, 3, 0, 3, 0, 3, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 1, 0, 1, 0, 1], [1, 0, 1, 0, 1, 0, 1, 0], [0, 1, 0, 1, 0, 1, 0, 1]]
>>> print("".join(map(lambda x: "".join(x), B.function())))
+ - + - + - + - + - + - + - + - +
| w | w | w | w | w | w | w | w |
+ - + - + - + - + - + - + - + - +
| w | w | w | w | w | w | w | w |
+ - + - + - + - + - + - + - + - +
| w | w | w | w | w | w | w | w |
+ - + - + - + - + - + - + - + - +
| w | w | w | w | w | w | w | w |
+ - + - + - + - + - + - + - + - +
| w | w | w | w | w | w | w | w |
+ - + - + - + - + - + - + - + - +
| w | w | w | w | w | w | w | w |
+ - + - + - + - + - + - + - + - +
| w | w | w | w | w | w | w | w |
+ - + - + - + - + - + - + - + - +
| w | w | w | w | w | w | w | w |
+ - + - + - + - + - + - + - + - +
원하는 출력은
+ - + - + - + - + - + - + - + - +
| b | | b | | b | | b | |
+ - + - + - + - + - + - + - + - +
| | b | | b | | b | | b |
+ - + - + - + - + - + - + - + - +
| b | | b | | b | | b | |
+ - + - + - + - + - + - + - + - +
| | | | | | | | |
+ - + - + - + - + - + - + - + - +
| | | | | | | | |
+ - + - + - + - + - + - + - + - +
| w | | w | | w | | w | |
+ - + - + - + - + - + - + - + - +
| | w | | w | | w | | w |
+ - + - + - + - + - + - + - + - +
| w | | w | | w | | w | |
+ - + - + - + - + - + - + - + - +
편집입니다 :
def function(self):
board = [x for list in
[[[a for subl in [["+", " - "] for _ in range(8)] for a in subl] + ["+", "\n"], \
[a for subl in [["|", " "] for _ in range(8)] for a in subl] + ["|", "\n"]] \
for _ in range(8)] for x in list] + \
[[a for subl in [["+", " - "] for _ in range(8)] for a in subl] + ["+", "\n"]]
i = 0
for row in self.state:
j = 0
for cell in row:
if cell == WHITE:
board[2*i+1][2*j+1] = ' w '
elif cell == WHITE_KING:
board[2*i+1][2*j+1] = ' W '
elif cell == BLACK:
board[2*i+1][2*j+1] = ' b '
elif cell == BLACK_KING:
board[2*i+1][2*j+1] = ' B '
j += 1
i += 1
return board
예상되는 출력은 무엇입니까? 명확성을 위해 그것을 포함하십시오 .. – vishal
더 중요한 것은 _input_은 무엇입니까? 당신이 우리에게 보여주지 않은 코드의 버그 때문에'self.state'가 모두'화이트 (WHITE)'셀이 아니라고 확신합니까? 또한 자체적으로 실행하거나 디버깅 할 수없는 코드 조각 대신 [MCVE] (http://stackoverflow.com/help/mcve)를 제공 할 수 있습니까? – abarnert
해당 보드 선언의 * 8 표현식은 목록의 8 개의 고유 사본을 만들거나 동일한 목록에 대한 8 개의 참조를 만듭니다. –