我正在研究这个我无法弄清楚的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)
答案 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行,底部。