2013-02-25 4 views
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 только если целого слова имеет все гласные.

+0

После '.strip()', '.strip ('\ п')' является излишним. –

ответ

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 
+0

Можете ли вы объяснить, как работает гласный.remove (письмо) ... в одном экземпляре у меня есть слова: aaah and alladin – LaffyTaffyKidd

+0

В этом случае гласные - это список. Таким образом, путь гласных .remove (letter) работает, заключается в том, что элемент letter будет удален из списка гласных, если буква находится в списке. Если в вашем слове присутствуют все гласные, все гласные будут удалены из этого списка, давая списку длину 0. Если вы введете 'alladin', список приведет к ['e', 'o', 'u '], длина которого больше 0, возвращается False. – Jesse

+0

Удивительное спасибо! Это сработало!!! – LaffyTaffyKidd

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 
+1

Я думаю, что это будет намного более эффективно вычислить, чем другое решение –

0

@Martijn Peters уже разместил решение th at, вероятно, является самым быстрым решением в 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() здесь: "exists" keyword in Python?

Смежные вопросы