Деление строки по количеству символов, но с условием...
Приветствую. Дана длинная строка (кусок теста). Надо поделить ее на равное количество знаков, вставив "\n". Но, вставить знак надо следующий пробел. То есть: считаем по 80 знаков, но если это не пробел, идем до ближайшего пробела и вставляем. И так по тексту. Я написал функцию, но она не корректно работает, Помогите пожалуйста.
12345678910111213141516
def str_coll(tx_1,count_n):
razr = 0
count = 0
count1 = count_n
insert_text = "\n"
for char in tx_1:
count += 1
if (count % count1 == 0):
count1 = count
razr = 1
if (count > count1 and razr == 1):
if char == ' ':
tx_1 = tx_1[:count] + insert_text + tx_1[count:]
razr = 0
return tx_1
Проблему решил. Надо было не добавлять, а заменять знак.
s_list = list(tx_1)
s_list[count] = "\n"
tx_1 = ''.join(s_list)
По дате
По рейтингу
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
def str_wrap(text, width=80):
"""
Разделяет строку на строки максимальной длины width,
делая разрывы только после пробелов.
Args:
text (str): Исходный текст для разделения
width (int): Максимальная длина строки
Returns:
str: Текст с добавленными символами новой строки
"""
if not text:
return ""
result = []
current_line = []
current_length = 0
last_space_index = -1
for i, char in enumerate(text):
current_line.append(char)
current_length += 1
# Запоминаем позицию последнего пробела
if char == ' ':
last_space_index = len(current_line) - 1
# Если достигли максимальной длины строки
if current_length >= width:
# Если нашли пробел в текущей строке
if last_space_index != -1:
# Разбиваем по последнему пробелу
new_line = ''.join(current_line[:last_space_index])
result.append(new_line)
# Оставшуюся часть строки переносим на следующую строку
current_line = current_line[last_space_index+1:]
current_length = len(current_line)
last_space_index = -1
# Ищем новый последний пробел в оставшейся части
for j, c in enumerate(current_line):
if c == ' ':
last_space_index = j
else:
# Если пробела нет, просто добавляем всю строку (редкий случай)
result.append(''.join(current_line))
current_line = []
current_length = 0
# Добавляем оставшуюся часть
if current_line:
result.append(''.join(current_line))
return '\n'.join(result)
# Пример использования
def test_str_wrap():
text = "Это длинный текст, который нужно разбить на строки примерно по 20 символов, но разрывы делать только после пробелов. Это демонстрационный пример для проверки работы функции."
wrapped = str_wrap(text, 20)
print(wrapped)
# Проверим длину каждой строки
for i, line in enumerate(wrapped.split('\n')):
print(f"Строка {i+1}: {len(line)} символов")
# Альтернативная реализация с использованием вашего подхода,
# но с правильной логикой
def str_wrap_alt(text, width=80):
"""
Альтернативная реализация разделения текста с заменой пробелов на символы новой строки.
"""
if not text:
return ""
result = list(text)
i = 0
while i < len(result):
# Каждые width символов ищем следующий пробел
if i > 0 and i % width == 0:
# Ищем следующий пробел
j = i
while j < len(result) and result[j] != ' ':
j += 1
# Если нашли пробел, заменяем его на символ новой строки
if j < len(result):
result[j] = '\n'
i = j + 1
continue
i += 1
return ''.join(result)