2017-11-28 15 views
0

パディングを使用して複数の変数/テキストを揃えることができました。しかし、私のコードでは、リスト内の変数を変更する必要があるため、長さが変わり、列の配置に影響します。変更する変数の列の整列

product_names = ["hamburger", "cheeseburger", "small fries"] 
product_costs = [0.99, 1.29, 1.49] 
product_quantity = [10,5,20] 

print(format("Product",'<10s'),"Price","Quantity",sep = '\t') 

     for x in range(len(product_names)): 
      print(format(product_names[x],'<16s'),end ='') 

      print(product_costs[x],product_quantity[x],sep = '\t') 

私が手出力は次のようになります。私は長いものにチーズバーガーを変更した場合

Product  Price Quantity 
hamburger  0.99 10 
cheeseburger 1.29 5 
small fries  1.49 20 

けど。例えばダブルチーズバーガー。病気。

Product  Price Quantity 
hamburger  0.99 10 
double cheeseburger1.29 5 
small fries  1.49 20 

どのように私は私の列が一貫しておくのですか?

+1

あなたは良い推測をするか、最長の名前を取得して使用する必要があります – user1767754

答えて

1

テキストのためのより多くのスペースを割り当てるか、テキストを切り詰めいずれか:ここ

def truncate(s): 
    if len(s) >= 16: 
     return s[:13] + '...' 
    else: 
     return s 

print(format(truncate(product_names[x]),'<16s'),end ='') 
1

は、各列の幅を決定するために、列の入力を使用して表を印刷する機能です。これは、列数に対して複製されるデフォルトの文字列を使用して動作します。各列の最大文字の幅にギャップを加えた幅の文字列形式にフォーマットされます。その文字列は、行を印刷するために各行でフォーマットされます。

headerリストが指定されている場合は、それに応じて幅を調整して印刷します。 gapは、各列間のスペース数を示します。

def table_printer(*columns, header=None, gap=1): 
    print_header = False 
    if header is None: 
     header = ['']*len(columns) 
    else: 
     assert len(header)==len(columns), (
      "Must have same number of headers as columns." 
      ) 
     print_header = True 

    col_widths = [max(map(len, map(str, c+[h])))+gap for c,h in zip(columns, header)] 
    width_formatter = '{{:<{}}}'*len(columns) 
    row_formatter = width_formatter.format(*col_widths) 

    if print_header: 
     print(row_formatter.format(*header)) 
    for row in zip(*columns): 
     print(row_formatter.format(*row)) 


product_names = ["hamburger", "cheeseburger", "small fries"] 
product_costs = [0.99, 1.29, 1.49] 
product_quantity = [10,5,20] 

table_printer(product_names, product_costs, product_quantity, 
       header=['Product', 'Price', 'Quantity'], 
       gap=3) 

# prints: 
Product  Price Quantity 
hamburger  0.99 10 
cheeseburger 1.29 5 
small fries 1.49 20 
関連する問題