【问题标题】:Creating a chess board for the 8 Queens puzzle为 8 个皇后拼图创建棋盘
【发布时间】:2014-02-09 03:11:36
【问题描述】:
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)

我的输出每两行有一个空格,如果不应该有,我不确定它在哪里创建了额外的行。

输出应该是这样的:

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

我知道这个棋盘不是很方正,但目前这只是一个草稿。

【问题讨论】:

  • 阅读那个上的 cmets...
  • 好的,但请不要对每一个小改动都提出单独的问题。最好只问一次。
  • @pakiboii 如果在另一个问题上您没有编辑问题以包含答案,那么这个问题看起来不会像那个问题。这就是为什么我试图回滚你在那里所做的编辑。
  • 我这样做了,但其他人告诉我做一个单独的问题,这就是我所做的。

标签: python function for-loop ascii ascii-art


【解决方案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 |   |   |   |   |
|---|---|---|---|---|---|---|---|

现在很容易通过更改传递给行、空、满的字符串来更改板的宽度;我为每个字符添加了一个额外的字符,从而形成了一个(有点)方形板。

【讨论】:

    【解决方案2】:

    您仍在打印额外的换行符:

    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('|')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 2017-05-31
      • 2019-01-19
      • 1970-01-01
      相关资源
      最近更新 更多