An alternative is to apply a filter to your strings allowing them to pass only the vowels and collect the information.
The idea of the algorithm is to check every word of its tuple and do a search case insensitive by vowels, which is nothing more than a typographical search indifferent to the box or the algorithm is indifferent to upper and lower case. For example, for the algorithm "cow" and "COW" are the same word and the system identifies the two occurrences of the same vowel "to" what does not happen in an algorithm case sensitive for example for a box-sensitive algorithm whose search parameter is aeiou
would be returned that word "COW" has no vowels.
To search for unstick vowels the method is used str.lower()
which converts all alphabetic characters from a string to lowercase letters.
The search itself is done through a filtering where every word analyzed and subjected to the built in function filter(function, iterable)
that nothing else does but apply a function function
to one of the elements everlasting iterable
and if the return of this function is True
the rated element approved by the filter otherwise is rejected.
In this solution the function passed to filter is a lambda expression that nothing else is the definition of an anonymous function created through the keyword lambda
. instead of something like:
def funcao_filtro(letra):
return letra in vogais
filter(funcao_filtro , p)
I preferred to do something more lean:
filter(lambda l: l in vogais, p)
After that comes the simplest part of the algorithm which is to join the filtering result with str.join()
and perform the analysis on the result.
Solution:
palavras = ('boi', 'vaca', 'macaco', 'ovelha', 'lesma', "kkk")
vogais = 'aeiou'
#Para cada palavra na tupla de palavras...
for palavra in palavras:
#Converte as letras da palavra para minúscula para fazer a filtragem case-insensitive e evitar excessões.
p = palavra.lower()
#Obtem o resultado da filtragem da palavra deixando apenas as vogais.
r = "".join(filter(lambda l: l in vogais, p))
#Compara o tamanho do resultado...
if len(r) == 0:
#...se igual a 0.
msg = f'A palavra "{p}" não não possui vogais.'
else:
#... se maior que 0.
msg = f'A palavra é "{p}":\n'
msg += f'{" "*2}• a palavra possui {len(r)} vogais "{r}"\n'
msg += f'{" "*2}• a primeira vogal é "{r[0]}"\n'
msg += f'{" "*2}• a última vogal é "{r[-1]}"'
#Imprime a mensagem informando o resultado.
print(msg)
Resulting:
A palavra é "boi":
• a palavra possui 2 vogais "oi"
• a primeira vogal é "o"
• a última vogal é "i".
A palavra é "vaca":
• a palavra possui 2 vogais "aa"
• a primeira vogal é "a"
• a última vogal é "a".
A palavra é "macaco":
• a palavra possui 3 vogais "aao"
• a primeira vogal é "a"
• a última vogal é "o".
A palavra é "ovelha":
• a palavra possui 3 vogais "oea"
• a primeira vogal é "o"
• a última vogal é "a".
A palavra é "lesma":
• a palavra possui 2 vogais "ea"
• a primeira vogal é "e"
• a última vogal é "a".
A palavra é "kkk" e não possui vogais.
Rephrasing the question.... The intention is to learn how to manipulate the elements of the string letter. For example, how could you return the last vowel of words?
– Bender-Plus
If one of the answers below solved your problem and there was no doubt left, choose the one you liked the most and mark it as correct/accepted by clicking on the " " that is next to it, which also marks your question as solved. If you still have any questions or would like further clarification, feel free to comment.
– Augusto Vasques