Python: подсчет гласных из списка

Я новичок в python и с некоторым трудом устраняю неполадки с моим скриптом.

Мое назначение – создать некоторую функцию, которая принимает список строк и возвращает количество гласных во всем списке.

План игры, который я пытаюсь выполнить, – это:

  1. Объединение элементов списка в одну строку
  2. Создайте цикл, который проверяет, является ли строковый элемент гласным
  3. Используйте переменную счетчика для отслеживания гласных в строке
  4. Распечатайте значение переменной счетчика, когда закончите цикл

Мой код не изящный, но он также не работает.

def vowelCounter(listName): new = ''.join(listName) n = len(new) count = 0 vowels = 'aeiouAEIOU' i = 0 for i in range(0,n): while i < n: if new[i] in vowels: count += 1 i += 1 return print count return return return print(vowelCounter(["terrapin","station","13points"])) 

Пожалуйста, простите любые глупые ошибки, которые у меня могут быть. Я, безусловно, буду признателен за любую помощь, которую вы можете предложить!

  • как найти слова, которые составлены из письма, точно сталкиваются друг с другом? (python)
  • Разработка модуля Python
  • Самый эффективный метод получения ключа для подобных значений в dict
  • Является ли Python интерпретированным (например, Javascript или PHP)?
  • Как определить метод __str__ для класса?
  • Как проверить, не массив ли пуст?
  • Как найти первую букву каждого слова?
  • Невозможно загрузить видеопотоки с помощью API-интерфейса youtube v3 в python
  • 4 Solutions collect form web for “Python: подсчет гласных из списка”

    Итак, сначала у нас есть некоторые общие проблемы синтаксиса.

    1. немедленно return выходы из функции; это не просто «конец цикла».
    2. Нет смысла инициализировать i до 0 выше цикла. Сам цикл for автоматически устанавливает i в текущее значение в списке, который возвращает range() .
    3. В while i < n не нужно; нет необходимости перебирать строку снова для каждого символа в списке.
    4. Нет необходимости вручную увеличивать i ; for вас сделают это для вас автоматически.
    5. Вы print значение внутри функции, но вы также пытаетесь напечатать возвращаемое значение функции (но оно ничего не возвращает!).

    Итак, если бы мы исправили эти проблемы, у нас было бы что-то вроде этого:

     def vowelCounter(listName): vowels = 'aeiouAEIOU' new = ''.join(listName) count = 0 for i in range(0, len(new)): if new[i] in vowels: count += 1 return count 

    Но Python также позволяет циклу for просто перебирать каждый символ строки, поэтому нам не нужны range() и len() :

     def vowelCounter(listName): vowels = 'aeiouAEIOU' count = 0 for char in ''.join(listName): if char in vowels: count += 1 return count 

    Но мы можем сделать это даже awesomer, с List Comprehensions и функцией sum() !

     def vowelCounter(listName): vowels = 'aeiouAEIOU' count = sum([1 for char in ''.join(listName) if char in vowels]) return count 

    То, что мы в основном делаем здесь, состоит в том, чтобы составить список из 1 с для каждой буквы, которая является гласной (и если это не гласный, мы не помещаем ничего в наш новый список). Затем мы используем sum() для суммирования всех чисел (1) в списке, что является нашим общим числом гласных.

    Или мы могли бы сделать это одним слоем:

     def vowelCounter(listName): return sum([1 for char in ''.join(listName) if char in 'aeiouAEIOU']) 

    Правильная пошаговая логика.
    Однако код, который вы опубликовали, не соответствует логике и неверен.

    Вместо этого попробуйте использовать следующий код:

     def vowelCounter(listName): string = ''.join(listName) count = 0 vowels = 'aeiouAEIOU' for ch in string: if ch in vowels: count += 1 return count print(vowelCounter(["terrapin","station","13points"])) 

    Код в основном хорошо … однако

    • a for i in ... автоматически увеличивает i , поэтому i += 1 не требуется
    • for делает цикл … нет необходимости вставлять в него еще один цикл while
    • return завершает работу, и вы должны использовать его только в самом конце, чтобы вернуть результат, который был вычислен с использованием числа return count
     >>> import re >>> vowels = re.compile('[AEIOU]', re.IGNORECASE) >>> >>> def vowelCounter(listName): ... return len(vowels.split("".join(listName)))-1 ... >>> vowelCounter(["terrapin","station","13points"]) 8 >>> vowelCounter(["terrapin","station","13pOInts"]) 8 
    Python - лучший язык программирования в мире.