在大多数情况下,它完成了这项工作,但有时候(我很难准确,它依赖于什么)它会陷入无限循环,因为它不会对文本字符串进行切片。
def insertNewlines(text, lineLength):
"""
Given text and a desired line length, wrap the text as a typewriter would.
Insert a newline character ("\n") after each word that reaches or exceeds
the desired line length.
text: a string containing the text to wrap.
line_length: the number of characters to include on a line before wrapping
the next word.
returns: a string, with newline characters inserted appropriately.
"""
def spacja(text, lineLength):
return text.find(' ', lineLength-1)
if len(text) <= lineLength:
return text
else:
x = spacja(text, lineLength)
return text[:x] + '\n' + insertNewlines(text[x+1:], lineLength)
适用于我尝试的所有案例,除了
insertNewlines('Random text to wrap again.', 5)
和
insertNewlines('mubqhci sixfkt pmcwskvn ikvoawtl rxmtc ehsruk efha cigs itaujqe pfylcoqw iremcty cmlvqjz uzswa ezuw vcsodjk fsjbyz nkhzaoct', 38)
我不知道为什么。
答案 0 :(得分:5)
不要重新发明轮子,而是使用textwrap
library:
import textwrap
wrapped = textwrap.fill(text, 38)
您自己的代码无法处理未找到空格且spacja
返回-1的情况。
答案 1 :(得分:1)
当find返回-1(即未找到)时,你会错过这种情况。
尝试:
if len(text) <= lineLength:
return text
else:
x = spacja(text, lineLength)
if x == -1:
return text
else:
return text[:x] + '\n' + insertNewlines(text[x+1:], lineLength)