1
resposta

Atividade 14.

import asyncio
import random

jogos = [
    {"id": 1, "times": "Flamengo vs Palmeiras"},
    {"id": 2, "times": "São Paulo vs Corinthians"},
    {"id": 3, "times": "Grêmio vs Internacional"},
]

RESULTADOS = [
    "Vitória do Time A",
    "Vitória do Time B",
    "Empate"
]

# Função assíncrona para definir o resultado do jogo
async def processar_aposta(jogo):
    future = asyncio.Future()

    print(f"Aposta no jogo {jogo['id']} ({jogo['times']}) registrada! Aguardando resultado...")

    # Tempo aleatório entre 2 e 8 segundos
    tempo = random.randint(2, 8)

    await asyncio.sleep(tempo)

    resultado = random.choice(RESULTADOS)

    # Define o resultado da aposta
    future.set_result(resultado)

    print(f"Aposta no jogo {jogo['id']} definida: {future.result()} (após {tempo}s).")

# Função principal
async def main():
    tarefas = []

    # Criando tarefas assíncronas para cada jogo
    for jogo in jogos:
        tarefa = asyncio.create_task(processar_aposta(jogo))
        tarefas.append(tarefa)

    # Aguarda todas as apostas serem concluídas
    await asyncio.gather(*tarefas)

    print("\nTodos os resultados foram revelados!")

# Executa o programa
asyncio.run(main())
1 resposta

Oi, Luiz! Como vai?

Agradeço por compartilhar.

Seu código ficou bem organizado e mostra bem o uso de asyncio, criando uma tarefa para cada jogo e usando asyncio.gather() para aguardar todos os resultados de forma assíncrona. Isso ajuda a simular bem situações em que cada aposta pode levar tempos diferentes para ser concluída.

Dica: você pode simplificar a função processar_aposta retornando o resultado diretamente, sem precisar criar um asyncio.Future() manualmente. O Future é útil em cenários mais avançados, mas neste caso o return resultado já resolve bem e deixa o código mais simples de ler.

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