Python 如何在特定字符限制后打印新行
我正在尝试制作一个6列7行的迷你连接4板 我正在寻找这样的输出:Python 如何在特定字符限制后打印新行,python,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个
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个数字打印一行新行。你在找二维板吗?如果是这样,您可以使用列表理解:
board = [[6*j+i for i in range(1,7)] for j in range(7)]
并按如下方式打印内容(使用python3):
你是在找一块二维板吗?如果是这样,您可以使用列表理解:
board = [[6*j+i for i in range(1,7)] for j in range(7)]
并按如下方式打印内容(使用python3):
为了使你的电路板看起来漂亮而不仅仅是正确,你还需要一些格式 您可以使用以下方法获得这两种结果:
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
如您所见,我正在通过指定end=''
来抑制作为换行符的print()
的默认结束字符。相反,每当i%6==0
(%
是mod)通过调用空的print()
来打印新行。至于格式,你可以看一下
为了让一切变得更加用户友好,我将它包装在一个函数中
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
为了使你的电路板看起来漂亮而不仅仅是正确,你还需要一些格式 您可以使用以下方法获得这两种结果:
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
如您所见,我正在通过指定end=''
来抑制作为换行符的print()
的默认结束字符。相反,每当i%6==0
(%
是mod)通过调用空的print()
来打印新行。至于格式,你可以看一下
为了让一切变得更加用户友好,我将它包装在一个函数中
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
这是另一种方法
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)
这是另一种方法
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)
如果您使用的是Python2.x,那么可以基于EV这样做。Kounis解决方案:
board = []
for i in range (1,43):
board.append(i)
if i%6 == 0 :print board[i-6:]
如果电路板已经创建,您只需打印它,您可以这样做:
for i in range(1,8) :print board[:i*6][(i-1)*6:]
(董事会[25:]指无25个第一值的董事会,以及
board[:25]表示board的25个第一个值)如果您使用的是Python2.x,您可以根据EV这样做。Kounis解决方案:
board = []
for i in range (1,43):
board.append(i)
if i%6 == 0 :print board[i-6:]
如果电路板已经创建,您只需打印它,您可以这样做:
for i in range(1,8) :print board[:i*6][(i-1)*6:]
(董事会[25:]指无25个第一值的董事会,以及
board[:25]表示board的25个第一个值)在您发布的EAX示例中,最后三行只有5个字符。如果不是这样的话,您可能已经用mod6识别了模式。简而言之,您可以检查
i
的mod6,当它为0时,执行print()
您使用的是Python 2还是Python 3?在您发布的EAX示例中,最后三行只有5个字符。如果不是这样的话,您可能已经用mod6识别了模式。简而言之,您可以检查i
的mod6,当它为0时,执行print()
您使用的是Python 2还是Python 3?