2013-05-03 3 views
-2

Мне нужно разбить строку с регулярным интервалом и вернуть строку с одинаковыми символами (одним пробелом и буквами) с символами новой строки на каждом интервале, чтобы она могла представлять какой-то вид строка/столбец прямоугольной формы. Мне нужно вернуть что-то следующим образом (пример):Как разделять строку с регулярными интервалами в Python 3

>>> s = 'sliding puzzles' 
>>> puzzle(s, 3, 5) 
'slidi 
ng pu 
zzles' 

Кто-нибудь?

+0

Это звучит довольно простое упражнение. Где вы застряли? – agf

+0

Я не уверен, понимаю ли я ваше требование. Вы не играете головоломку, которая берет строку и 2 ints. В вашем примере строка должна быть разделена на 5 символов. Что это за 3, т. Е. 1-й int? – pypat

+0

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

ответ

3

Что-то вроде этого

def puzzle(s,a,b): 
    if a*b != len(s): 
     print "Not possible" 
     return 
    start =0 
    end = b+1 
    output ="" 
    for i in range(0,a): 
     output= output+s[start: end]+"\n" 
     start = end+1 
     end = end+b 
    print output 
+0

Спасибо, я могу использовать это. Во всяком случае, причина, по которой я задаю этот кажущийся простой (но конкретный и маленький) вопрос, чтобы я мог решить большую задачу до определенного срока, и поэтому я могу больше сосредоточиться на других своих обязательствах вне сферы программирования. Еще раз спасибо. Это действительно помогает. –

+2

У вас близко, но не там. После первой строки он заменяет букву новой строкой, а не вставляя ее. Но я черпал вдохновение. –

0

Понял! Благодаря Бхавишу Агарвалу.

def puzzle(s, r, c): 
assert r*c == len(s), 'not possible' 
start = 0 
end = c 
output ="" 
for _ in range(0, r - 1): 
    output= output+s[start: end]+"\n" 
    start = end 
    end = end + c 
output= output+s[start: end] 
return output 

И это как легко. Спасибо за быстрый ответ. :)

0

Я предложил бы использовать присоединиться, чтобы получить ваши переводы строк, и список понимание, чтобы сделать разделение:

def make_slice(my_str, slice_length, slice_start): 
    return mystr[slice_length * slice_start:slice_length * (slice_start + 1)] 

def puzzle(my_string, substring_length): 
    return '\n'.join([make_slice(my_string, substring_length, substring_index) 
         for substring_index 
         in range((len(my_string) // substring_length) + 1)]) 

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

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