-3
def insertNewLine(text, lenght):

    if len(text) < lenght:
        return text
    else:
        print text[:lenght]
        return (text[:lenght]+'\n'+ insertNewLine(text[lenght:],lenght))

但问题是这个词被我的程序分开了..这不应该发生..例如

=> 输入:

“要再次换行的随机文本。” 和长度:5

=> 我的输出:

兰多
米特克斯
到
裹
再次
.

=> 预期输出:

随机的
文本
包裹
再次。
4

4 回答 4

1

看起来您需要在一定长度后将整个单词换行,并忽略空格;我会做这样的事情:

def wrap(text, length):
    words = text.split()
    lines = []
    line = ''
    for w in words:
        if len(w) + len(line) > length:
            lines.append(line)
            line = ''
        line = line + w + ' '
        if w is words[-1]: lines.append(line)
    return '\n'.join(lines)

这基本上是通过将文本拆分为整个单词,然后将它们的行组装到您的换行长度。这样你就不必弄清楚你是否想在一个单词中间打断。我没有费心检查你的单词是否length比最长的单词短,但这也是一个考虑因素。

于 2012-11-02T18:02:38.567 回答
0
def insertNewline(text, length):
    '''
    This function can only be applied to normal text.
    '''
    if len(text) <= length:
        print(text)
        return
    elif text[length - 1] == ' ':
        print(text[:length - 1])
        return insertNewline(text[(length):], length)
    elif text[length] == ' ':
        print(text[:length])
        return insertNewline(text[(length + 1):], length)        
    else:
        i = 0
        while text[length + i] != ' ' and text[length + i] != ',' and text[length + i] != '.':
            i += 1
        if text[length + i] == ' ':
            print(text[:(length + i)])
            return insertNewline(text[(length + i + 1):], length)
        else:
            print(text[:(length + i + 1)])
            return insertNewline(text[(length + i + 2):], length)

此代码适用于普通文本,我的意思是简单的英语句子,只有“,”和“。” 作为标点符号,并且每个标点符号之后只有一个空格,就像正常的论文写作一样。如果您想将此代码应用于更完整的文本,我认为您可以自己更新此代码。我根据您的问题使用“递归”。我认为这段代码应该对你有帮助。我不是python专家,还在学习过程中。希望你能从我的回答中得到你想要的。

于 2014-08-01T09:31:56.303 回答
0
def insertNewLine(text, lenght):

if len(text) < lenght:
    return text
else:
    print text[:lenght]
    return (text[:lenght]+'\n'+ insertNewLine(text[lenght:],lenght))

“要再次换行的随机文本。” 和长度:5

问题是你说的是

'\n'

你想要一个新行,每行 5 个字符。Random 这个词有 6 个,这就是它在 Rando 被删减的原因。还要记住,空格也算作一个字符。因此,当您的递归通过时,它只是计算 5 个字符,然后每 5 个字符插入一个新行。

于 2012-11-02T16:46:07.657 回答
0

这是您的问题的一个可能的解决方案,我使用 re python 模块将 \n 字符放在正确的位置。

import re
def insertNewLine(text, lenght):
    return re.sub('((.*){' + str(lenght-1) + ',}?)\s', '\g<1>\n', text)

if __name__ == "__main__":
    print insertNewLine("Random text to wrap again.", 5)

>>>python test.py 
Random
text
to wrap
again.
于 2012-11-02T16:30:38.917 回答