2011-03-07 47 views
-2

編寫一個將單詞彙集成不超過寬度字符行的Python摘錄。您可能會假設單詞是單詞列表,按順序輸出,width是行可能具有的最大字符數。只在不超過一行的字符限制的情況下,不能將另一個單詞添加到行中時打印每一行。如何編寫這段Python摘要

+2

你到目前爲止做了什麼? – 2011-03-07 20:11:20

+5

我認爲這是你的家庭作業,而不是我的。 – Blender 2011-03-07 20:17:47

+0

[google](http://docs.python.org/library/textwrap.html)是你的朋友 – nmichaels 2011-03-07 20:23:17

回答

0

好了,讓我們假設你有一個字符串是這樣的:

string = 'the quick brown fox jumped over the lazy dog the quick brown fox jumped over the lazy dog the quick brown fox jumped over the lazy dog the quick brown fox jumped over the lazy dog' 

它的長,所以有什麼東西去。我們稱寬度爲w。

既然你要說話,你會想要將字符串拆分爲空白字符''。這會給你一個單詞列表。

您想檢查列表中每個單詞的長度與行中剩餘可能字母的數量。因此,如果您的寬度爲30,並且打印'the',則剩餘的金額爲27.如果您可以從剩餘字符數中減去字長並仍爲正數,則打印該字。否則,走上新的路線。

+1

它說單詞出現在列表中,這使得它更容易 – cmaynard 2011-03-07 20:36:14

3

檢出textwrap模塊。

import textwrap 

words = 'some words to print out' 
width = 10 

for line in textwrap.wrap(words, width): 
    print line 
0

在這個例子中,你基本上實現了樸素的單詞換行。

這是原油和不雅的方式我會做到這一點:

  1. 創建您可以使用它在一行的輸出轉儲到存儲變量。
  2. 雖然該變量的長度小於或等於最大行長度,但是該字段列表中的第一個元素是pop(-1),並將其附加到佔位符字符串。
  3. 當這個條件不成立時(在彈出元素前測試它),打印該行並重新開始。

我不是爲你做的,但這是將開始的方式。

0

可能是你應該從

def wrap(words, maxWidth): 
    res = [] 
    line = [] 
    cur_len = 0 
    for word in words: 
     if cur_len + len(word) <= maxWidth: 
      line.append(word) 
      cur_len += len(word) 
     else: 
      res.append(line) 
      line = [word] 
      cur_len = len(word) 
    res.append(line) 
    return res 

words = "quick brown fox jumps over the lazy dog".split(" ") 
print '\n'.join(map(lambda line: ' '.join(line), process(words, 12))) 
+0

如果他用這個作爲回答家庭作業的答案,他們會認爲他是作弊,在這裏有點太多的幫助 – cmaynard 2011-03-07 20:38:43

0

分開創建行我建議尋找到一個for循環和LEN()函數,這應該不超過10行代碼。 像

for word in wordList: 
    if((len(word)+len(currLine))<maxLen): 
//more code here that I ain't giving you 

你應該追加一條外商投資企業的話(加上currLine的空間。當你沒有足夠的空間打印currLine並設置currLine字。希望這是足夠的幫助,如果不是跟你的教授