我只是想在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)
我基本上希望应用程序在这个布局中打印出1到128的数字范围,超过16行,数字是水平的:
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
答案 0 :(得分:2)
这将是一种不太复杂的方式:
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
答案 1 :(得分:1)
代码中存在多个问题。主要是:
如果您只需要解压缩值,则不需要循环:
只需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 " "
答案 2 :(得分:1)
@ JonB的解决方案的推导。它包括一个可选的函数参数,用于根据当前索引n计算值。您可以扩展此示例,以便等式将start,end,num_column和字典作为addtional参数。
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
答案 3 :(得分:0)
这是无效的:
for i , b in range(0,10) , range(10,20):
您无法在单个for
语句中解压缩2个循环。
答案 4 :(得分:-1)
在print
statement中,您有8个{}
和9个值
答案 5 :(得分:-1)
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