我有以下代码,必须根据用户指定的尺寸打印出数字板(例如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
之后停止,以便每个列表都是指定的长度。
我现在有一个我想要的数字列表,但是如何将它们分成网格呢?
我真的很感激任何帮助!
答案 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