1
resposta

[Sugestão][Bug] Problema com solução e meu resultado

A Solução dada para o exercicio não funciona como pedido no problema

Eu editei a lista de usuários pois algo me parecia estranho e percebi que o codigo de solução não condiz com o resultado pedido do problema. Eu adicionei um VIP no final da lista e a notificação para ele saiu no final da lista: Sem mencionar a falta de um return como foi mencionado em outro post nesta pagina do forum.

import asyncio

usuarios = [
    {"nome": "Ana", "vip": True, "notificacoes_ativadas": False},
    {"nome": "João", "vip": False, "notificacoes_ativadas": True},
    {"nome": "Carla", "vip": False, "notificacoes_ativadas": False},
    {"nome": "Gui", "vip": True, "notificacoes_ativadas": True}
]

async def enviar_notificacao(usuario):
    if not usuario["notificacoes_ativadas"]:
        print(f"{usuario['nome']} desativou as notificações. Nada foi enviado.")
        return
    
    if usuario["vip"]:
        print(f"Notificação VIP para {usuario['nome']} enviada!")
    
    print(f"Notificação normal para {usuario['nome']} enviada!")

async def main():
    print("Enviando notificações...")
    tarefas = [asyncio.create_task(enviar_notificacao(u)) for u in usuarios]
    await asyncio.gather(*tarefas)
    print("Todas as notificações foram processadas!")

await main()  ## asyncio.run(main()) in regular python

Estou usando Jupyter Notebook, por isso o final está diferente, com "await main()" ao invés de "asyncio.run(main())"

Saida:

Enviando notificações...

Ana desativou as notificações. Nada foi enviado.

Notificação normal para João enviada!

Carla desativou as notificações. Nada foi enviado.

Notificação VIP para Gui enviada!

Notificação normal para Gui enviada!

Todas as notificações foram processadas!<


Minha solução:

Eu apenas não entendi claramente o uso de Tasks (Tarefas) então este é o resultado que alcancei por enquanto:

import asyncio

VIP_notifs = []
Common_notifs = []

Users = {
    "Foo":{"User_Type":"VIP", "Notif":True},
    "Bar":{"User_Type":"Common", "Notif":True},
    "Fubar":{"User_Type":"Common", "Notif":False},
    "Qux":{"User_Type":"VIP", "Notif":False},
    "Baz":{"User_Type":"VIP", "Notif":True},
    "Gui":{"User_Type":"Common", "Notif":True}
}

async def notify():
    for user in Users:
        if Users[user]["User_Type"] == "VIP":
            VIP_notifs.append(user)
        else:
            Common_notifs.append(user) 
    for VIP in VIP_notifs:
        if Users[VIP]["Notif"] == True:
            print(f"VIP Notification sent to {VIP}!")
        else:
            print(f"No VIP notification sent to {VIP}, as their notificaitons are turned off.")
    for Common in Common_notifs:
        if Users[Common]["Notif"] == True:
            print(f"Common Notification sent to {Common}!")
        else:
            print(f"No notification sent to {Common}, as their notifications are turned off")

        
        
async def main():
    print("Sending notifications...")
    await notify()
    print("All Notifications were processed.")        
        
await main()  ## asyncio.run(main()) in regular python

Saida:

Sending notifications...

VIP Notification sent to Foo!

No VIP notification sent to Qux, as their notificaitons are turned off.

VIP Notification sent to Baz!

Common Notification sent to Bar!

No notification sent to Fubar, as their notifications are turned off

Common Notification sent to Gui!

All Notifications were processed.<

Falta utilizar Tasks, mas ele da prioridade a todos os VIP mesmo que suas notifcações estejam desligadas.

1 resposta

Ei, Guilherme! Tudo bem?

Obrigada por nos trazer esse ponto de atenção ao código da aula.

Fiz o teste adicionando o return como sugerido e o retorno foi como esperado na atividade, e a mesma foi corrigida:

Captura de tela mostrando o código disponibilizado pelo instrutor em ver opinião do instrutor, executado no vs code.

Sobre sua solução: ela está bem estruturada e você está se saindo muito bem! Caso queira explorar outras formas, fique à vontade para compartilhar no fórum depois.

Continue se dedicando e qualquer dúvida, conte conosco.

Bons estudos e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado!