从列表中打印复数

时间:2014-10-24 02:30:38

标签: python list loops for-loop plural

漂亮的诺比,但我正在尝试编写一个能够在单词列表中打印所有复数单词的函数

因此输出将是:

 >>> printPlurals(['computer', 'computers', 'science,', 'sciences'])
 computers
 sciences

这是我到目前为止所得到的,但我没有得到任何输出。任何帮助都会很棒。 TY。

def printPlurals(list1):
    plural = 's'

    for letter in list1:
        if letter[:-1] == 's':
            return list1

3 个答案:

答案 0 :(得分:1)

你真的很亲密,但你正在混淆一些事情。对于初学者,您不需要拥有plural变量。无论如何你还没有使用它。其次,从命名的角度来看,你已经将变量命名为变量letter并不重要,但这意味着你可能认为你正在通过字母循环。由于您实际上已经遍历列表list1的成员,因此您在每次迭代时都会考虑一个单词。最后,您不想返回列表。相反,我认为您要打印已经确认的单词s。请尝试以下方法。祝你好运!

def print_plurals(word_list):
    for word in word_list:
        if word[-1] == 's':
            print word

如果你对做一些有趣的事情感兴趣(或者说#34; Pythonic",可以说),你可以通过列表理解形成复数列表,如下所示:

my_list = ['computer', 'computers', 'science', 'sciences']
plural_list = [word for word in my_list if word[-1]=='s']

答案 1 :(得分:1)

您是否考虑过使用Python inflect库?

p = inflect.engine()
words = ['computer', 'computers', 'science', 'sciences']
plurals = (word for word in words if p.singular_noun(word))
print "\n".join(plurals)

由于您要求复数值,因此检查if p.singular_noun似乎很奇怪,但是当p.singular_noun(word)False已经是单数时word返回{{1}}时,这是有道理的。因此,您可以使用它来过滤单数的单词。

答案 2 :(得分:0)

实现这一目标的一种方法是

def printPlurals(list1):
    print [word for word in list1 if word[-1]=='s']

您的主要问题是,letter[:-1]会将的所有内容返回最后一个字母。对于最后一封信,请使用[-1]。您还返回值而不是打印。你可以解决这两个问题,也可以在这个答案中使用一个班轮。

所以你修改的代码是:

def printPlurals(list1):
    plural = 's' #you don't need this line, as you hard coded 's' below

    for letter in list1:
        if letter[-1] == 's':
            print list1