【问题标题】:How to make a grid with integers in python?如何在python中用整数制作网格?
【发布时间】:2017-12-01 12:31:48
【问题描述】:

我有以下代码,它必须根据用户指定的尺寸打印出带有数字的板(例如 3 表示 3 x 3 板):

n = d * d
    count = 1
    board = []
    for i in range(d):
        for j in range(d):
            number = n - count
            if number >= 0 :
                tile = number
                board.append[tile]
            else:
                exit(1)
            count += 1
            print(board)

我需要把它放在一个网格中,这样电路板的大小就是 3 x 3,就像这样:

8 7 6
5 4 3
2 1 0

我试图做的是获取列表中的每一行(例如 [8 7 6] [5 4.. 等),然后在网格中打印这些列表。为了做到这一点,我想我必须创建一个空列表,然后将数字添加到该列表中,在每个 d 之后停止,以便每个列表都是指定的长度。

我现在有一个我想要的数字列表,但是如何将它们分隔成一个网格?

非常感谢任何帮助!

【问题讨论】:

  • 此代码甚至没有尝试满足要求。向我们展示一个体面的尝试,例如“你用append 试过的东西”。我们可以帮助您解决这个问题。
  • 好的,我现在编辑了!
  • 太棒了。所以。你的代码有什么问题?请详细说明“没有用”。具体一点。
  • @Jean-François Corbett 我试着更具体一些。谢谢你帮助我,我希望这样更好!

标签: python arrays python-3.x


【解决方案1】:

这是一个获取正方形大小并打印它的函数。

如果您需要解释,请不要犹豫。

def my_print_square(d):
    all_ = d * d

    x = list(range(all_))
    x.sort(reverse=True)  # the x value is a list with all value sorted reverse.
    i=0
    while i < all_:
       print(" ".join(map(str, x[i:i+d])))
       i += d


my_print_square(5)
24 23 22 21 20
19 18 17 16 15
14 13 12 11 10
9 8 7 6 5
4 3 2 1 0

【讨论】:

    【解决方案2】:

    默认情况下,print() 函数将“\n”添加到要打印的字符串的末尾。您可以通过传入 end 参数来覆盖它。

    print(string, end=" ")
    

    在这种情况下,我们添加的是空格而不是换行符。 然后我们必须在每一行的末尾使用 print() 手动打印换行符。

    n = d * d
    count = 1
    max_len = len(str(n-1))
    form = "%" + str(max_len) + "d"
    for i in range(d):
        for j in range(d):
            number = n - count
            if number >= 0 :
                tile = number
            else:
                exit(1)
            count += 1
            print(form%(tile), end=" ") 
        print()
    

    编辑:通过计算数字的最大长度,我们可以调整它们的打印格式。这应该支持任何尺寸的电路板。

    【讨论】:

    • 好的,谢谢!这也是我尝试过的,但它只适用于 3 x 3 网格,不适用于其他尺寸。我怎样才能让它也适用于 4 或 5?
    • 提示 - 查看format()
    • 你可以试试 print("%2d" %(tile), end=" ")
    • 谢谢@Sam,这正是我想要的!
    【解决方案3】:

    您可以将板创建为嵌套列表,其中每个列表都是板上的一行。然后在最后连接它们:

    def get_board(n):
        # get the numbers
        numbers = [i for i in range(n * n)]
    
        # create the nested list representing the board
        rev_board = [numbers[i:i+n][::-1] for i in range(0, len(numbers), n)]
    
        return rev_board
    
    board = get_board(3)
    
    # print each list(row) of the board, from end to start
    print('\n'.join(' '.join(str(x) for x in row) for row in reversed(board)))
    

    哪些输出:

    8 7 6
    5 4 3
    2 1 0
    

    如果您想对齐 4 或 5 个大小的网格的数字,只需使用 %d 格式说明符:

    board = get_board(4)
    
    for line in reversed(board):
        for number in line:
            print("%2d" % number, end = " ")
        print()
    

    这给出了一个对齐的网格:

    15 14 13 12 
    11 10  9  8 
     7  6  5  4 
     3  2  1  0 
    

    【讨论】:

      猜你喜欢
      • 2023-02-22
      • 1970-01-01
      • 2021-12-24
      • 2022-01-13
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2021-01-01
      • 2012-11-10
      相关资源
      最近更新 更多