2016-10-11 5 views
0

Я пытаюсь распечатать сообщение в пределах созданного поля в python, но вместо того, чтобы печатать прямо вниз, он печатает по горизонтали.Как напечатать окно сообщения в python

def border_msg(msg): 
    row = len(msg) 
    columns = len(msg[0]) 
    h = ''.join(['+'] + ['-' *columns] + ['+']) 
    result = [h] + ["|%s|" % row for row in msg] + [h] 
    return result 

Ожидаемый результат

border_msg('hello') 

+-------+ 
| hello | 
+-------+ 

но получил

['+-+', '|h|', '|e|', '|l|', '|l|', '|o|', '+-+']. 

ответ

2

При использовании списка понимание вы получите результат, как список, как показано на ваш вывод, видеть новый символ линии, который необходимо распечатать result

А также вы используете columns для умножения -, который является только одним для всех строк. Измените его в `строке»

def border_msg(msg): 
    row = len(msg) 
    h = ''.join(['+'] + ['-' *row] + ['+']) 
    result= h + '\n'"|"+msg+"|"'\n' + h 
    print(result) 

Выходной

>>> border_msg('hello') 
+-----+ 
|hello| 
+-----+ 
>>> 
+0

Есть ли способ сделать это без использования соединения? – struggling

+0

@struggling ''+' + '-' * row + '+'' – user2728397

0

Приведенные выше ответы хороши, если вы хотите распечатать только одну строку, однако, они ломаются на несколько строк. Если вы хотите напечатать несколько строк, вы можете использовать следующее:

def border_msg(msg): 
    l_padding = 2 
    r_padding = 4 

    msg_list = msg.split('\n') 
    h_len = max([len(m) for m in msg]) + sum(l_padding, r_padding) 
    top_bottom = ''.join(['+'] + ['-' * h_len] + ['+']) 
    result = top_bottom 

    for m in msg_list: 
     spaces = h_len - len(m) 
     l_spaces = ' ' * l_padding 
     r_spaces = ' ' * (spaces - l_padding) 
     result += '\n' + '|' + l_spaces + m + r_spaces + '|\n' 

    result += top_bottom 
    return result 

Это будет печатать рамку вокруг строки многострочных, который выравнивание по левому краю с заданными значениями отступов, определяющего расположение текста в окне , Отрегулируйте соответствующим образом.

Если вы хотите центрировать текст, просто используйте одно значение заполнения и чередуйте половину значения пространства из линии spaces = h_len - len(m) между трубами.