消息周围的绘图框

时间:2016-10-10 20:39:03

标签: python drawing message rectangles

我正在研究这个我无法弄清楚的Python任务。这是3个函数中的最后一个,前2个比这个更容易编程。说明是 “给定一条可能包含多行的消息,利用split()函数识别各行,并使用format()函数,以便在打印时,在消息的行周围绘制一个框,全部居中.Box使用竖线和放大器;在角落(+)的两侧(|, - ),+的破折号,并且在消息的最宽行的左侧和右侧总是有一列空格。“

此功能需要做的一些示例:

测试:border_msg('a')=='+ --- + \ n | a | \ n + --- + \ n'

测试:border_msg('hello')=='+ ------- + \ n |你好| \ n + ------- + \ n'

测试:border_msg(“hi!\ nhow are you?\ ndrive safe!”)=='+ --------------- + \ n |您好! | \ n |你好吗? | \ n |安全驾驶! | \ N + --------------- + \ N'

我认为需要打印上面的测试,以便中间的单词被“+ ------ +在顶部和底部”和“|”在两侧包围。

这是我到目前为止的代码。我不知道我会从哪里出发。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我已经拼了一小段代码来实现盒装消息。说实话,这不是最好的代码,但是它可以帮助你自己做(并且更好)。为此我决定不加评论,所以你必须自己考虑。也许不是最好的教育方法,但无论如何我们都要尝试:]

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 |
# +---------------------------+

答案 2 :(得分:-1)

找出最长线N的长度; (N+2) * '-'为您提供顶部和底部边框。在每行之前添加一个条:'|';用N - n个空格填充每一行,其中n是该行的长度。在每行附加一个栏。以正确的顺序打印:顶部,第1行,第2行,......,第L行,底部。