2013-03-17 57 views
1

在大多數情況下,它完成了這項工作,但有時(我很難精確,它依賴於什麼)落入無限循環,因爲它不切分文本字符串。爲什麼在Python( n)中更改字符串中的行不起作用?

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

也許張貼了insertNewlines將herlp代碼... – ennuikiller 2013-03-17 12:50:27

回答

5

不要重新發明輪子,用textwrap library代替:在沒有空間已經發現spacja返回-1

import textwrap 

wrapped = textwrap.fill(text, 38) 

自己的代碼不處理的情況。

+0

您可能意味着'textwrap.fill()'。 – jfs 2013-03-17 12:58:26

+0

@ J.F.Sebastian:的確,'.wrap()'返回一個列表,'.fill()'用換行符連接它們。 – 2013-03-17 13:00:01

1

找不到返回-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) 
+0

謝謝你,這就是我所需要的,沒有看到 – user2179212 2013-03-17 21:58:45

+0

不客氣;-) – uselpa 2013-03-18 16:36:30

相關問題