1

在大多数情况下,它可以完成这项工作,但有时(我很难准确地说,它依赖于什么)它会陷入无限循环,因为它不会对文本字符串进行切片。

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)

我不知道为什么。

4

2 回答 2

5

不要重新发明轮子,而是使用textwrap

import textwrap

wrapped = textwrap.fill(text, 38)

您自己的代码不处理未找到空格并spacja返回 -1 的情况。

于 2013-03-17T12:54:45.353 回答
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)
于 2013-03-17T12:58:21.260 回答