在Python中使用递归编写换行函数?

2024-10-01 11:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文

def insertNewLine(text, lenght):

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

但问题是单词被我的程序分割了。。这不应该发生。。e、 g

=>;输入:

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

=>;我的输出:

^{pr2}$

=>;预期输出:

Random
text
to wrap
again.

Tags: text文本gt程序lenreturnifdef
3条回答

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

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.

看起来你需要在一个特定的长度后将整个单词括起来,而忽略空格;我会这样做:

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是否比你最长的单词短,但这也是一个考虑因素。在

def insertNewLine(text, lenght):

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

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

问题是你说

^{2}$

你想要5个字符的新行。单词Random有6个,这就是为什么它会被Rando删掉。还要记住,空格也算作一个字符。所以当递归通过时,只需计算5个字符,然后每隔5个字符插入一行新行。在

相关问题 更多 >