2016-10-10 11 views
0

以下の文字列の書式設定に問題があります。国境にメッセージを集中させようとしましたが、それを実行するのは苦労しました。以下は私が欲しい出力です、そして私はこれまでの私のコードです。注:最も長い行の左と右の列にスペースを入れる必要があり、split()funcを利用する必要があります。文字列のループを整形する

+---------------+ 
|  STOP!  | 
| DANGER AHEAD | 
| Drive Safely! | 
+---------------+ 

def border_sign(note): 
    letter_count = 0 
    for i in note: 
     letter_count += 1 
     return "+-------+\n| {} |\n+-------+\n".format(note) 
border_sign("STOP\nDANGER AHEAD\nDrive safely!") 
+3

で使用することができ、機能であるコードが正確に設定されているどのようにこのですあなたのエディタで?ループの中に戻るからです。 – idjaw

+1

それは文字の繰り返しです。 – TigerhawkT3

+1

あなたは 'note'全体をフォーマットしていて、何もしないカウンタを使って' i'で何もしません... – TigerhawkT3

答えて

2

各行を中央次いで、別々の行に文字列を分割します。最初の行の後に戻すのではなく、関数内で各行をすぐに印刷するか、リストを作成するか、各行を生成することを忘れないでください。静的な値ではなく、計算された幅を決定して使用することもできます。

def border_sign(note): 
    note = note.splitlines() 
    m = len(max(note, key=len)) 
    yield ('-'*m).join('++') 
    for line in note: 
     yield ("|{:^%d}|" % m).format(line) 
    yield ('-'*m).join('++') 

print(*border_sign("STOP\nDANGER AHEAD\nDrive safely!"), sep='\n') 
+0

スプリットについての説明をありがとう。他のテスト機能を使用していた場合、正しい量の「+」と「 - 」をどうやって得ることができますか? –

+0

@AlanWakke - 編集を参照してください。 '+'は変更されません(各コーナーに1つだけあります)が、最大幅に基づいて必要なスペースと '-'文字を計算することができます。 – TigerhawkT3

1

検討するクイックサンプルではなく、生産準備コード:

def border_sign(note): 
    rows = note.splitlines() 
    mlen = len(max(rows, key=len)) 
    print "+" + "-" * (2+mlen) + "+" 
    for row in rows: 
     print ("| {:^"+str(mlen)+"} |").format(row) 
    print "+" + "-" * (2+mlen) + "+" 
0
def border_sign(x): 
    splitted = x.splitlines() 
    M = max(map(len,splitted)) 
    horiz = '+-%s-+' % (M*'-') 
    patiz = '| {0: ^%d} |' % M 
    print(horiz,*map(patiz.format,splitted), horiz, sep='\n') 

border_sign("STOP\nDANGER AHEAD\nDrive safely!") 

patiz.formatはその後map

関連する問題