2011-03-07 42 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字。希望这是足够的帮助,如果不是跟你的教授