0

かなり初心者ですが、単語のリストに複数の単語をすべて出力する関数を作成しようとしています

したがって、出力は次のようになります。

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

これは私がこれまでに持っているものですが、出力が得られません。どんな助けでも素晴らしいでしょう。タイ。

def printPlurals(list1):
    plural = 's'

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

3 に答える 3

1

あなたは本当に近いですが、いくつかのことを混同しています。pluralまず、変数を持つ必要はありません。とにかく、あなたはそれを使用していません。第二に、名前付けの観点からは、変数に名前を付けたことは問題ではありませんletterが、文字をループしていると思う可能性があることを意味します。実際には list のメンバーをループしているのでlist1、各反復で単語を検討しています。最後に、リストを返したくありません。代わりに、で終わることが確認されている単語を印刷したいと思いますs。以下を試してください。幸運を!

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

もう少し面白いこと (または "Pythonic" であることはほぼ間違いない) に興味がある場合は、次のようにリスト内包表記を使用して複数形のリストを作成できます。

my_list = ['computer', 'computers', 'science', 'sciences']
plural_list = [word for word in my_list if word[-1]=='s']
于 2014-10-24T02:43:27.490 に答える
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)Falseword

于 2014-10-24T03:02:39.013 に答える
0

これを行うためのワンライナーの方法は

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

あなたの主な問題は、最後の文字までletter[:-1]すべてを返すことです。最後の文字だけに. また、値を返していて、印刷していませんでした。これら 2 つの問題を修正するか、この回答の 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
于 2014-10-24T02:42:13.713 に答える