2016-10-11 1 views
-2

Я задал этот вопрос раньше, но ответ, который я получил, закончил работать неправильно, поэтому я начал полностью. У меня теперь есть более развитый код, но до сих пор не могу понять, что случилось и как окружить и привет в коробке, как так:Нарисуйте окно вокруг строки сообщений

Example

Оригинальный вопрос: Учитывая это сообщение, которое может содержать несколько строк , используйте функцию split() для идентификации отдельных строк и используйте любой из подходов форматирования, которые мы изучили как часть вашего решения, чтобы создать строку, которая при печати рисует окно вокруг строк сообщения, все с центром. В поле используются вертикальные полосы и тире по сторонам (|, -), плюсы в углах (+), и всегда есть столбец пробелов слева и справа от самой широкой строки сообщения. Все линии центрированы.

Вот код, который я придумал. Я думаю, что на правильном пути, но я получаю ошибки, особенно с функцией вер

def border_msg(msg): 
    count=len(msg) 
    for i in range(0,len(msg)): 
     count+=1 

    count = count 
    dash="-" 
    for i in range (0,count+1): 
     dash+="-" 
    h="{}{}{}".format("+",dash,"+") 

    count=count+2 

    ver="{}{:^'count'}{}".format("|",msg,"|") 
    print (ver) 

print(border_msg('a')) 
print(border_msg("hello")) 
+0

кстати: 'Count = Len (MSG)' – furas

+0

Спасибо за наконечник я просто изменил его – famguy74

+0

'{:^'Количество'}' ??? это не Bash - вы не можете вставить значение с помощью '' ''. – furas

ответ

1

Чтобы использовать count значение в строке форматирования вам необходимо

ver = "{}{:^{}}{}".format("|", msg, count,"|") 

или с использованием имен - так будет больше читаемым для вас

ver = "{a}{b:^{c}}{d}".format(a="|", b=msg, c=count, d="|") 

, но вы можете сделать также

ver = "|{a:^{b}}|".format(a=msg, b=count) 

вы можете события добавить пробелы в строке

ver = "| {} |".format(msg) 

Ваш код

def border_msg(msg): 

    count = len(msg) + 2 # dash will need +2 too 

    dash = "-"*count 

    print("+{}+".format(dash)) 

    print("| {} |".format(msg)) 

    print("+{}+".format(dash)) 


border_msg('a')  # without print 
border_msg("hello") # without print 

или без print внутри функции

def border_msg(msg): 

    count = len(msg) + 2 # dash will need +2 too 

    dash = "-"*count 

    return "+{dash}+\n| {msg} |\n+{dash}+".format(dash=dash,msg=msg) 


print(border_msg('a'))  # with print 
print(border_msg("hello")) # with print 
+0

Спасибо Я думаю, что это лучшее решение – famguy74

1

Вот возможное решение положить коробку вокруг чего-то:

def box_lines(lines, width): 
    topBottomRow = "+" + "-" * width + "+" 
    middle = "\n".join("|" + x.ljust(width) + "|" for x in lines) 
    return "{0}\n{1}\n{0}".format(topBottomRow, middle) 

Он ожидает, что линии, которые должным образом разделить:

def split_line(line, width): 
    return [line[i:i+width] for i in range(0, len(line), width)] 

def split_msg(msg, width): 
    lines = msg.split("\n") 
    split_lines = [split_line(line, width) for line in lines] 
    return [item for sublist in split_lines for item in sublist] # flatten 

Ввод box_lines и split_msg вместе, получаем:

def border_msg(msg, width): 
    return(box_lines(split_msg(msg, width), width)) 

Мы можем использовать его следующим образом:

print(border_msg("""I'll always remember 
The chill of November 
The news of the fall 
The sounds in the hall 
The clock on the wall 
Ticking away""", 20)) 

, который выводит

+--------------------+ 
|I'll always remember| 
|The chill of Novembe| 
|r     | 
|The news of the fall| 
|The sounds in the ha| 
|ll     | 
|The clock on the wal| 
|l     | 
|Ticking away  | 
+--------------------+ 
+0

Ваше решение работает очень хорошо, но есть проблема с созданием границы «-». Он говорит border_msg (привет): ожидается + ------- +, но получил + ----- +. Как бы мне это создать еще два «-» для границы? – famguy74

+0

@ famguy74 Там мы идем. Это было тяжелее, чем я думал. –

+0

Спасибо. Я выбрал чужой ответ как лучший ответ, потому что он выполнил его в пределах одной функции, хотя я могу изменить его на ваш, так как есть проблемы с форматированием. Я также попытаюсь использовать ваш ответ – famguy74

Смежные вопросы