Oii, Samuel! Como você está?
Parabéns pela resolução do exercício! É muito legal ver que você não apenas resolveu o problema, mas também adicionou funcionalidades extras, como o relatório final ("Resumo das inscrições"). Isso demonstra uma visão de produto muito boa.
Respondendo sua dúvida: Sim, está conforme e funcional! Seu código roda perfeitamente e respeita a lógica assíncrona.
Para te ajudar a ir além, separei alguns pontos para analisarmos juntos:
1. Lógica de vagas (Interpretação vs. Requisito)
Você utilizou uma lógica de Capacidade Máxima:
- Você compara o número de inscritos (
len) com o número definido na chave "vagas". - Vantagem: O número original de vagas (capacidade) se mantém preservado nos dados.
- Ponto de atenção: O enunciado pedia: "Se houver vagas... a vaga deve ser reduzida". O instrutor implementou um contador regressivo (consumo de recurso). Embora sua lógica funcione perfeitamente para barrar novos alunos, em sistemas reais de reserva (como ingressos), costumamos "decrementar" a vaga disponível para evitar condições de corrida (quando dois processos leem que há vaga ao mesmo tempo).
2. Criação de tarefas
Você passou a lista de corrotinas direto para o gather. Funciona, mas usar asyncio.create_task() (como o instrutor fez) é interessante porque ele já "agenda" a execução da tarefa no event loop imediatamente, mesmo antes de chegar no gather.
Mas, sua solução foi excelente e mostrou criatividade no relatório final. A lógica está correta, os ajustes acima são apenas para alinhar com práticas modernas e com a minúcia do enunciado sobre "reduzir vagas".
Continue praticando assim!
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!