循环以生成从0到8的值对,从而生成3x3块

2024-09-26 18:14:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个循环来生成从0到8的成对值。对于块上方的每个值,我必须生成一个介于0和8之间的第二个值。我还必须在每个3x3块之间设置间距。 我附上了一张输出应该是什么样子的图片,因为我无法用语言描述输出

enter image description here

我试着在环上玩末端和sep,但没用。我不太熟悉Python,但下面是我尝试过的

for i in range(0,9):
    for j in range(0, 9):
        print (i,j, sep = ',', end = ' ')

从这段代码中,我可以生成所需的对,但我不知道如何将它们隔开。 任何事都值得感激。提前谢谢你


Tags: 代码in语言for图片rangesepend
2条回答

一种更通用的方法:我们创建一个函数,它接受字符串列表、分隔符和块大小,并用分隔符连接每个字符串块

我们创建值列表,用一个空格将它们3乘3连接起来,得到三元组,用更多的空格将三元组3乘3连接起来,得到行,用3乘3连接起来,得到行块,用两个换行符连接起来,得到表

代码比说明短:

from itertools import product

def join_by(strings, sep, n=3):
    """Return a list of strings obtained by joining chunks of n strings with sep"""
    return [sep.join(chunk) for chunk in (out[i:i+n] for i in range(0, len(out), n))]

values = [f'{row},{col}' for row, col in product(range(9), repeat=2)]

triplets = join_by(values, ' ', 3) 
lines = join_by(triplets, '   ', 3)
line_groups = join_by(lines, '\n', 3)
table = join_by(line_groups, '\n\n', 3)[0]

输出:

print(table)

0,0 0,1 0,2   0,3 0,4 0,5   0,6 0,7 0,8
1,0 1,1 1,2   1,3 1,4 1,5   1,6 1,7 1,8
2,0 2,1 2,2   2,3 2,4 2,5   2,6 2,7 2,8

3,0 3,1 3,2   3,3 3,4 3,5   3,6 3,7 3,8
4,0 4,1 4,2   4,3 4,4 4,5   4,6 4,7 4,8
5,0 5,1 5,2   5,3 5,4 5,5   5,6 5,7 5,8

6,0 6,1 6,2   6,3 6,4 6,5   6,6 6,7 6,8
7,0 7,1 7,2   7,3 7,4 7,5   7,6 7,7 7,8
8,0 8,1 8,2   8,3 8,4 8,5   8,6 8,7 8,8

根据我的说法,该代码运行良好:

for i in range (9):
        k = 0

        if i % 3 == 0:
            print()

        for j in range (9):

            if k % 9 == 0:
                print()

            if j % 3 == 2:
                print(i, j, sep = ',', end = '  ')

            else:
                print(i, j, sep = ',', end = ' ')
            k += 1

我很难解释它的作用,但一旦你看到它,你就会马上得到它

相关问题 更多 >

    热门问题