1
resposta

[Projeto] Praticando Python: Strings e Regex Proposta 14

Registro de sugestão para proposta 14 do curso Praticando Python: Strings e Regex, com ideia de listar todos os nomes pesquisados pelo usuário final, com base em um banco de dados de nomes.

import re

nomes = [
    "Lucas de Almeida - 1995",
    "Mariana Souza - 1987",
    "João Pedro de Lima - 2003",
    "Fernanda Costa da Silva - 1990",
    "Rafael de Oliveira Santos - 1995",
    "Camila da Rocha - 1982",
    "Camila Vienna - 1987",
    "Gustavo Nogueira de Pereira - 2001",
    "Beatriz Mendes - 1997",
    "Eduardo Teixeira Ramos - 1985",
    "Larissa da Fernandes - 2000",
    "Thiago Moreira Duarte - 1993",
    "Aline de Castro - 1989",
    "Bruno Henrique Vasconcelos - 1995",
    "Vanessa Martins da Costa - 2004",
    "Felipe Cardoso de Barbosa - 1998"
]

regex = r'^(\w+)\s(.+)\s-\s(\d{4})'

lista_nomes = []
lista_sobrenome = []
lista_ano = []

for nome in nomes:
    analise = re.match(regex, nome)
    if analise:
        lista_nomes.append(analise.group(1))
        lista_sobrenome.append(analise.group(2))
        lista_ano.append(analise.group(3))


print(lista_nomes)
print(lista_sobrenome)
print(lista_ano)

def pesquisar_nomes(nome_procurado):
    resultados = []
    for posicao, nome in enumerate(lista_nomes):
        if nome == nome_procurado:
            resultados.append({
                'Nome': lista_nomes[posicao],
                'Sobrenome': lista_sobrenome[posicao],
                'Nascimento': lista_ano[posicao]
            })
    return resultados if resultados else 'Nome não encontrado.'


nome_digitado = input('Digite um nome procurado: ')
resultado_final = pesquisar_nomes(nome_digitado)

if isinstance(resultado_final,list):
    for i, res in enumerate(resultado_final, start= 1):
        print(f'Resuntado: {i}: {res}')
else:
    print(resultado_final)

Aceito sugestões de melhorias e correções

1 resposta

Oi, Vinicius! Como vai?

Gostei de como você usou expressões regulares para separar as partes do nome e o ano de nascimento. Isso torna o código bem modular e facilita a busca pelo nome. A função pesquisar_nomes ficou bem organizada, permitindo buscar rapidamente as informações.

Uma curiosidade: você sabia que pode otimizar a busca por nomes usando o método filter()? Ele permite que você escreva a função de pesquisa de uma forma mais compacta. Veja um exemplo:

resultado_final = list(filter(lambda x: x['Nome'] == nome_digitado, resultados))
print(resultado_final if resultado_final else 'Nome não encontrado.')

Esse código faz a mesma coisa que a busca, mas de forma mais direta e sem a necessidade de usar um for explícito. O filter() cria um novo iterável com os resultados que atendem à condição dada.

Conte com o apoio do Fórum na sua jornada.