1
resposta

Gerenciando inscrições em cursos

import asyncio

cursos = {
    "Python Avançado": {"vagas": 2, "inscritos": []},
    "Java para Iniciantes": {"vagas": 1, "inscritos": []},
    "Machine Learning": {"vagas": 0, "inscritos": []},
}
 
alunos = [
    {"nome": "Alice", "curso": "Python Avançado"},
    {"nome": "Bruno", "curso": "Python Avançado"},
    {"nome": "Carlos", "curso": "Java para Iniciantes"},
    {"nome": "Daniela", "curso": "Machine Learning"},
    {"nome": "Alice", "curso": "Python Avançado"},  # Tentativa de inscrição duplicada
]

async def inscricoes(aluno, tempo):
    await asyncio.sleep(tempo)
    
    curso_nome = aluno['curso']
    curso = cursos.get(curso_nome)

    print(f'Inscrevendo {aluno["nome"]} no curso {curso_nome}...')

    if curso_nome not in cursos:
        print(f"Curso {curso_nome} não encontrado.")
        return

    if aluno['nome'] in curso['inscritos']:
        print(f'{aluno["nome"]} já está inscrita no curso {curso_nome}! Inscrição rejeitada.\n')
        return

    if curso['vagas'] <= 0:
        print(f'Turma lotada! {aluno["nome"]} não pôde se inscrever no curso {curso_nome}.\n')
        return

    curso['inscritos'].append(aluno['nome'])
    curso['vagas'] -= 1
    print(f'Inscrição confirmada para {aluno["nome"]} no curso {curso_nome}\n')

async def main():
    tarefas = [asyncio.create_task(inscricoes(aluno, i * 2)) for i,  aluno in enumerate(alunos)]
    await asyncio.gather(*tarefas)
    print('Todas as inscrições foram processadas!\n')

asyncio.run(main())
1 resposta

Oi, Estudante! Como vai?

Obrigada por compartilhar seu código com a comunidade Alura.

Seu código tá bem estruturado e a lógica para tratar inscrições duplicadas e cursos lotados tá clara e funcional. A forma como você usou asyncio para simular o processamento assíncrono das inscrições ficou bem aplicada.

Uma dica interessante para o futuro é usar o método set() para verificar duplicidades de forma ainda mais eficiente, principalmente quando lidamos com grandes volumes de dados. Veja este exemplo:


nomes = ["Ana", "Bruno", "Ana", "Carlos"]
nomes_unicos = list(set(nomes))
print(nomes_unicos)

Esse código remove nomes repetidos, mantendo apenas valores únicos. set() elimina duplicatas de forma rápida.

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