0

という名前のリストに保存されているテキスト ファイルが与えられますwords_list

if __name__ = "__main__":
    words_file = open('words.txt')

    words_list = []
    for w in words_file:
        w = w.strip().strip('\n')
        words_list.append(w)

文字列のリストは次のようになります (非常に長い単語のリストです)。

すべての母音を含む「すべての単語」を見つけなければなりません。これまでのところ、私は持っています:

def all_vowel(words_list):
    count = 0
    for w in words_list:
        if all_five_vowels(w):   # this function just returns true
            count = count + 1
    if count == 0
        print '<None found>'
    else 
        print count

これに関する問題countは、母音を見るたびに 1 を追加することですが、単語全体にすべての母音が含まれている場合にのみ1 を追加したいのです。

4

3 に答える 3

5

単語のいずれかが母音セットのサブセットであるかどうかを簡単にテストします。

vowels = set('aeiou')

with open('words.txt') as words_file:
    for word in words_file:
        word = word.strip()
        if vowels.issubset(word):
            print word

set.issubset()任意のシーケンス (文字列を含む) で動作します:

>>> set('aeiou').issubset('word')
False
>>> set('aeiou').issubset('education')
True
于 2013-02-25T17:53:07.523 に答える
3

word_list 変数が実際のリストであると仮定すると、おそらく「all_five_vowels」関数が間違っています。

これは別の実装になる可能性があります。

def all_five_vowels(word):
    vowels = ['a','e','o','i','u']
    for letter in word:
        if letter in vowels:
            vowels.remove(letter)
            if len(vowels) == 0:
                return True
    return False
于 2013-02-25T17:46:13.917 に答える
0

@Martijn Peters は、おそらく Python で最速のソリューションであるソリューションを既に投稿しています。完全を期すために、Python でこれを解決する別の良い方法を次に示します。

vowels = set('aeiou')

with open('words.txt') as words_file:
    for word in words_file:
        word = word.strip()
        if all(ch in vowels for ch in word):
            print word

これはジェネレーター式で組み込み関数all()を使用しており、学習するのに便利なパターンです。これは、「単語のすべての文字が母音の場合、その単語を出力する」と読みます。Python にはany()、「単語内のいずれかの文字が母音である場合、その単語を出力する」などのチェックに使用できるものもあります。

any()およびall()ここ での詳細な議論: Python の「exists」キーワード?

于 2013-04-08T21:20:07.203 に答える