2013-07-05 3 views
1

У меня есть две строки, длина которых может варьироваться в зависимости от ввода. Я хочу отформатировать их, выравнивая их до середины и заполняя остальную часть пространства ' '. Каждая строка начинается и заканчивается на ^^.Форматирование строк - Python

Вариант 1: требуется

String1 = Longer String 
String2 = Short 

Выход:

^^ Longer String ^^ 
^^  Short  ^^ 

Случай 2:

String1 = Equal String1 
String2 = Equal String2 

Выход требуется:

^^  Equal 1  ^^ 
^^  Equal 2  ^^ 

Вопрос 3: требуется

String1 = Short 
String2 = Longer String 

Выход:

^^  Short  ^^ 
^^ Longer String ^^ 

Во всех трех выходах legth было поддерживается постоянным, так что однородность поддерживается.

Моя первая мысль, что это будет связано с проверкой длины двух строк в следующем формате

if len(String1) > len(String2): 
    #Do something 
else: 
    #Do something else 
+0

Что не так с 'str.center()'? –

ответ

2

Просто используйте str.center:

assert '^^' + 'Longer String'.center(19) + '^^' == '^^ Longer String ^^' 
assert '^^' + 'Short'.center(19) + '^^'   == '^^  Short  ^^' 
+0

Mate строки могут варьироваться. Не содержит ли string.center (19) hardcode значение длины в центре? – misguided

+0

@misguided Да, но какова формула для ширины, которую вы хотите иметь? Все ваши примеры используют ширину 19, поэтому этот код решает исходный вопрос. Можете ли вы представить пример вывода с длиной! = 19 и ответьте, почему ширина равна 19 для «Equal» и «Longer String»? – phihag

+0

Достаточно честный. Мои примеры могут быть введены в заблуждение. Я согласен с вашим решением. Очень полезно . Благодарю. – misguided

0

Если вы хотите сослаться только настройки центрирования относительно двух строк:

cases=[ 
    ('Longer String','Short'), 
    ('Equal 1','Equal 2'), 
    ('Short','Longer String'), 
    ] 

for s1,s2 in cases: 
    w=len(max([s1,s2],key=len))+6 
    print '^^{:^{w}}^^'.format(s1,w=w) 
    print '^^{:^{w}}^^'.format(s2,w=w) 
    print 

печать:

^^ Longer String ^^ 
^^  Short  ^^ 

^^ Equal 1 ^^ 
^^ Equal 2 ^^ 

^^  Short  ^^ 
^^ Longer String ^^ 

Или, если вы хотите, чтобы проверить ширину несколько строк, вы можете сделать это:

cases=[ 
    ('Longer String','Short'), 
    ('Equal 1','Equal 2'), 
    ('Short','Longer String'), 
] 

w=max(len(s) for t in cases for s in t)+6 
for s1,s2 in cases: 
    print '^^{:^{w}}^^'.format(s1,w=w) 
    print '^^{:^{w}}^^'.format(s2,w=w) 
    print 

печатает:

^^ Longer String ^^ 
^^  Short  ^^ 

^^  Equal 1  ^^ 
^^  Equal 2  ^^ 

^^  Short  ^^ 
^^ Longer String ^^ 
0

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

print "^^",'{:^19}'.format(String1),"^^" 
print "^^",'{:^19}'.format(String2),"^^"