Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Resposta e dúvida

Eu honestamente li errado o enunciado desse caso e entendi que a entrada deveria ser um input, então eu acabei fazendo esse código um pouquinho mais complexo:

import re

participants = {}

name_template = r'[^\W\d_]+'
age_template = r'[0-9]+'

while True:
    names = input("Digite o nome do participante: ").title().strip().split(", ")
    ages = input("Digite a idade do participante: ").strip().split(", ")
    print("")
    
    if len(names) != len(ages):
        print("O número de membros das duas listas é diferente. Tente novamente.")
        break
    
    for i in range(len(names)):
        name = names[i]
        age = ages[i]             
        if (re.fullmatch(name_template, name)) and (re.fullmatch(age_template, age)):
            participants[name] = age 
        else:
            print("Existe algum erro na formatação dos dados. Encerrando o processo.\n")
            break
    break

if participants:
    print("Lista de participantes e suas idades: ")
    for x, y in participants.items(): 
        print(f"- {x}: {y} anos de idade;")
else:
    print("Houve um erro no processamento de dados. Tente novamente.")

Esse código tem uns três problemas. Um é que eu não achei uma solução boa pra quando o número de listas é maior que a outra, então eu decidi só não fazer esse processo. O segundo é que se tiver um caso em que o dado errado esteja no meio da lista, ele só interrompe tudo ao invés de pegar dados válidos, como em:

Digite o nome do participante: david, júlia, arcelino, joão, carlos, pedro, alessandro
Digite a idade do participante: 20, 22, 56, 19, 20, X, 42 

Existe algum erro na formatação dos dados. Encerrando o processo.

Lista de participantes e suas idades:
- David: 20 anos de idade;
- Júlia: 22 anos de idade;
- Arcelino: 56 anos de idade;
- João: 19 anos de idade;
- Carlos: 20 anos de idade;

Como é que seria uma boa resolução desse tipo de problema? Sei que não é exatamente o que foi pedido mas fiquei curioso pra saber.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta
solução!

Olá! Tudo bem?

Que interessante a sua abordagem para resolver o problema, mesmo que tenha interpretado o enunciado de forma diferente. Vamos tentar melhorar o seu código para lidar com as questões que você levantou.

  1. Verificação de listas de tamanhos diferentes: em vez de interromper o processo, você pode simplesmente pedir ao usuário para tentar novamente até que as listas tenham o mesmo tamanho.

  2. Processamento de dados válidos mesmo com erros: você pode modificar seu loop para continuar processando os dados válidos e apenas ignorar as entradas inválidas, em vez de interromper todo o processo.

Aqui está uma versão ajustada do seu código que tenta resolver esses problemas:

import re

participants = {}

name_template = r'[^\W\d_]+'
age_template = r'[0-9]+'

while True:
    names = input("Digite o nome do participante: ").title().strip().split(", ")
    ages = input("Digite a idade do participante: ").strip().split(", ")
    print("")

    if len(names) != len(ages):
        print("O número de membros das duas listas é diferente. Tente novamente.")
        continue

    for i in range(len(names)):
        name = names[i]
        age = ages[i]
        
        if (re.fullmatch(name_template, name)) and (re.fullmatch(age_template, age)):
            participants[name] = age
        else:
            print(f"Erro na formatação dos dados para {name} ou {age}. Ignorando esta entrada.\n")
            continue

    break

if participants:
    print("Lista de participantes e suas idades: ")
    for x, y in participants.items():
        print(f"- {x}: {y} anos de idade;")
else:
    print("Houve um erro no processamento de dados. Tente novamente.")

Com essas alterações, o seu código agora continuará a processar os dados válidos e apenas ignorará as entradas que não estiverem no formato correto. Além disso, ele pedirá ao usuário para tentar novamente se as listas de nomes e idades não tiverem o mesmo tamanho.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.