消息周围的绘图框
Drawing box around message
我正在处理这个我无法理解的 Python 任务。它是 3 个功能中的最后一个,前 2 个比这个更容易编程。说明是
"Given a message that may contain multiple lines, utilize the split() function to identify the individual lines, and the format() function so that when printed, it draws a box around the message's lines, all centered. Box uses vertical bars & dashes on the sides (|, -), +'s in the corners (+), and there is always a column of spaces to the left and right of the widest line of the message."
这个函数需要做什么的一些例子:
测试:border_msg('a') == '+---+\n| |\n+---+\n'
测试:border_msg('hello') == '+------+\n|你好 |\n+--------+\n'
测试:border_msg("hi!\nhow are you?\ndrive safely!") == '+--------------+\n|你好! |\n|你好吗? |\n|安全驾驶! |\n+----------------+\n'
我认为它需要打印上述测试,以便中间的单词在顶部和底部被“+------+”包围,在两侧被“|”包围。
这是我目前的代码。我不确定我会从这里去哪里。
def border_msg(msg):
border_msg.split("\n")
'%s'.format(msg)
return border_msg(msg)
print border_msg(msg)
找出你最长的线的长度N; (N+2) * '-'
为您提供顶部和底部边框。在每行之前添加一个栏:'|';用 N - n
空格填充每一行,其中 n 是该行的长度。在每一行上附加一个小节。以正确的顺序打印:顶部,第 1 行,第 2 行,...,第 L 行,底部。
我拼接了一小段代码来实现装箱消息。老实说,这不是最好的代码,但它完成了工作,并希望能帮助您自己完成(并且做得更好)。为此,我决定不包含评论,因此您必须自己考虑清楚。也许不是最好的教育方式,但我们还是试试吧:]
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 |
# +---------------------------+
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
我正在处理这个我无法理解的 Python 任务。它是 3 个功能中的最后一个,前 2 个比这个更容易编程。说明是 "Given a message that may contain multiple lines, utilize the split() function to identify the individual lines, and the format() function so that when printed, it draws a box around the message's lines, all centered. Box uses vertical bars & dashes on the sides (|, -), +'s in the corners (+), and there is always a column of spaces to the left and right of the widest line of the message."
这个函数需要做什么的一些例子:
测试:border_msg('a') == '+---+\n| |\n+---+\n'
测试:border_msg('hello') == '+------+\n|你好 |\n+--------+\n'
测试:border_msg("hi!\nhow are you?\ndrive safely!") == '+--------------+\n|你好! |\n|你好吗? |\n|安全驾驶! |\n+----------------+\n'
我认为它需要打印上述测试,以便中间的单词在顶部和底部被“+------+”包围,在两侧被“|”包围。
这是我目前的代码。我不确定我会从这里去哪里。
def border_msg(msg):
border_msg.split("\n")
'%s'.format(msg)
return border_msg(msg)
print border_msg(msg)
找出你最长的线的长度N; (N+2) * '-'
为您提供顶部和底部边框。在每行之前添加一个栏:'|';用 N - n
空格填充每一行,其中 n 是该行的长度。在每一行上附加一个小节。以正确的顺序打印:顶部,第 1 行,第 2 行,...,第 L 行,底部。
我拼接了一小段代码来实现装箱消息。老实说,这不是最好的代码,但它完成了工作,并希望能帮助您自己完成(并且做得更好)。为此,我决定不包含评论,因此您必须自己考虑清楚。也许不是最好的教育方式,但我们还是试试吧:]
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 |
# +---------------------------+
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