[英]Python print number range on multiple lines
我只是想在 Python 中做一些循环函数,但是我几乎被困在这里。
我不知道它应该是嵌套循环还是同时循环,如果是,可能如何使用它。
Python 告诉我(ValueError:要解压的值太多)
这是我的代码:
rows = 16
for i in range(rows):
for a,b,c,d,e,f,g,h,j in range(1, 17), range(18, 34), range(35, 40), range(41, 57), range(58, 74), range(75, 91), range(92, 108), range(109, 125), range(126, 127):
print '{0:4d} {1:4d} {2:4d} {3:4d} {4:4d} {5:4d} {6:4d} {7:4d}'.format(a, b, c, d, e, f, g, h, j)
我基本上希望应用程序在 16 行的布局中打印出从 1 到 128 的数字范围,数字是水平的:
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
122 122 122 122 122 122 122 122
123 123 123 123 123 123 123 123
124 124 124 124 124 124 124 124
125 125 125 125 125 125 125 125
126 126 126 126 126 126 126 126
127 127 127 127 127 127 127 127
128 128 128 128 128 128 128 128
128 128 128 128 128 128 128 128
124 124 124 124 124 124 124 124
125 125 125 125 125 125 125 125
126 126 126 126 126 126 126 126
127 127 127 127 127 127 127 127
128 128 128 128 128 128 128 128
128 128 128 128 128 128 128 128
这将是一种不那么复杂的方式:
def printRows(startNum, endNum, numCols=8):
for n in xrange(startNum, endNum, numCols):
for c in xrange(numCols):
curNum = n + c
if curNum > endNum: break
print '{0: >4}'.format(str(curNum)),
print
In [57]: printRows(1,128)
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 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88
89 90 91 92 93 94 95 96
97 98 99 100 101 102 103 104
105 106 107 108 109 110 111 112
113 114 115 116 117 118 119 120
121 122 123 124 125 126 127 128
此方法还允许使用更通用的方法,可用于打印几乎任何给定startNum
、 endNum
和numCols
。 例如,
In [97]: printRows(37,129,10)
37 38 39 40 41 42 43 44 45 46
47 48 49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64 65 66
67 68 69 70 71 72 73 74 75 76
77 78 79 80 81 82 83 84 85 86
87 88 89 90 91 92 93 94 95 96
97 98 99 100 101 102 103 104 105 106
107 108 109 110 111 112 113 114 115 116
117 118 119 120 121 122 123 124 125 126
127 128 129
In [98]: printRows(1,15,3)
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
In [99]: printRows(9,27,4)
9 10 11 12
13 14 15 16
17 18 19 20
21 22 23 24
25 26 27
您的代码中存在多个问题。 主要是:
如果您只需要解压缩值,则不需要循环:
简单地a , b = range(0,100), range(101,200)
有效
print '{0:4d}'.format(a)
不希望a
是一个列表。对我来说,下面的代码有效:
rows = 16
for i in range(rows):
a,b,c,d,e,f,g,h,j = range(1, 17), range(18, 34), range(35, 40), range(41, 57), range(58, 74), range(75, 91), range(92, 108), range(109, 125), range(126, 127)
print '{0:4d} {1:4d}'.format(10,100)
我知道这不是您想要的输出,但它肯定会有所帮助。
更新:
rows = 16
for i in range(rows):
k = i*8+1
for j in range(k,k+8):
print '{0:4d}'.format(j),
print " "
@JonB 解决方案的推导。 它包括一个可选的函数参数,用于根据当前索引 n 计算值。 您可以扩展此示例,以便等式将 start、end、num_column 和字典作为附加参数。
def x(n):
return n
def print_rows(start, end, num_columns = 8, equation = x):
for n in xrange(start, end + 1):
print '{0: >4}'.format(str(equation(n))),
if ( ((n - (start - 1)) % num_columns) == 0 or n == end ):
print
# these return the same values as JonB's solution
print_rows(1, 128)
print_rows(37,129)
print_rows(1,15,3)
def multiply_by_three(n):
return n * 3
print_rows(1,20,4,multiply_by_three)
# returns
3 6 9 12
15 18 21 24
27 30 33 36
39 42 45 48
51 54 57 60
这是无效的:
for i , b in range(0,10) , range(10,20):
您不能在单个for
语句中解压 2 个循环。
在您的print
语句中,您有 8 个{}
和 9 个值
x = []
for e in range(1, 129):
x.append(e)
strt = 0
end = 8
for i in range(0, 16):
print(*x[strt:end])
strt = end
end += 8
#Output:
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 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
65 66 67 68 69 70 71 72
73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88
89 90 91 92 93 94 95 96
97 98 99 100 101 102 103 104
105 106 107 108 109 110 111 112
113 114 115 116 117 118 119 120
121 122 123 124 125 126 127 128
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.