演習プロジェクト6.7.1「表の表示」について下記にまとめましたが、

申し越し改善できないか、ということで少し検討しました。

 

<前回の検討>

https://ameblo.jp/milvus-migrans-2019/entry-12522728742.html

 

前回は関数を使わず力づくでやった感がありましたが、

今回は関数を使ってできないか検討しました。

また本には「col_widths=[0]*len(table_data)から書き始めるといい」と記載があったので

col_widths()として次のようにしました。

 

def col_widths():
    col_widths=[0]*len(table_data)  ※1
    for k in range(len(col_widths)):
        col_widths[k]=max(len(line) for line in table_data[k]) ※2
    for v in range(len(table_data[0])):
        print(table_data[0][v].rjust(col_widths[0])+' '+table_data[1][v].rjust(col_widths[1])+' '+table_data[2][v].rjust(col_widths[2])) ※3
        
※1:問題で与えられている文字列リストに対応した空のリストを作ります。

   リストは[0,0,0]になります。

※2:空リストに各文字の最大文字列数をいれます。

   問題でのリストでは[8,5,5]となります。

※3:for文で右揃えとなるように並べていきます。

 

このプログラムで動作結果、下記のようになります。

(右揃えから微妙にズレてますが、Pythonではちゃんと右揃えで表現されてます)

  apples   Alice  dogs
 oranges   Bob   cats
cherries Carol moose
  banana David goose

 

問題文であれば上手くいきましたが、リストを増やしたり、減らしたりすると

エラーが出てしまい、やはり汎用性がありません。

いまいち納得できていない部分ですので、時間があれば再トライも考えています。