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())