如何在python中使用整数制作网格?

时间:2017-12-01 12:31:49

标签: python arrays python-3.x

我有以下代码,必须根据用户指定的尺寸打印出数字板(例如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之后停止,以便每个列表都是指定的长度。

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

我真的很感激任何帮助!

3 个答案:

答案 0 :(得分:3)

默认情况下,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()

编辑:通过计算出数字的最大长度,我们可以调整它们的打印格式。这应该支持任何规模的董事会。

答案 1 :(得分:2)

这是一个采用方形尺寸并打印它的函数。

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

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 :(得分:1)

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

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