2013-10-28 20 views
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個字符長) 基本上,完全取決於用戶輸入的內容,但由於數量變長,缺口必須減少。希望這是有道理的。

+0

參考:http://docs.python.org/2/library/string.html#format-specification-mini -語言 – BlackVegetable

回答

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 

Working example.

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 
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()