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:

  1. Remova os espaços extras do início e fim.
  2. Divida a string em partes usando ; como separador.
  3. Para cada parte, remova espaços e separe nome e idade usando ,.
  4. Exiba uma linha formatada para cada pessoa no formato: Nome: [nome], Idade: [idade] (nascido em [ano]), onde ano = 2025 - idade.
  5. 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(';') e split(',') 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

  1. dados.strip() remove os espaços no início e no fim da string original.
  2. split(';') divide a string em uma lista de três partes: ['ana,25', ' bruno,30', ' carla,28'].
  3. O loop for percorre cada parte. Para cada uma, parte.strip() remove espaços extras (como o espaço antes de bruno).
  4. split(',') separa o nome e a idade. A idade é convertida para inteiro com int().
  5. A idade é adicionada à lista idades para o cálculo da média.
  6. O ano de nascimento é calculado como 2025 - idade e a linha é impressa com f-string.
  7. Após o loop, sum(idades) / len(idades) calcula a média, e a f-string com :.2f formata 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 fizer parte.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 - idade falha.
  • 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 idades estiver vazia, len(idades) é zero e ocorre ZeroDivisionError; 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