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
]

lock = asyncio.Lock()

async def inscrever(aluno):
    nome = aluno["nome"]
    curso = aluno["curso"]

    print(f"\nInscrevendo {nome} no curso {curso}...")

    async with lock:
        dados_curso = cursos.get(curso)

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

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

    await asyncio.sleep(1)

async def main():
    tarefas = [asyncio.create_task(inscrever(aluno)) for aluno in alunos]
    await asyncio.gather(*tarefas)

    print("\nTodas as inscrições foram processadas!")

asyncio.run(main())
1 resposta

Oi, Marcia! Como vai?

Com o que você descreveu, gostei de ver como usou asyncio.Lock() para evitar problemas de concorrência nas inscrições. Esse controle garante que as alterações na quantidade de vagas e na lista de inscritos sejam feitas de forma segura.

Uma dica interessante para o futuro é criar uma função auxiliar para listar os cursos e vagas restantes, facilitando a visualização do status final. Veja este exemplo:


def listar_cursos():
    for curso, dados in cursos.items():
        print(f"{curso} - Vagas: {dados['vagas']} - Inscritos: {dados['inscritos']}")

listar_cursos()

Esse código percorre o dicionário cursos e mostra de forma simples o status de cada curso.

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