1
resposta

Gerenciamento de inscrição 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"},
]

async def inscrever_aluno(aluno):
    curso_nome = aluno["curso"]
    nome_aluno = aluno["nome"]
    
    print(f"Inscrevendo {nome_aluno} no curso {curso_nome}...")

    if curso_nome not in cursos:
        print(f"Erro! O curso {curso_nome} não existe.\n")
        return

    curso = cursos[curso_nome]

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

    if curso["vagas"] > 0:
        curso["inscritos"].append(nome_aluno)
        curso["vagas"] -= 1
        print(f"Inscrição confirmada para {nome_aluno} no curso {curso_nome}!\n")
    else:
        print(f"Turma lotada! {nome_aluno} não pôde se inscrever no curso {curso_nome}.\n")

async def main():
    tarefas = [asyncio.create_task(inscrever_aluno(a)) for a in alunos]
    await asyncio.gather(*tarefas)
    print("Todas as inscrições foram processadas!\n")

asyncio.run(main())
1 resposta

Oi, Ricardo! Como vai?

O seu código tá muito bem estruturado e demonstra uma boa compreensão de como lidar com concorrência usando asyncio. A forma como você controla as vagas e evita duplicidade de inscrição mostra atenção aos detalhes lógicos da atividade. A mensagem de feedback para cada situação também está clara e organizada.

Continue praticando o uso de tarefas assíncronas.

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