0
s = [0,2,6,4,7,1,5,3]


def row_top():
    print("|--|--|--|--|--|--|--|--|")

def cell_left():
   print("| ", end = "")

def solution(s):
   for i in range(8):
       row(s[i])

def cell_data(isQ):
   if isQ:
      print("X", end = "")
      return ()
   else:
      print(" ", end = "")


def row_data(c):
   for i in range(9):
      cell_left()
      cell_data(i == c)

def row(c):
   row_top()
   row_data(c)
   print("\n")


solution(s)

私の出力には 2 行ごとにスペースがありますが、あるべきではないのに、余分な行がどこに作成されているのかわかりません。

出力は次のようになります。

|--|--|--|--|--|--|--|--|
|  |  |  |  |  | X|  |  |
|--|--|--|--|--|--|--|--|
|  |  | X|  |  |  |  |  |
|--|--|--|--|--|--|--|--|
|  |  |  |  | X|  |  |  | 
|--|--|--|--|--|--|--|--|
|  |  |  |  |  |  |  | X|
|--|--|--|--|--|--|--|--|
| X|  |  |  |  |  |  |  |
|--|--|--|--|--|--|--|--|
|  |  |  | X|  |  |  |  |
|--|--|--|--|--|--|--|--|
|  | X|  |  |  |  |  |  |
|--|--|--|--|--|--|--|--|
|  |  |  |  |  |  | X|  |
|--|--|--|--|--|--|--|--|

このチェス盤があまり正方形ではないことは知っていますが、これは現時点ではラフ ドラフトにすぎません。

4

2 に答える 2

1

別の実装を次に示します。

def make_row(rowdata, col, empty, full):
    items = [col] * (2*len(rowdata) + 1)
    items[1::2] = (full if d else empty for d in rowdata)
    return ''.join(items)

def make_board(queens, col="|", row="---", empty="   ", full=" X "):
    size = len(queens)
    bar = make_row(queens, col, row, row)
    board = [bar] * (2*size + 1)
    board[1::2] = (make_row([i==q for i in range(size)], col, empty, full) for q in queens)
    return '\n'.join(board)

queens = [0,2,6,4,7,1,5,3]
print(make_board(queens))

その結果、

|---|---|---|---|---|---|---|---|
| X |   |   |   |   |   |   |   |
|---|---|---|---|---|---|---|---|
|   |   | X |   |   |   |   |   |
|---|---|---|---|---|---|---|---|
|   |   |   |   |   |   | X |   |
|---|---|---|---|---|---|---|---|
|   |   |   |   | X |   |   |   |
|---|---|---|---|---|---|---|---|
|   |   |   |   |   |   |   | X |
|---|---|---|---|---|---|---|---|
|   | X |   |   |   |   |   |   |
|---|---|---|---|---|---|---|---|
|   |   |   |   |   | X |   |   |
|---|---|---|---|---|---|---|---|
|   |   |   | X |   |   |   |   |
|---|---|---|---|---|---|---|---|

row、empty、full に渡される文字列を変更することで、ボードの幅を簡単に変更できるようになりました。それぞれに余分な文字を追加した結果、(やや)四角いボードになりました。

于 2014-02-09T04:15:24.090 に答える
0

あなたはまだ余分な改行を印刷しています:

def row(c):
   row_top()
   row_data(c)
   print("\n")

明示的な ''\n'` 文字を削除します。

def row(c):
    row_top()
    row_data(c)
    print()

または、さらに良いことに、以前の回答にさらに厳密に従って、クロージング|バーを出力します。

def row(c):
    row_top()
    row_data(c)
    print('|')
于 2014-02-09T03:13:00.747 に答える