3
respostas

compreencao nao funciona

Escreva uma list comprehension que filtre, de uma lista pre-existente de palavras, aquelas que tenham mais do que quatro lettras, e nas quais aparecam pelo menos duas vogais diferentes.

#funcao
def vogais(texto):
    contador = 0
    for i in texto:
        if i == "a" or i == "e" or i == "i" or i =="o" or i == "u":
            contador = contador + 1
    return contador + 1

my_words = ['pyramid', 'car', 'quiet']

lista = [i for i in my_words: if len(i)>4 and vogais(i): print(f"palavras maior 4: {i} a quntidade de vogais sao:{i}")]
lista
3 respostas

Oi Jamerson, tudo bem?

Realmente existem erros de sintaxe em sua list comprehension...

Pensei aqui e até pesquisei um pouco como fazer mas não achei nada parecido com o que você tem em mente acho...

Peço até desculpas e que por favor, caso consiga fazer dessa forma, que poste aqui para que eu aprenda e veja como se faz.

O que fiz de modo mais prático foi assim:

#funcao
def vogais(texto):
    contador = 0
    for i in texto:
        if i == "a" or i == "e" or i == "i" or i =="o" or i == "u":
            contador = contador + 1
    return contador + 1

my_words = ['pyramid', 'car', 'quiet']

lista = [[i, vogais(i)] for i in my_words if len(i)>4 and vogais(i)]
print(f"palavras maior 4:")
for i in lista:
    print(f"Palavra: {i[0]}, a quntidade de vogais sao:{i[1]}")
lista

olhei teu codigo mas, nao entendo muito. enviei um email ao meu professor. e ele escreveu a seguinte mensagem para o meu codigo!

Viva,

primeiro verifica a função vogais, que está errada. Se puseres 'aa' dará 2, o que não é suposto! 
Não deves iterar pelas letras do texto, mas pelas vogais 'aeiou'. Com o operador 'in', perguntas se 'a' in palavra. se existirem mais do que uma, deve retornar True. senão retorna False

a compreensão está bem, mas termina depois de vogais(i). o print tiras

Uma colega realisou o exercicio da seguinte maneira:


my_words = ['pyramid', 'car', 'quite', 'beer', 'door', 'room', 'bedroom']

def count_vowels(word):
    vowels = ['a','e','i','o', 'u']
    cnt = set([letter for letter in word if letter in vowels and letter])

    unique = []
    [unique.append(n) for n in cnt if n not in unique]
    return len(unique)

f = [w for w in my_words if count_vowels(w) >= 2 and len(w) > 4]  
f