Desafio Python
Processando e formatando dados de uma string
Enunciado
Dada a string dados = " ana,25; bruno,30; carla,28 ", faça um programa que:
- Remova os espaços extras do início e fim.
- Divida a string em partes usando
;como separador. - Para cada parte, remova espaços e separe nome e idade usando
,. - Exiba uma linha formatada para cada pessoa no formato:
Nome: [nome], Idade: [idade] (nascido em [ano]), ondeano = 2025 - idade. - No final, exiba a média das idades com duas casas decimais.
Use f-strings e métodos de string. Não use loops explícitos para separar; use split().
Requisitos
- Use
strip()para remover espaços das extremidades. - Use
split(';')esplit(',')para separar os dados. - Use f-strings para formatar cada linha e a média.
- A média deve ter exatamente duas casas decimais.
- A saída deve seguir o formato exato do exemplo.
Código inicial
dados = " ana,25; bruno,30; carla,28 "
# Seu código aqui
Saída esperada
Nome: ana, Idade: 25 (nascido em 2000)
Nome: bruno, Idade: 30 (nascido em 1995)
Nome: carla, Idade: 28 (nascido em 1997)
Média das idades: 27.67
Ver dica
Após strip(), use split(';') para obter uma lista de strings. Cada uma pode ser dividida com split(','). Para a média, acumule as idades em uma lista e use sum() e len().
Mostrar solução
dados = " ana,25; bruno,30; carla,28 "
# Remove espaços das extremidades
dados_limpos = dados.strip()
# Divide em partes por ponto e vírgula
partes = dados_limpos.split(';')
idades = [] # para calcular a média
for parte in partes:
# Remove espaços e divide por vírgula
nome, idade_str = parte.strip().split(',')
idade = int(idade_str)
idades.append(idade)
ano_nascimento = 2025 - idade
# f-string formatada
print(f"Nome: {nome}, Idade: {idade} (nascido em {ano_nascimento})")
# Calcula e exibe a média com duas casas decimais
media = sum(idades) / len(idades)
print(f"Média das idades: {media:.2f}")
Passo a passo
dados.strip()remove os espaços no início e no fim da string original.split(';')divide a string em uma lista de três partes:['ana,25', ' bruno,30', ' carla,28'].- O loop
forpercorre cada parte. Para cada uma,parte.strip()remove espaços extras (como o espaço antes debruno). split(',')separa o nome e a idade. A idade é convertida para inteiro comint().- A idade é adicionada à lista
idadespara o cálculo da média. - O ano de nascimento é calculado como
2025 - idadee a linha é impressa com f-string. - Após o loop,
sum(idades) / len(idades)calcula a média, e a f-string com:.2fformata com duas casas decimais.
Por que funciona
O método strip() remove espaços em branco das extremidades, essencial para limpar a entrada. split() quebra a string em substrings com base em um delimitador. As f-strings permitem inserir variáveis e expressões diretamente, e o especificador :.2f formata números de ponto flutuante com duas casas decimais. A lista idades acumula os valores para a média.
Erros comuns
- Esquecer o
strip()em cada parte: se não fizerparte.strip(), o nome pode vir com espaço à esquerda, como" bruno". - Não converter a idade para int:
int(idade_str)é necessário para cálculos e para a média; se deixar como string,2025 - idadefalha. - Usar
split()sem argumento:split()sem argumento divide por qualquer espaço, o que não funcionaria aqui porque os dados usam;e,. - Erro na média: se a lista
idadesestiver vazia,len(idades)é zero e ocorreZeroDivisionError; mas aqui sempre há três idades.
Outra forma de resolver
Poderia usar list comprehension para extrair as idades: idades = [int(p.split(',')[1]) for p in partes], mas a solução com loop é mais clara para iniciantes.
Saída esperada
Nome: ana, Idade: 25 (nascido em 2000)
Nome: bruno, Idade: 30 (nascido em 1995)
Nome: carla, Idade: 28 (nascido em 1997)
Média das idades: 27.67