用for循环以不同的原始和蛇形图案打印24个数字

2024-04-24 16:13:00 发布

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

我想知道如何在下面的模式下用python 3.x编写代码:

24 23 22 21 20 19

13 14 15 16 17 18

12 11 10 9 8  7

1  2  3  4 5  6

这就是我所尝试的:

^{pr2}$

Tags: 代码模式pr2
1条回答
网友
1楼 · 发布于 2024-04-24 16:13:00

所需输出的间距不清楚。我假设您希望每个数字占用4个空格,就像在您尝试的代码中一样。这里是python3.6.1代码,它使用多个范围,并避免使用列表、字典、理解和连接,就像您的代码一样。这些特性可能会使代码更简洁。此代码确实使用了布尔标志变量和使用三元运算符的范围。在

rows = 4
cols = 6

increasing = True
for j in range(rows * cols, 0, -cols):
    increasing = not increasing
    for k in range(j-cols+1, j+1) if increasing else range(j, j-cols, -1):
        print('{0:4d}'.format(k), sep='', end='')
    print()

我得到的结果是:

^{pr2}$

以下是不使用布尔标志变量的版本,直接使用行中的最大值来确定该行是按升序还是降序排列:

rows = 4
cols = 6

for j in range(rows * cols, 0, -cols):
    for k in range(j-cols+1, j+1) if j // cols % 2 else range(j, j-cols, -1):
        print('{0:4d}'.format(k), sep='', end='')
    print()

这段代码比我以前的代码短了两行,但不够清晰。对于4行6列,其输出与我之前的代码相同。但是,我以前的代码总是按递减的顺序打印第一行行,而此代码始终以递增的顺序打印最后一行。只有当行数为奇数时,您才会看到差异,而问题描述没有明确说明您想要哪一行。最后一个代码可以修改为始终与我的第一个代码一致,但这会使它更加复杂。在

{/strong>只有一个值被编码成两个值。在Python中,这两个值是True和{}。该类型是以George Boole命名的,他首先创建了一个逻辑代数。flag variable是一个变量,它保存两个可能值中的一个,通常但不总是布尔值。它表示系统的某个状态,并将该状态传递给程序的各个部分。这就像老式美国邮政信箱上的“旗帜”,升起来表示盒子里装的是外寄邮件,而降下则表示没有外寄邮件。许多铁路系统有类似的旗帜只有两个州,显示/升起或不显示/未升起。在

在我的第一段代码中,increasing是一个布尔标志变量。它表示“当前行”中数字的打印方向True表示升序,False表示降序。对于每一行,该标志被反转,以获得所需的“snake pattern”。在检查任何行之前,我将其设置为True(递增顺序),因此第一个打印的行将按降序打印。该标志的状态用于为行选择适当的范围一行的两个可能的范围具有相同的值,但顺序不同。在

在我的第二段代码中,我通过检查j的值(该行中最大的数字)直接计算行的正确顺序,从而避免了标志变量。我将其除以列数,得到当前行的行号,其中1是最后一行。然后,我通过检查行号除以2后的余数来查看该行号是偶数还是奇数。所有这些都是在表达式j // cols % 2中完成的。如果该值为奇数,则余数为1,并且Python considers any non-zero number to be "Truthy",并将该表达式视为True。如果行号是偶数,则计算出的余数为零,因此“错误”,并被视为False。所以我得到了一个逻辑结果,根本不用标志变量或任何布尔值。正如我所说,这比我的第一个代码要短,但是更难理解。在

相关问题 更多 >