-3
def insertNewLine(text, lenght):

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

しかし、問題は、単語が私のプログラムによって分割されていることです..それは起こらないはずです..例えば

=>入力:

「再度折り返すランダムテキスト。」および長さ:5

=>私の出力:

ランド
m tex
tから
包む
また
。

=>期待される出力:

ランダム
文章
ラップします
また。
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

これはあなたの問題に対する可能な解決策です。私はrepythonモジュールを使用して\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 に答える
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)

このコードは、通常のテキスト (「,」と「.」のみの単純な英文) で正しく機能します。通常の作文と同じように、各句読点の後には 1 つのスペースしかありません。このコードをより完全なテキストに適用したい場合は、このコードを自分で更新できると思います。質問で必要な「再帰」を使用します。このコードはあなたに役立つはずです。私は 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 に答える