如何使用用户输入打印7行数字的6行

时间:2019-03-14 15:03:56

标签: python python-3.x

我必须编写一个接受数字n的程序,其中-6

即,数字使用字段宽度2打印,并右对齐。字段由单个空格分隔。最后一个字段之后没有空格。

输出:  输入起始号码:-2

  -2 -1 0 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
 

数字必须直接在彼此下排列。 我完全不知道该怎么做

到目前为止,这是我的代码:

  start = int(input('输入起始编号:'))
对于范围(n,n + 41)中的n:
 

如果您能帮助我,我将非常感谢。

2 个答案:

答案 0 :(得分:1)

我假设您不允许使用库来为您列出数字,并且应该自己进行逻辑计算。

您需要打印6行数字。首先确定每行的第一个数字。这由range(n,n+42,7)(注意,不是n+41)给出。对于起始值-2,它们是数字-2、5、12、19、26、33。行中的每个其他数字仅是接下来的6个整数。如果行中的第一个数字为leftmost,则整个行由range(leftmost, leftmost + 7)给出。所以第一行是数字-2,-1、0、1、2、3、4。

要打印6行的7个数字,您需要循环执行6次迭代,每个leftmost的值重复一次。在该循环中,您将打印其他数字。唯一的麻烦是列表中的所有数字后面都必须跟一个空格,除了最后一个空格。因此必须得到特殊对待。

您需要指定格式{0:2d},以确保“数字使用2的字段宽度打印”。

n = -2
for leftmost in range(n,n+42,7):
    for value in range(leftmost,leftmost + 6):
        print("{0:2d}".format(value), end=" ")
    print("{0:2d}".format(leftmost+6))

-2 -1  0  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

答案 1 :(得分:0)

检查tabulatehere,您可以使用它来格式化输出-tablefmt="plain"参数产生一个非常相似的表。

如果将数字存储在list中,则可以使用list slicing来获取每行包含7个数字的行,并将其放入另一个列表中,以满足tabulate期望的格式

from tabulate import tabulate

n = 2

while not -6 < n < 2:
    n = int(input('Please submit a number greater than -6 and smaller than 2:\n'))

number_list, output_list = [], []

for i in range(42):
    number_list.append(n + i)

for i in range(6):
    output_list.append(number_list[i*7:i*7+7])

print()
print(
    tabulate(
        output_list, 
        tablefmt='plain'
    )
)

Please submit a number greater than -6 and smaller than 2:
-3                                                        
-3  -2  -1   0   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