繁体   English   中英

Python 在多行上打印数字范围

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

此方法还允许使用更通用的方法,可用于打印几乎任何给定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. 如果您只需要解压缩值,则不需要循环:

    简单地a , b = range(0,100), range(101,200)有效

  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM