Composição de Funções: Análise de Texto:
a) Escreva uma função filtrar_palavras_por_letra(lista_palavras, letra) que receba uma lista de strings e uma letra, e retorne uma nova lista contendo apenas as palavras que começam com a letra especificada.
b) Escreva uma função contar_caracteres_total(lista_palavras) que receba uma lista de palavras e retorne o número total de caracteres em todas as palavras somadas.
c) Demonstre o uso, primeiro filtrando uma lista de palavras para obter apenas as que começam com “a”, e depois passando o resultado para a segunda função para contar o total de caracteres.

Passo 1

O problema trata de composição de funções em Python aplicadas a listas de strings. Primeiro precisamos de uma função que filtre palavras que comecem por uma certa letra; em seguida, outra que some o comprimento total das palavras de uma lista. Por fim, vamos usar a primeira para obter apenas as palavras que começam com "a" e passar esse resultado para a segunda.

Passo 2

Definimos a função \(filtrar_palavras_por_letra\)(\(lista_palavras\), letra) usando list comprehension. Ela percorre cada palavra em \(lista_palavras\) e inclui na lista de saída apenas aquelas cuja primeira letra (em minúsculo) batize com letra (também em minúsculo):
def \(filtrar_palavras_por_letra\)(\(lista_palavras\), letra):
    letra \(=\) letra.lower()
    return [palavra for palavra in \(lista_palavras\)
            if palavra and palavra[\(0\)].lower() \(==\) letra]

Passo 3

Definimos a função \(contar_caracteres_total\)(\(lista_palavras\)) que soma o comprimento (len) de cada palavra na lista usando a função interna sum e uma expressão geradora:
def \(contar_caracteres_total\)(\(lista_palavras\)):
    return sum(len(palavra) for palavra in \(lista_palavras\))

Passo 4

Agora, montamos uma pequena demonstração. Suponha a lista:
palavras \(=\) ["amora", "banana", "abacate", "uva", "arroz", "alho"]
1. Chamamos
filtradas \(= filtrar_palavras_por_letra\)(palavras, "a")
Isso produz ["amora", "abacate", "arroz", "alho"].
2. Em seguida chamamos
total \(= contar_caracteres_total\)(filtradas)
O valor de total será a soma dos comprimentos:
\(5+7+5+4=21\).

Resposta

def \(filtrar_palavras_por_letra\)(\(lista_palavras\), letra):
    letra \(=\) letra.lower()
    return [palavra for palavra in \(lista_palavras\)
            if palavra and palavra[\(0\)].lower() \(==\) letra]

def \(contar_caracteres_total\)(\(lista_palavras\)):
    return sum(len(palavra) for palavra in \(lista_palavras\))

# Demonstração
palavras \(=\) ["amora", "banana", "abacate", "uva", "arroz", "alho"]
filtradas \(= filtrar_palavras_por_letra\)(palavras, "a")
print(filtradas)           # ['amora', 'abacate', 'arroz', 'alho']
print(\(contar_caracteres_total\)(filtradas))  # \(21\)

Exercícios relacionados