2016-10-10 57 views
0

我在格式化下面的字符串時遇到問題。試圖保持消息以邊界爲中心,但難以執行。以下是我想要的輸出結果,下面是我迄今爲止的代碼。注意:我需要在最長行的左列和右列上留出空間,我需要使用split()函數。格式化字符串循環

+---------------+ 
|  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 - 查看編輯。 '+'不會改變(它只是每個角落中的一個),但是您可以根據最大寬度計算必要的空間和'-'字符。 – 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