-2

私はPythonでいくつかのループ機能を実行しようとしていますが、ここでほとんど立ち往生しています。

ネストされたループまたは同時ループであるかどうかはわかりません。もしそうなら、おそらくそれを使用する方法。

Python が教えてくれます (ValueError: unpack する値が多すぎます)

これが私のコードです:

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
4

6 に答える 6

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
于 2015-01-15T17:05:13.410 に答える
1

コードに複数の問題があります。主に:

  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 " "
于 2015-01-15T16:46:39.193 に答える
1

@JonBのソリューションの派生。現在のインデックス n に基づいて値を計算するためのオプションの関数パラメーターが含まれています。この例を拡張して、方程式が開始、終了、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 
于 2015-02-07T09:39:27.527 に答える
0

これは無効です:

for i , b in range(0,10) , range(10,20):

for1 つのステートメントで 2 つのループをアンパックすることはできません。

于 2015-01-15T16:35:53.790 に答える
-1

あなたのprint声明では、8{}と9の値があります

于 2015-01-15T16:23:16.127 に答える