1
resposta

Minha resposta

import asyncio
import math


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 inscricao(aluno):
    curso_sel = cursos[aluno['curso']]

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

    if curso_sel["vagas"] > 0:
        cursos[aluno['curso']]['inscritos'].append(aluno['nome'])
        print(f"Inscrição confirmada para {aluno['nome']} no curso {aluno['curso']}!  .\n")
        return True
    else:
        print(f"Turma lotada! {aluno['nome']}  não pôde se inscrever no curso {aluno['curso']}.\n")
        return False
 

async def processamento(candidato):
    print(f"Inscrevendo {candidato['nome']} no curso {candidato['curso']}...")
    valido = await inscricao(candidato)

    if not valido:
        return
 

async def main(): 
    tasks = [ asyncio.create_task(processamento(candidato)) for candidato in alunos]
    await asyncio.gather(*tasks)
    print("Todos as inscrições foram processados!")

asyncio.run(main())
1 resposta

Oi, Franklim! Como vai?

Do jeito que você explicou, achei interessante como você estruturou a lógica de inscrições assíncronas usando asyncio, garantindo que duplicatas fossem rejeitadas e que a verificação de vagas funcionasse corretamente.

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