import asyncio
courses = {
"Python Avançado": {"vagas": 2, "inscritos": []},
"Java para Iniciantes": {"vagas": 1, "inscritos": []},
"Machine Learning": {"vagas": 0, "inscritos": []},
}
students = [
{"nome": "Alice", "curso": "Python Avançado"},
{"nome": "Bruno", "curso": "Java para Iniciantes"},
{"nome": "Alice", "curso": "Python Avançado"}, # Tentativa de inscrição duplicada
{"nome": "Daniela", "curso": "Machine Learning"},
{"nome": "Carlos", "curso": "Java para Iniciantes"},
{"nome": "Lucas", "curso": "Python Avançado"}
]
async def check_diponibility(student):
await asyncio.sleep(2)
if courses[student['curso']]['vagas'] > 0:
print(f'\n{student['nome']} > [OK] Ainda há disponibilidade de vagas para o curso {student['curso']} (Vagas: {courses[student['curso']]['vagas']}).')
return True
else:
print(f'\n{student['nome']} > [NOT_OK] Turmas encerradas para o curso {student['curso']} (Vagas: {courses[student['curso']]['vagas']}).')
return False
async def check_duplicate_register(student):
await asyncio.sleep(2)
if not student['nome'] in courses[student['curso']]['inscritos']:
print(f'{student['nome']} > [OK] Ainda não há registro desse aluno no curso {student['curso']}.')
return False
else:
print(f'{student['nome']} > [NOT_OK] Esse aluno já está registrado no curso {student['curso']}.')
return True
async def register_on_course(student):
has_disponibility, has_duplicate_register = await asyncio.gather(
check_diponibility(student),
check_duplicate_register(student)
)
if has_disponibility:
if not has_duplicate_register:
courses[student['curso']]['inscritos'].append(student['nome'])
courses[student['curso']]['vagas'] -= 1
print(f'{student['nome']} > [SUCESS] Inscrição realizada com sucesso no curso {student['curso']}.')
else:
print(f'{student['nome']} > [NOT_SUCESS] A inscrição não foi realizada.')
else:
print(f'{student['nome']} > [NOT_SUCESS] A inscrição não foi realizada.')
async def main():
print('\nIniciando inscrições...')
for student in students:
await register_on_course(student)
print('\nTodas as inscrições foi realizadas!\n')
asyncio.run(main())