1st项目:数独拼图帮助

dgsult0t  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(293)

我有这个代码来制作一个更漂亮的数独板。我想知道为什么最后一列的零不会消失。列中的其他零消失,但不是最后一列。也期待一些反馈。

board = [[5, 3, 0, 0, 7, 0, 0, 0, 0],
         [6, 0, 0, 1, 9, 5, 0, 0, 0],
         [0, 9, 8, 0, 0, 0, 0, 6, 0],
         [8, 0, 0, 0, 6, 0, 0, 0, 3],
         [4, 0, 0, 8, 0, 3, 0, 0, 1],
         [7, 0, 0, 0, 2, 0, 0, 0, 6],
         [0, 6, 0, 0, 0, 0, 2, 8, 0],
         [0, 0, 0, 4, 1, 9, 0, 0, 5],
         [0, 0, 0, 0, 8, 0, 0, 7, 9]]

def print_board(board):
  print("-------------------------")
  for i in range(len(board)):
    if i % 3 == 0 and i != 0:
      print("-------------------------")
    for t in range(len(board[0])):
      if t % 3 == 0:
        print("| ", end="")
      if t == 8:
        print(str(board[i][t]) + " |")
      else:
        if board[i][t] == 0:
          print(" " + "", end=" ")
        if board[i][t] != 0:
          print(str(board[i][t]) + "", end=" ")
  print("-------------------------")
kt06eoxx

kt06eoxx1#

请尝试以下代码:

board = [[5, 3, 0, 0, 7, 0, 0, 0, 0],
         [6, 0, 0, 1, 9, 5, 0, 0, 0],
         [0, 9, 8, 0, 0, 0, 0, 6, 0],
         [8, 0, 0, 0, 6, 0, 0, 0, 3],
         [4, 0, 0, 8, 0, 3, 0, 0, 1],
         [7, 0, 0, 0, 2, 0, 0, 0, 6],
         [0, 6, 0, 0, 0, 0, 2, 8, 0],
         [0, 0, 0, 4, 1, 9, 0, 0, 5],
         [0, 0, 0, 0, 8, 0, 0, 7, 9]]

def print_board(board):
  print("-------------------------")
  for i in range(len(board)):
    if i % 3 == 0 and i != 0:
      print("-------------------------")
    for t in range(len(board[0])):
      if t % 3 == 0:
        print("| ", end="")
      if board[i][t] != 0:
          if t == 8:
            print(str(board[i][t]) + " |")
          else:
              print(str(board[i][t]) + "", end=" ")
      if board[i][t] == 0:
          if t == 8:
            print(" "+ " |")
          else:
            print(" " + "", end=" ")

  print("-------------------------")

print_board(board)

输出:

-------------------------
| 5 3   |   7   |       |
| 6     | 1 9 5 |       |
|   9 8 |       |   6   |
-------------------------
| 8     |   6   |     3 |
| 4     | 8   3 |     1 |
| 7     |   2   |     6 |
-------------------------
|   6   |       | 2 8   |
|       | 4 1 9 |     5 |
|       |   8   |   7 9 |
-------------------------
y4ekin9u

y4ekin9u2#

在if/else块中,就像最后一个以 if t == 8: ,的 else 仅当 if 上面的说法是错误的。因此,您的代码只设置为在不查看最后一列时处理值是否为0。
您应该只对互斥的情况使用if/else,例如 t % 3 == 0 以及 t == 8 .

zy1mlcev

zy1mlcev3#

制作一个小助手函数:

def pr_el(val):
    if val == 0:
        return " "
    else:
        return str(val)

只需允许 i%3==0 打印一行。另外,您不需要以不同的方式处理最后一个字符;只需在这行的最后一个边框上再加上一个印刷品。
那么您的代码是:

def print_board(board):
  for i in range(len(board)):
    if i % 3 == 0:
      print("-------------------------")
    for t in range(len(board[0])):
      if t % 3 == 0:
        print("| ", end="")
      print ( pr_el(board[i][t]), end=" ")
    print("|")

  print("-------------------------")

相关问题