2016-10-10 71 views
-3

我正在處理這個我無法弄清楚的Python任務。這是3個函數中的最後一個,前兩個函數更容易編程。這些指令是 「鑑於可能包含多行的消息,請使用split()函數來標識各行,並使用format()函數,以便在打印時在消息的所有行周圍繪製一個框,所有行均居中。使用垂直條&破折號(|, - ),+在角落(+)中,並且消息的最寬行的左側和右側總是有一列空格。「繪製框周圍的消息

什麼這個函數需要做一些例子:

測試:border_msg( 'A')==「+ --- + \ N |一個| \ n + --- + \ n '

測試:border_msg( '你好')==' + ------- + \ N |你好| \ N + ------- + \ n '

測試:border_msg( 「!?!嗨\ nhow酒店是您\ NDRIVE安全」)==' + -------- ------- + \ N |您好! | \ n |你好嗎? | \ n |安全駕駛! | \ N + --------------- + \ n」

我覺得需要打印上面的測試,以便在中間的文字,被包圍的「+ - ---- +頂部和底部「|」對雙方的

這裏是我到目前爲止的代碼我不知道在那裏我會從這裏走

def border_msg(msg): 
    border_msg.split("\n") 
    '%s'.format(msg) 
    return border_msg(msg) 
    print border_msg(msg) 
+0

修復縮進。那麼無限遞歸呢? –

+0

只是修正了縮進,如果你正在談論返回然後打印我只是不知道哪一個使用我猜或者可以工作 – famguy74

+2

famguy74:@ Jean-FrançoisFabre談論的事實是,你的'border_msg()'函數無條件地調用它自己(所以永遠不會返回)。 – martineau

回答

-1

我縫了一小塊實現盒裝消息的代碼。說實話,這不是最好的一段代碼,但它能完成這項工作,希望能幫助你自己做(和更好)。爲此目的,我決定不包括評論,所以你必須爲自己思考。也許不是最好的教學方法,但讓我們試試也無妨:]

守則Github

from math import ceil, floor 

def boxed_msg(msg): 
    lines = msg.split('\n') 
    max_length = max([len(line) for line in lines]) 
    horizontal = '+' + '-' * (max_length + 2) + '+\n' 
    res = horizontal 
    for l in lines: 
     res += format_line(l, max_length) 
    res += horizontal 
    return res.strip() 

def format_line(line, max_length): 
    half_dif = (max_length - len(line))/2 # in Python 3.x float division 
    return '| ' + ' ' * ceil(half_dif) + line + ' ' * floor(half_dif) + ' |\n' 

print(boxed_msg('first_line\nsecond_line\nthe_ultimate_longest_line')) 
# +---------------------------+ 
# |   first_line  | 
# |  second_line  | 
# | the_ultimate_longest_line | 
# +---------------------------+ 
+0

我沒有說,這是最可能的答案,但是您可以評論下調嗎?還是不言自明? – quapka

+0

謝謝,這絕對是最全面,最有幫助的答案。我不確定是誰降低了所有這些答案。給任何閱讀這份3-6下午的人的短信是不是一個好的時間來發布問題,這是我唯一一次拒絕投票的時候,人們都很友善,只是想幫忙 – famguy74

+0

也許問題是,這個網站不是爲其他人做功課。我不是在指責你。但如果是這樣,我爲你提供了它。但我允許自己相信你,你會做得更多,而不僅僅是拷貝代碼。如果沒有,這種方法將會讓你在未來。快樂的編碼! – quapka

-1

找出你的最長的線N的長度; (N+2) * '-'給你的頂部和底部邊框每行前添加一個酒吧:「|」;墊N - n空間,其中n是線的長度每行追加到每行一欄。按正確的順序打印:頂部,第1行,第2行,...,第L行,底部。

1
def border_msg(msg): 
    msg_lines=msg.split('\n') 
    max_length=max([len(line) for line in msg_lines]) 
    count = max_length +2 

    dash = "*"*count 
    print("*%s*" %dash) 

    for line in msg_lines: 
     half_dif=(max_length-len(line)) 
     if half_dif==0: 
      print("* %s *"%line) 
     else: 
      print("* %s "%line+' '*half_dif+'*')  

    print("*%s*"%dash) 



border_msg('first_line\nsecond_line\nthe_ultimate_longest_line') # without print 
相關問題