[英]python printing list items incremented on lines
我正在尝试接受用户输入,并以框格式将数字列表打印到python中的不同行上。
现在我有:
horizontalsize = int (input ('please enter horizontal size '))
verticalsize = int (input ('please enter vertical size '))
numbers = horizontalsize * verticalsize
mylist = []
mylist.append(range(1,numbers))
for i in range(1,numbers,horizontalsize):
print (i)
用户将输入高度和宽度,如果高度输入为5而宽度输入为3,则应打印:
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
目前我正在得到:
1
4
7
10
13
我如何才能填写其余数字? 任何帮助是极大的赞赏!
这应该工作:
for i in range(1, numbers, horizontalsize):
lst = range(i, i+horizontalsize)
print lst # format is [1,2,3]
print ' '.join(map(str,lst)) # format is "1 2 3"
您还可以通过列表理解来声明2D列表,例如:
>>> horizontalsize = 3
>>> numbers = 15
>>> ll = [[x for x in range(y,y+horizontalsize)]
for y in range(1,numbers,horizontalsize)]
>>> ll
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]
>>> for line in ll:
... print ' '.join(map(str,line))
...
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
您正在使用的range()
将从1开始,增加到numbers
,然后每次增加一次horizontalsize
。 您将直接从该范围提取i
的值,因此这些将是您获得的唯一值。 一种简单的解决方案是添加第二个嵌套循环以生成缺失值(在i
和i+horizontalsize
)。
for i in range(1,numbers,horizontalsize):
for j in range(i, i+horizontalsize):
print (j, end=" ")
print() #for the newline after every row
您的循环步骤将跳过1到1 +水平尺寸之间的所有数字,而您只需打印出该数字即可(不必担心将内容放在换行符上)。 您要么需要插入一个嵌套的for循环,要么修改范围以遍历每个数字,然后仅将换行符放在特定的数字之后。
第二种解决方案,使用模运算符:
for i in range(1,(numbers+1)):
print(i,end=" ")
if i % horizontalsize == 0:
print()
这给了我:
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.