多行上的Python打印编号范围

时间:2015-01-15 16:21:07

标签: python for-loop repr

我只是想在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

6 个答案:

答案 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

此方法还允许使用更通用的方法,可用于打印给定startNumendNumnumCols的任何表格。例如,

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)

代码中存在多个问题。主要是:

  1. 如果您只需要解压缩值,则不需要循环:

    只需a , b = range(0,100), range(101,200)无效

  2. print '{0:4d}'.format(a)不希望a成为列表。
  3. 对我来说,代码可以工作:

    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