2
respostas

Como fiz: analisando os participantes de uma maratona

participantes = {}

print('=== NOME DOS PARTICIPANTES (Digite "sair em Nome para encerrar) ===')

while True:
    nome = input('Digite o nome do participante: ').strip().title()

    if nome == 'Sair':
        break

    if not nome:
        print('Erro: nome obrigatório. Por favor, digite o nome do participante.')
        continue

    idade_input = input(f'Informe a idade de {nome}: ').strip()
    if not idade_input.isdigit():
        print('Erro: por favor, digite um número válida para idade.')
        continue

    idade = int(idade_input)

    if nome in participantes:
        print(f'O participante {nome} já está cadastrado!')
        continue
    else:
        participantes[nome] = idade
        print(f'Participante {nome} adicionado com sucesso!')

nomes_juntos = ', '.join(participantes.keys())
print(f'Nomes dos participantes: {nomes_juntos}\n')

idades_juntas = ', '.join(map(str, participantes.values()))
print(f'Idade dos participantes: {idades_juntas}\n')

print(f'Participantes e suas idades:\n')
for nome, idade in participantes.items():
    print(f'- {nome}: {idade} anos\n')
2 respostas

Olá, Antonio!

Que excelente trabalho na atividade Analisando os participantes de uma maratona.

Os pontos altos do seu script estão nas etapas de higienização de dados. O uso de métodos como .strip() para eliminar espaços em branco indesejados e .title() para padronizar os nomes com as iniciais maiúsculas garante a consistência do seu dicionário. Além disso, usar .isdigit() antes de forçar a conversão de tipo com int() impede que o terminal trave se alguém digitar uma letra no campo de idade, o que demonstra ótimas práticas de programação.

Complementando sua estratégia, vale notar um pequeno detalhe caso o usuário cometa um deslize na idade: se ele preencher o nome corretamente e digitar uma letra no campo da idade, o comando continue jogará a execução direto para o início do laço, forçando a digitação do nome de novo. Para contornar isso e reexibir apenas a pergunta da idade, costuma-se colocar um segundo laço while menor e dedicado exclusivamente para validar a entrada numérica daquele participante.

Na sua visão, utilizar o nome do maratonista como a chave do dicionário facilitou o controle de duplicados se compararmos com o uso de uma lista tradicional de tuplas?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Olá Lorena,

Agradeço pelo feedback e pela dica sobre o while dedicado à validação da entrada numérica na idade do participante. Fiz alguns ajustes e deixo mais abaixo para nova avaliação, por favor.

Aproveitei para mudar a checagem de duplicidade do nome, que estava sendo feita após a validação da idade e não fazia muito sentido. Agora faz após a validação do nome, como acredito ser o ideal.

Sobre o ponto levantado por ti, esse aqui "Na sua visão, utilizar o nome do maratonista como a chave do dicionário facilitou o controle de duplicados se compararmos com o uso de uma lista tradicional de tuplas?"

Iniciei o aprendizado em programação faz pouco tempo, minha vivência é mais com os cursos da Alura e de outras plataformas que assisto às vezes. Como não era uma resposta qual eu teria muita certeza, eu pesquisei sobre as diferenças.
Como conclusão, acredito que pelo fato de dicionários não aceitarem chaves duplicadas, usar nomes como chaves do docionário ajuda sim na verificação de duplicados. O que deixa a verificação mais rápida e possivelmente o código mais limpo.
Me corrija se estiver errado, por favor.

Aqui está o código ajustado como mencionei acima.

participantes = {}

print('=== NOME DOS PARTICIPANTES (Digite "sair em Nome para encerrar) ===')

while True:
nome = input('Digite o nome do participante: ').strip().title()

if nome == 'Sair':
    break

if not nome:
    print('Erro: nome obrigatório. Por favor, digite o nome do participante.')
    continue

if nome in participantes:
    print(f'O participante {nome} já está cadastrado!')
    continue

while True:

    idade_input = input(f'Informe a idade de {nome}: ').strip()

    if idade_input.isdigit():
        idade = int(idade_input)
        break
    else:
        print('Erro: por favor, digite um número válido para idade.')
        continue

participantes[nome] = idade
print(f'Participante {nome} adicionado com sucesso!')

nomes_juntos = ', '.join(participantes.keys())
print(f'Nomes dos participantes: {nomes_juntos}\n')

idades_juntas = ', '.join(map(str, participantes.values()))
print(f'Idade dos participantes: {idades_juntas}\n')

print(f'Participantes e suas idades:\n')
for nome, idade in participantes.items():
print(f'- {nome}: {idade} anos\n')