乘法表格式

时间:2016-11-09 19:50:41

标签: python python-2.7

我创建了一个简单的脚本,它将生成一个乘法表并输出它。它的工作原理非常酷,但我想知道是否有一种方法可以解决它当它高于10时.10(在行上)它将是一个空白的表,其余的表,如何我修复了这个小格式问题?

if __name__ == '__main__':
    for row in range(1, 20+1):
        table = ''
        for column in range(1, 20+1):
            table += '{:4} '.format(row * column)
        print(table.strip())

示例:

1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20
2    4    6    8   10   12   14   16   18   20   22   24   26   28   30   32   34   36   38   40
3    6    9   12   15   18   21   24   27   30   33   36   39   42   45   48   51   54   57   60
4    8   12   16   20   24   28   32   36   40   44   48   52   56   60   64   68   72   76   80
5   10   15   20   25   30   35   40   45   50   55   60   65   70   75   80   85   90   95  100
6   12   18   24   30   36   42   48   54   60   66   72   78   84   90   96  102  108  114  120
7   14   21   28   35   42   49   56   63   70   77   84   91   98  105  112  119  126  133  140
8   16   24   32   40   48   56   64   72   80   88   96  104  112  120  128  136  144  152  160
9   18   27   36   45   54   63   72   81   90   99  108  117  126  135  144  153  162  171  180
10   20   30   40   50   60   70   80   90  100  110  120  130  140  150  160  170  180  190  200
11   22   33   44   55   66   77   88   99  110  121  132  143  154  165  176  187  198  209  220
12   24   36   48   60   72   84   96  108  120  132  144  156  168  180  192  204  216  228  240
13   26   39   52   65   78   91  104  117  130  143  156  169  182  195  208  221  234  247  260
14   28   42   56   70   84   98  112  126  140  154  168  182  196  210  224  238  252  266  280
15   30   45   60   75   90  105  120  135  150  165  180  195  210  225  240  255  270  285  300
16   32   48   64   80   96  112  128  144  160  176  192  208  224  240  256  272  288  304  320
17   34   51   68   85  102  119  136  153  170  187  204  221  238  255  272  289  306  323  340
18   36   54   72   90  108  126  144  162  180  198  216  234  252  270  288  306  324  342  360
19   38   57   76   95  114  133  152  171  190  209  228  247  266  285  304  323  342  361  380
20   40   60   80  100  120  140  160  180  200  220  240  260  280  300  320  340  360  380  400

4 个答案:

答案 0 :(得分:2)

您可以使用{:<6}

的空格调整字符串
for row in range(1, 20+1):
    table = ''
    for column in range(1, 20+1):
        table += '{:<6} '.format(row * column)
    print table.strip()

输出

1      2      3      4      5      6      7      8      9      10     11     12     13     14     15     16     17     18     19     20
2      4      6      8      10     12     14     16     18     20     22     24     26     28     30     32     34     36     38     40
3      6      9      12     15     18     21     24     27     30     33     36     39     42     45     48     51     54     57     60
4      8      12     16     20     24     28     32     36     40     44     48     52     56     60     64     68     72     76     80
5      10     15     20     25     30     35     40     45     50     55     60     65     70     75     80     85     90     95     100
6      12     18     24     30     36     42     48     54     60     66     72     78     84     90     96     102    108    114    120
7      14     21     28     35     42     49     56     63     70     77     84     91     98     105    112    119    126    133    140
8      16     24     32     40     48     56     64     72     80     88     96     104    112    120    128    136    144    152    160
9      18     27     36     45     54     63     72     81     90     99     108    117    126    135    144    153    162    171    180
10     20     30     40     50     60     70     80     90     100    110    120    130    140    150    160    170    180    190    200
11     22     33     44     55     66     77     88     99     110    121    132    143    154    165    176    187    198    209    220
12     24     36     48     60     72     84     96     108    120    132    144    156    168    180    192    204    216    228    240
13     26     39     52     65     78     91     104    117    130    143    156    169    182    195    208    221    234    247    260
14     28     42     56     70     84     98     112    126    140    154    168    182    196    210    224    238    252    266    280
15     30     45     60     75     90     105    120    135    150    165    180    195    210    225    240    255    270    285    300
16     32     48     64     80     96     112    128    144    160    176    192    208    224    240    256    272    288    304    320
17     34     51     68     85     102    119    136    153    170    187    204    221    238    255    272    289    306    323    340
18     36     54     72     90     108    126    144    162    180    198    216    234    252    270    288    306    324    342    360
19     38     57     76     95     114    133    152    171    190    209    228    247    266    285    304    323    342    361    380
20     40     60     80     100    120    140    160    180    200    220    240    260    280    300    320    340    360    380    400

答案 1 :(得分:1)

所以这样做的一个简单方法就是使用生成器(我发现它更具可读性):

>>> n = 10
>>> print('\n'.join(''.join(format(i*j, ' >4') for i in range(1, n+1)) for j in range(1, n+1)))
   1   2   3   4   5   6   7   8   9  10
   2   4   6   8  10  12  14  16  18  20
   3   6   9  12  15  18  21  24  27  30
   4   8  12  16  20  24  28  32  36  40
   5  10  15  20  25  30  35  40  45  50
   6  12  18  24  30  36  42  48  54  60
   7  14  21  28  35  42  49  56  63  70
   8  16  24  32  40  48  56  64  72  80
   9  18  27  36  45  54  63  72  81  90
  10  20  30  40  50  60  70  80  90 100

如果您需要动态计算出最大宽度,则可以使用math.log10()

>>> import math
>>> n = 9
>>> w = int(math.log10(n**2))+1
>>> print('\n'.join(' '.join(format(i*j, ' >'+str(w)) for i in range(1, n+1)) for j in range(1, n+1)))
 1  2  3  4  5  6  7  8  9
 2  4  6  8 10 12 14 16 18
 3  6  9 12 15 18 21 24 27
 4  8 12 16 20 24 28 32 36
 5 10 15 20 25 30 35 40 45
 6 12 18 24 30 36 42 48 54
 7 14 21 28 35 42 49 56 63
 8 16 24 32 40 48 56 64 72
 9 18 27 36 45 54 63 72 81

答案 2 :(得分:0)

由于最后一个“条带”,您的代码示例无法正常工作,即从左侧删除空格并移动结果。

只需移除条带:

if __name__ == '__main__':
    for row in range(1, 20+1):
        table = ''
        for column in range(1, 20+1):
            table += '{:4} '.format(row * column)
        print(table)

   1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20
   2    4    6    8   10   12   14   16   18   20   22   24   26   28   30   32   34   36   38   40
   3    6    9   12   15   18   21   24   27   30   33   36   39   42   45   48   51   54   57   60
   4    8   12   16   20   24   28   32   36   40   44   48   52   56   60   64   68   72   76   80
   5   10   15   20   25   30   35   40   45   50   55   60   65   70   75   80   85   90   95  100
   6   12   18   24   30   36   42   48   54   60   66   72   78   84   90   96  102  108  114  120
   7   14   21   28   35   42   49   56   63   70   77   84   91   98  105  112  119  126  133  140
   8   16   24   32   40   48   56   64   72   80   88   96  104  112  120  128  136  144  152  160
   9   18   27   36   45   54   63   72   81   90   99  108  117  126  135  144  153  162  171  180
  10   20   30   40   50   60   70   80   90  100  110  120  130  140  150  160  170  180  190  200
  11   22   33   44   55   66   77   88   99  110  121  132  143  154  165  176  187  198  209  220
  12   24   36   48   60   72   84   96  108  120  132  144  156  168  180  192  204  216  228  240
  13   26   39   52   65   78   91  104  117  130  143  156  169  182  195  208  221  234  247  260
  14   28   42   56   70   84   98  112  126  140  154  168  182  196  210  224  238  252  266  280
  15   30   45   60   75   90  105  120  135  150  165  180  195  210  225  240  255  270  285  300
  16   32   48   64   80   96  112  128  144  160  176  192  208  224  240  256  272  288  304  320
  17   34   51   68   85  102  119  136  153  170  187  204  221  238  255  272  289  306  323  340
  18   36   54   72   90  108  126  144  162  180  198  216  234  252  270  288  306  324  342  360
  19   38   57   76   95  114  133  152  171  190  209  228  247  266  285  304  323  342  361  380
  20   40   60   80  100  120  140  160  180  200  220  240  260  280  300  320  340  360  380  400

答案 3 :(得分:0)

另一种可能的方法是使用列表推导如下:

for row in [['{:4}'.format(row * col) for col in range(1, 21)] for row in range(1, 21)]:
    print ''.join(row)

这会给你以下输出:

   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20
   2   4   6   8  10  12  14  16  18  20  22  24  26  28  30  32  34  36  38  40
   3   6   9  12  15  18  21  24  27  30  33  36  39  42  45  48  51  54  57  60
   4   8  12  16  20  24  28  32  36  40  44  48  52  56  60  64  68  72  76  80
   5  10  15  20  25  30  35  40  45  50  55  60  65  70  75  80  85  90  95 100
   6  12  18  24  30  36  42  48  54  60  66  72  78  84  90  96 102 108 114 120
   7  14  21  28  35  42  49  56  63  70  77  84  91  98 105 112 119 126 133 140
   8  16  24  32  40  48  56  64  72  80  88  96 104 112 120 128 136 144 152 160
   9  18  27  36  45  54  63  72  81  90  99 108 117 126 135 144 153 162 171 180
  10  20  30  40  50  60  70  80  90 100 110 120 130 140 150 160 170 180 190 200
  11  22  33  44  55  66  77  88  99 110 121 132 143 154 165 176 187 198 209 220
  12  24  36  48  60  72  84  96 108 120 132 144 156 168 180 192 204 216 228 240
  13  26  39  52  65  78  91 104 117 130 143 156 169 182 195 208 221 234 247 260
  14  28  42  56  70  84  98 112 126 140 154 168 182 196 210 224 238 252 266 280
  15  30  45  60  75  90 105 120 135 150 165 180 195 210 225 240 255 270 285 300
  16  32  48  64  80  96 112 128 144 160 176 192 208 224 240 256 272 288 304 320
  17  34  51  68  85 102 119 136 153 170 187 204 221 238 255 272 289 306 323 340
  18  36  54  72  90 108 126 144 162 180 198 216 234 252 270 288 306 324 342 360
  19  38  57  76  95 114 133 152 171 190 209 228 247 266 285 304 323 342 361 380
  20  40  60  80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400