2016-03-20 4 views
2

私のコードでは、スペーシングに問題があり、改行のタイミングを各列の長さを決定する方法もあります。 列は単一の垂直バー '|'で区切られています。垂直バーの前後に正確に1つのスペースがなければなりません。 oすべての行は垂直バーで開始および終了します。function def show_table aを作成し、2Dテーブルを表す書式設定された文字列を返します

def show_table(table): 
    string = '' 
    for i in table: 
     for j in range(len(i)): 
      line = i[j] 
      string += "{}".format(line) + "|" 

    return "|" + string +"\n" 

つの制限があります:あなたは、書式設定%または.formatのいずれかを文字列を使用しなければならないと私はこれまでのところを持っている。これは私のコードである リードバーの後、終了バー 前に、正確に一つのスペースがなければなりません()。 は、以下の例のリスト このリストの例です:

>>> show_table([['A','BB'],['C','DD']]) 
'| A | BB |\n| C | DD |\n' 
>>> print(show_table([['A','BB'],['C','DD']])) 
| A | BB | 
| C | DD | 
+0

、あなたの質問のためのすべての答えを受け入れることはありませんように見えます。これは完全にオプションですが、あなたの質問の今後の読者を助けるためにこの機能を使用することを検討してください。 – timgeb

答えて

2

あなたのコードは非常に近いですが、垂直バーの周りに適切なスペースを持っていない、とあなたが処理していません表の各行の終わり。

割り当ての説明には、リスト項目と垂直バーの間に1つのスペースを置くと記載されているため、列の幅を気にする必要はありません。

最小限の変更で修正されたコードです。

def show_table(table): 
    string = '' 
    for i in table: 
     for j in range(len(i)): 
      line = i[j] 
      string += '| {} '.format(i[j]) 
     string += '|\n' 

    return string 

print(show_table([['A','BB'],['C','DD']]))  

出力は

| A | BB | 
| C | DD | 

むしろ間接的に反復するリストインデックスを使用するよりも、リストの上に直接反復するために、よりPython的です。

def show_table(table): 
    string = '' 
    for line in table: 
     for item in line: 
      string += '| {} '.format(item) 
     string += '|\n' 

    return string 

よりコンパクトな方法は、リストの内包表記を使用することです:

def show_table(table): 
    return ''.join(['| {} |\n'.format(' | '.join(row)) for row in table]) 
+0

私は別のテストケースを持っています。 | B | \ n | CCC | DDD | \ n 'となります。ここで、AとBは、縦棒の端の文字の間に少なくとも3つのスペースがあります。どうすれば調整できますか? – brian012

+0

@ brian012:縦棒の前と後に正確に1つのスペースがなければならず、すべての行が縦棒で始まり、終わり、先行バーの後ろと終わりバーの前に正確に1つのスペースがなければならない " 。 –

関連する問題