Quais são os dados de entrada necessários?
Dado de Entrada Descrição
Lista de participantes Todas as pessoas que acessaram a transmissão
Horário de entrada Momento em que cada participante entrou na live
Horário de saída Momento em que cada participante saiu da live
Horário de início do evento Hora oficial em que a transmissão começou
Horário de fim do evento Hora oficial em que a transmissão terminouComo o algoritmo pode verificar a condição de presença completa?
Em vez de só calcular quanto tempo cada participante ficou conectado e comparar com a duração total, achei mais preciso comparar os horários diretamente:
O participante entrou antes ou no mesmo horário do início do evento?
O participante saiu depois ou no mesmo horário do fim do evento?
Se as duas coisas forem verdadeiras, ele acompanhou a live do começo ao fim. Isso evita um problema: só comparar a duração poderia enganar o sistema (por exemplo, alguém que entrou atrasado mas ficou depois que a live acabou teria o mesmo tempo total de quem assistiu certinho, mas não viu o começo).
Que decisão precisa ser tomada com base nesses dados?
Se horário de entrada ≤ início do evento E horário de saída ≥ fim do evento → o participante assistiu tudo → enviar e-mail de agradecimento.
Senão (entrou atrasado ou saiu antes do fim) → não enviar e-mail.Qual deve ser a ação final?
Enviar o e-mail de agradecimento automaticamente só para quem cumpriu a condição acima. Para os demais, o sistema não faz nada, apenas segue para o próximo participante da lista.
Algoritmo em linguagem natural
Algoritmo de Envio de Agradecimentos:
Obter a lista de participantes, com horário de entrada e saída de cada um.
Obter o horário de início e o horário de fim oficiais do evento.
Para cada participante da lista, repetir:
Verificar se o horário de entrada é menor ou igual ao início do evento.
Verificar se o horário de saída é maior ou igual ao fim do evento.
Se as duas condições forem verdadeiras, enviar e-mail de agradecimento para esse participante.
Senão, não enviar nada e seguir para o próximo participante.
Repetir o passo 3 até que todos os participantes tenham sido verificados.
Encerrar o processo.
from datetime import datetime
horario que o evento comecou e terminou oficialmente
inicio_evento = datetime.strptime("19:00", "%H:%M")
fim_evento = datetime.strptime("21:00", "%H:%M")
lista de participantes com horario de entrada e saida na transmissao
participantes = [
{"nome": "Marcos", "entrada": "19:00", "saida": "21:00"},
{"nome": "Juliana", "entrada": "19:10", "saida": "21:00"},
{"nome": "Renato", "entrada": "19:00", "saida": "20:30"},
{"nome": "Patricia", "entrada": "18:55", "saida": "21:05"},
]
def presenca_foi_completa(entrada, saida):
hora_entrada = datetime.strptime(entrada, "%H:%M")
hora_saida = datetime.strptime(saida, "%H:%M")
# so conta como presenca completa se entrou ate o inicio e ficou ate o fim
if hora_entrada <= inicio_evento and hora_saida >= fim_evento:
return True
return False
def enviar_email(nome):
# aqui ia a integracao real com o servico de email
print(f"E-mail de agradecimento enviado para {nome}")
participantes_aprovados = []
for pessoa in participantes:
completou = presenca_foi_completa(pessoa["entrada"], pessoa["saida"])
if completou:
participantes_aprovados.append(pessoa["nome"])
enviar_email(pessoa["nome"])
else:
print(f"{pessoa['nome']} nao assistiu ao evento completo, sem envio")
print("\nTotal de participantes que receberam o agradecimento:", len(participantes_aprovados))