如何在特定字符限制后打印新行

时间:2016-11-15 13:53:42

标签: python

我正在尝试制作一个6列7行的迷你连接4板

我正在寻找这样的输出:

1 2 3 4 5 6 
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30

等等到42.

我想在一个列表中创建它。我开始走这条正确的轨道

board = []
for i in range (1,43):
    board.append(i)

我理解我需要的所有数字都在那里,但我不知道如何分解列表,以便每6个数字打印一个新行,就像我展示的那样。

5 个答案:

答案 0 :(得分:1)

为了让你的电路板看起来漂亮而不仅仅是正确的,你也需要一些格式化。

您可以使用以下内容获取两者:

board = []
for i in range(1,43):
    board.append(i)
    print('{:>4}'.format(i), end='')
    if i % 6 == 0:
        print()

 #  1   2   3   4   5   6
 #  7   8   9  10  11  12
 # 13  14  15  16  17  18
 # 19  20  21  22  23  24
 # 25  26  27  28  29  30
 # 31  32  33  34  35  36
 # 37  38  39  40  41  42

正如您所看到的,我通过指定print()来抑制end=''的默认结束字符,即新行。相反,只要i % 6 == 0%顺便修改),就会通过调用空print()来打印换行符。至于格式化,您可以查看the documentation

为了使一切更加用户友好,我会把它包装在一个函数

def build_board(cols, rows, sp=2):
    board = []
    l = len(str(cols * rows)) + sp
    for i in range(1, cols * rows + 1):
        board.append(i)
        print('{0:>{1}}'.format(i, l), end='')
        if i % cols == 0:
            print()
    return board

build_board(8, 17, 3)

#         1     2     3     4     5     6     7     8
#         9    10    11    12    13    14    15    16
#        17    18    19    20    21    22    23    24
#        25    26    27    28    29    30    31    32
#       ...
#       121   122   123   124   125   126   127   128
#       129   130   131   132   133   134   135   136

答案 1 :(得分:1)

board = []
for i in range(1,43):
    board.append(i)
    if i % 6 == 0:
        print(board[i-6:i])

答案 2 :(得分:0)

您在寻找二维板吗?如果是这样,你可以使用列表理解:

board = [[6*j+i for i in range(1,7)] for j in range(7)]

并打印内容(使用python3):

for row in board:
    for column in row:
        print(column, end=' ')
    print()


1 2 3 4 5 6 
7 8 9 10 11 12 
13 14 15 16 17 18 
19 20 21 22 23 24 
25 26 27 28 29 30 
31 32 33 34 35 36 
37 38 39 40 41 42 

答案 3 :(得分:0)

这是另一种方法。

import numpy as np

# convert 1D vector into 2D array
data = np.array(board).reshape(6, 7)
print '\n'.join(''.join(str(col)+' ' for col in row) for row in data)

答案 4 :(得分:0)

如果你正在使用python 2.x,你可以这样做,基于EV。 Kounis解决方案:

board = []
for i in range (1,43):
    board.append(i)
    if i%6 == 0 :print board[i-6:]

如果已经创建了Board并且您只需要打印它,您可以这样做:

for i in range(1,8) :print board[:i*6][(i-1)*6:]

(董事会[25:]表示没有25个第一个值的董事会,和  board [:25]表示董事会的25个第一个值