Функция, содержащая ровно один из 5 гласных

1

Я пытаюсь создать функцию для оценки, если содержит ровно одну из каждых из 5 гласных.

Я пробовал до сих пор: (я не знаю, как я могу ограничить сейчас только по 1 каждой гласной)

def isVowel(char): #=> Helper function
    return len(char) == 1 and char.lower() in 'aeiou'

def fiveVowelsOneOfEach(word):
    oneVowelOfEachCounter = 0
    for char in word:
        if isVowel(char):
            if char == 'a':
                oneVowelOfEachCounter += 1
            if char == 'e':
                oneVowelOfEachCounter += 1
            if char == 'i':
                oneVowelOfEachCounter += 1
            if char == 'o':
                oneVowelOfEachCounter += 1
            if char == 'u':
                oneVowelOfEachCounter += 1
            if oneVowelOfEachCounter == 5: 
                return True
Теги:
python-2.7

4 ответа

4
Лучший ответ

Просто делать:

s = 'aeiou'
s2 = 'aaeiou'
def checker(s):
    return all(s.lower().count(i)==1 for i in 'aeiou')
print(checker(s))
print(checker(s2))

Выход:

True
False

Это все необходимо, проверяя, является ли подсчет каждой гласной одной

  • 1
    Вау, мне очень понравилось это решение, может быть, я просто немного подумал. Спасибо :)
1

Простейший способ сделать это

goodstr = 'aeiou'
badstr = 'aaeiou'
vowels = ['a','e','i','o','u'] # or a string "aeiou"

def fiveVowelsIsOneOfEach(word):
    for vowel in vowels:
        if word.count(vowel) != 1:
            return False
    return True


print(fiveVowelsIsOneOfEach(goodstr))   # returns True
print(fiveVowelsIsOneOfEach(badstr))    # returns False
  • 0
    Спасибо за ваш отзыв! Он работает, если не содержит ровно 5 гласных. Например, goodstr = 'aeio' возвращает True
0
def fiveVowelsOneOfEach(word):
    oneVowelOfEachCounter = 0
    vowels = list('aeiou')
    dummy_vowels = list(chars)
    for char in word:
        if char in vowels:
            vowels.remove(char)
            continue
        elif char in dummy_vowels:
            return False
    if len(vowels) == 0:
        return True
    return False

Это должно сработать. трюк состоит в том, чтобы использовать список и список фиктивных, чтобы каждый гласный подсчитывался только один раз.

  • 0
    Здравствуйте, я пробовал таким образом, но не сработало, но спасибо за отзыв
0

Обновленный ответ для решения вопросов в вопросе. Также добавлена версия, которая не использует счетчик.

from collections import Counter

word = 'aaeiuo'
vowels = 'aeiuo'
c = Counter(word)
vowel_count = sum([1 if c[vowel] > 0 else 0 for vowel in vowels])
print(vowel_count) # 5
#without using counter
vowel_count = sum([1 if word.count(vowel) > 0 else 0 for vowel in vowels])
print(vowel_count) # 5
  • 1
    Итак, как вы узнали, что каждый гласный появился один раз? Может быть, в строке было пять a и еще 0 гласных.
  • 0
    Кроме того, я не могу импортировать модули. Я могу полагаться только на итерации
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню