Как создать программу переноса слов в Python 3.6 - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь создать программу, которая имитирует перенос слов, найденный в таких программах, как Word или Notepad. Если у меня длинный текст, я хотел бы распечатать 64 символа (или меньше) в каждой строке с последующим переводом новой строки без усечения слов. Используя Windows 10, PyCharm 2018.2.4 и Python 3.6, я попробовал следующий код:

long_str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit," \
       "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." \
       "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris" \
       "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in" \
       "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." \
       "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui" \
       "officia deserunt mollit anim id est laborum."

concat_str = long_str[:64] # The first 64 characters
rest_str = long_str[65:] # The rest of the string

rest_str_len = len(rest_str)

while rest_str_len > 64:
    print(concat_str.lstrip() + " (" + str(len(concat_str)) + ")" + "\n")
    concat_str = rest_str[:64] 
    rest_str = rest_str[65:] 
    rest_str_len = len(rest_str) 

print(concat_str.lstrip() + " (" + str(len(concat_str)) + ")" + "\n")
print(rest_str.lstrip() + " (" + str(len(rest_str)) + ")")

Это так близко, но есть две проблемы. Сначала код усекает буквы в конце или начале строк, например, следующий вывод:

# I've added the total len() at the end of each line just to check-sum.
 'Lorem ipsum dolor sit amet, consectetur adipiscing elit,sed do e (64)'
 'usmod tempor incididunt ut labore et dolore magna aliqua. Ut enim (64)'
 'ad minim veniam, quis nostrud exercitation ullamco laborisnisi u (64)'
 'aliquip ex ea commodo consequat. Duis aute irure dolor inrepreh (64)'
 'nderit in voluptate velit esse cillum dolore eu fugiat nulla par (64)'
 'atur. Excepteur sint occaecat cupidatat non proident, sunt in cul (64)'
 'a quiofficia deserunt mollit anim id est laborum. (49)'

Вторая проблема заключается в том, что мне нужен код для печати новой строки только после целого слова (или пунктуации), а не для разбивки слова на 64 символа.

1 Ответ

0 голосов
/ 06 ноября 2018

Использование textwrap.wrap:

import textwrap

long_str = "Lorem ipsum dolor sit amet, consectetur adipiscing elit," \
       "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." \
       "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris" \
       "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in" \
       "reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur." \
       "Excepteur sint occaecat cupidatat non proident, sunt in culpa qui" \
       "officia deserunt mollit anim id est laborum."

lines = textwrap.wrap(long_str, 64, break_long_words=False)

print('\n'.join(lines))

Это берет длинную строку и разбивает ее на строки определенной ширины. Кроме того, установите break_long_words на False, чтобы предотвратить расщепление слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...