0

したがって、べき乗のグリッドである数字のグリッドを作成する必要があります。したがって、ユーザーが 2 つの数値を入力すると、グリッドはインデックスを使用してグリッドを作成します。ユーザーが 5 と 5 を入力すると、表示されます

1 1 1 1 1
2 4 8 16 32
3 9 27 81 243
4 16 64 256 1024
5 25 125 625 3125

ただし、「単位列」に単位が表示されるように、右揃えにする必要があります。ギャップは、最大の数字を表す文字列の長さに基づいています (32 は 2 文字の長さです) 基本的に、完全にユーザーの入力内容に依存しますが、数字が長くなるため、ギャップを減らす必要があります。これが理にかなっていることを願っています。

4

3 に答える 3

1
def pow_printer(max_val, max_pow):
    # What we are doing is creating sublists, so that for each sublist, we can
    # print them separately
    _ret = [[pow(v, p) for p in range(1, max_pow+1)] for v in range(1, max_val+1)]
    # The above produces, with max_val = 5 and max_pow = 5:
    # [[1, 1, 1, 1, 1], [2, 4, 8, 16, 32], [3, 9, 27, 81, 243], [4, 16, 64, 256, 1024], [5, 25, 125, 625, 3125]]

    # Now, we are looping through the sub-lists in the _ret list
    for l in _ret:
        for var in l:
            # This is for formatting. We as saying that all variables will be printed
            # in a 6 space area, and the variables themselves will be aligned
            # to the right (>)
            print "{0:>{1}}".format(var,
                                    len(str(max_val**max_pow))),  # We put a comma here, to prevent the addition of a
            # new line
        print  # Added here to add a new line after every sublist

# Actual execution
pow_printer(8, 7)

出力:

  1       1       1       1       1       1       1
  2       4       8      16      32      64     128
  3       9      27      81     243     729    2187
  4      16      64     256    1024    4096   16384
  5      25     125     625    3125   15625   78125
  6      36     216    1296    7776   46656  279936
  7      49     343    2401   16807  117649  823543
  8      64     512    4096   32768  262144 2097152

作業例。

于 2013-10-28T16:57:40.037 に答える
1

これは問題なく動作します (これがかなり洗練されていて、理解するのが難しくないことを願っています):

import math

def print_grid(x, y):
    # Get width of each number in the bottom row (having max values).
    # This width will be the column width for each row.
    # As we use decimals it is (log10 of the value) + 1.
    sizes = [int(math.log10(math.pow(y, xi)) + 1) for xi in range(1, x + 1)]
    for yj in range(1, y + 1):
        row = ''
        for xi in range(1, x + 1):
            value = pow(yj, xi)
            template = '%{size}d '.format(size=sizes[xi-1])
            row += template % value
        print row

print_grid(5, 5)

目的の出力で:

1  1   1   1    1 
2  4   8  16   32 
3  9  27  81  243 
4 16  64 256 1024 
5 25 125 625 3125
于 2013-10-28T17:38:51.520 に答える
0

必要な数が既にあると仮定して、http : //code.google.com/p/prettytable/ を確認してください。

# Set up the number lists already
zz
[[1, 1, 1, 1, 1],
 [2, 4, 8, 16, 32],
 [3, 9, 27, 81, 243],
 [4, 16, 64, 256, 1024],
 [5, 25, 125, 625, 3125]]

p = prettytable.PrettyTable()
for z in zz:
    p.add_row(z)

# Optional styles
p.align='r'
p.border=False
p.header=False

print p
 1   1    1    1     1
 2   4    8   16    32
 3   9   27   81   243
 4  16   64  256  1024
 5  25  125  625  3125

ps = p.get_string()
于 2013-10-28T18:10:03.740 に答える