Questão nº 46
Questão de Tecnologia da Informação · FGV ALEP 2024 (nº 46)
Considere o seguinte trecho de código em Python:
```
def contar_ocorrencias(frase, letra):
return frase.count(letra)
mensagens = {
'msg1': 'Python é uma linguagem de programação.',
'msg2': 'Aprender Python é divertido!',
'msg3': 'Python é utilizado em desenvolvimento web.'
}
letra_cont = 'a'
for chave, valor in mensagens.items():
qtd = contar_ocorrencias(valor, letra_cont)
print(f"{chave}: A letra '{letra_cont}' aparece {qtd} vezes.")
```
Ao final da execução desse código, o resultado exibido no console é:
msg1: A letra 'a' aparece 4 vezes.
msg2: A letra 'a' aparece 0 vezes.
msg3: A letra 'a' aparece 1 vezes.
O código ainda funcionará corretamente se o trecho definido como ‘qtd = contar_ocorrencias(valor, letra_cont)’ for substituído por:
- Aqtd = chave.count(valor)
- Bqtd = chave.count(letra_cont)
- Cqtd = valor.count(chave)
- Dqtd = len([letra for letra in valor if letra == letra_cont]) (alternativa correta)
- Eqtd = sum(1 for letra in chave if letra == letra_cont)
Resposta comentada
Gabarito Alternativa D
O conceito-chave é que o método .count() conta ocorrências de uma substring dentro de uma string, e a ordem importa: string.count(substring). Para contar letras específicas, você pode usar .count() diretamente ou uma list comprehension que filtra cada caractere.
- (A) Incorreta:
chave.count(valor)tenta contar a mensagem inteira dentro da chave (ex.:'msg1'), o que sempre retorna 0, pois a chave é curta e não contém a frase. - (B) Incorreta:
chave.count(letra_cont)conta a letra 'a' na chave (ex.:'msg1'), que não tem 'a', resultando sempre em 0 — ignora o conteúdo real da mensagem. - (C) Incorreta:
valor.count(chave)tenta contar a string'msg1'dentro da mensagem, o que não existe, retornando 0 — inverte os argumentos de forma errada. - (D) Correta:
len([letra for letra in valor if letra == letra_cont])cria uma lista com cada caractere da mensagem que é igual a'a'e conta quantos são — equivalente avalor.count('a'), mas manualmente. - (E) Incorreta:
sum(1 for letra in chave if letra == letra_cont)itera sobre a chave ('msg1'), não sobre a mensagem, então conta 'a' na chave (0 vezes) — mesma armadilha da (B), mas comsum.
Armadilha da banca (distrator mais tentador): A alternativa (B) parece plausível porque usa letra_cont corretamente, mas o erro está em aplicar .count() na chave (chave) em vez de no valor (valor). A banca testa se você entende que a variável chave é só o rótulo ('msg1') e o conteúdo está em valor.
Fonte: FGV ALEP 2024 Técnico Legislativo - Suporte e Manutenção (Caderno Tipo 1). Reproduzida para fins de estudo.