[英]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.