Clique Aqui e Compre pelo Whatsapp
Estudante, nesta atividade, você é convidado a verificar como a disciplina em questão pode contribuir para a sua experiência e formação profissional. Por esse motivo, você é instigado a solucionar um problema voltado à sua área de formação. A importância da prática consiste em colocar em execução os conteúdos vistos na teoria, momento em que se verifica se os objetivos traçados foram, de fato, alcançados.
A Loja Ágil, um e-commerce nacional, processa em média 10 a 15 mil pedidos por dia. Um script legado em Python é executado por agendamento noturno (cron) para gerar três relatórios operacionais:
(i) faturamento diário,
(ii) taxa de aprovação de pedidos, e
(iii) previsão de ocupação do centro de distribuição.
Nas últimas semanas, os relatórios passaram a apresentar divergências — o total faturado está abaixo do esperado, e a contagem de embalagens “altas” (≥ 50 cm) parece subestimada. Em alguns dias, o processo fica preso por horas, consumindo 100% da CPU.
A equipe de TI identificou que dois laços de repetição concentram a regra de negócio:
(a) um laço while, que percorre a lista de pedidos para somar o valor de pedidos elegíveis (apenas os com status “pago” e não cancelados, respeitando um limite mínimo antifraude); e
(b) um laço for com range, que conta quantas embalagens têm altura ≥ 50 cm - métrica utilizada na tarifação do frete e planejamento de espaço.
As listas podem não estar ordenadas por status (pago/pendente/cancelado) e podem conter mistura de estados na mesma execução. A hipótese é que erros no controle dos laços (condições de parada, atualização de índice e limites do range) estejam causando travamentos e subcontagem nos relatórios.
Regras de negócio relevantes
• Pedido 'válido' para faturamento: status == 'pago' e cancelado == False; pedidos cujo o valor esjeta abaixo do limite mínimo (limite) não são incluídos no total.
• Os pedidos podem chegar fora de ordem (ex.: um 'pendente' entre dois 'pago'); a varredura não deve interromper-se ao encontrar um status diferente.
• A contagem de embalagens altas (altura ≥ 50 cm) é usada para prever custo de frete e para alocar docas/estantes; a subcontagem gera rupturas logística.
• Os laços devem assegurar progresso (evitar loops infinitos) e percorrer todos os elementos das coleções, incluindo o índice 0, lembrando que o limite superior do intervalo (range) é exclusivo.
• Restrição: não alterar a estrutura de dados; corrija apenas as condições e as atualizações dos laços, fornecendo justificativa técnica para cada alteração.
Exemplo de parâmetros operacionais.
• limite = 100.0 (valor mínimo para entrar no faturamento)
• Altura mínima considerada 'alta' = 50 cm
Base de dados (exemplo mínimo para teste)
pedidos = [
{"id": 101, "status": "pago", "valor": 120.0, "cancelado": False},
{"id": 102, "status": "pago", "valor": 80.0, "cancelado": True},
{"id": 103, "status": "pendente", "valor": 50.0, "cancelado": False},
{"id": 104, "status": "pago", "valor": 40.0, "cancelado": False},
]
alturas = [55, 48, 50, 39, 72] # em centímetros
Trecho do código a ser auditado
Parte A (while) — consolidação de pedidos “pagos”:
i = 0
total = 0.0
validos = 0
# Enquanto houver pedido "pago", somar total e contar válidos
while i < len(pedidos) and pedidos[i]["status"] == "pago":
total += pedidos[i]["valor"]
if not pedidos[i]["cancelado"]:
validos += 1
# (intencionalmente sem i += 1)
Parte B (for) — contagem de embalagens “altas” (≥ 50 cm):
contagem_altos = 0
# Conta quantas alturas são >= 50
for j in range(1, len(alturas)):
if alturas[j] >= 50:
contagem_altos += 1
O que você deve entregar:
1) Classificação e propósito dos laços:
• Explique, utilizando linguagem técnica, o propósito da Parte A (while) e da Parte B (for).
• Classifique cada laço como condicional ou contado, justificando com base no material:
• Laços condicionais dependem de uma condição booleana (while);
• Laços contados executam um número conhecido de vezes, definido por meio de um range (for).
2) Achados de auditoria — problemas e riscos:
Localize e descreva pelo menos 03 (três) problemas no comportamento do código, incluindo obrigatoriamente:
• (a) Risco de loop infinito na Parte A e o motivo.
Dica: em laços while, a atualização da variável de controle é imprescindível para garantir progresso e evitar repetição indefinida.
• (b) Perda de dados na Parte B devido aos limites do range: o índice 0 fica de fora quando o laço se inicia em 1, e o limite superior do range é exclusivo.
Mostre o impacto desso comportamento na variável contagem_altos, utilizando o exemplo fornecido.
3) Correções propostas (escreva o código):
Reescreva apenas as condições e as atualizações necessárias dos laços, preservando o resto do script, de forma a garantir:
• (i) Término correto do laço da Parte A (sem risco de loop infinito).
• (ii) A cobertura completa dos dados na Parte B, incluindo o índice 0 e respeitando o fato de quem o que o fim do range é exclusivo.
Formato esperado (substitua pelos seus ajustes):
# Parte A (ajustada)
while
...
i += 1
# Parte B (ajustada)
for j in range(
...
4) Critérios de escolha: while × for:
Argumente sobre a preferência pelo uso de laço de repetição while (critério de parada por condição, iterações desconhecidas) e quando preferir for com range (iterações conhecidas por contagem), fundamentando tecnicamente.
IMPORTANTE:
Acesse o link do vídeo que o professor da disciplina gravou com orientações para ajudá-lo nesse processo de criação e desenvolvimento. O acesso deverá ser realizado em: Material da Disciplina.
Responda à atividade seguindo como roteiro os tópicos elencados anteriormente.
A entrega deve ser feita exclusivamente por meio do Formulário de entrega da atividade MAPA disponível no material da disciplina.
Antes de enviar sua atividade, certifique-se de que respondeu a todas as perguntas e realize uma cuidadosa correção ortográfica.
Após o envio, não são permitidas alterações ou modificações. Logo, você tem apenas uma chance de enviar o arquivo corretamente. Revise bem antes de enviar!
Lembre-se de que evidências de cópias de materiais, incluindo de outros estudantes, sem devidas referências, serão inquestionavelmente zeradas. As citações e referências, mesmo que do livro da disciplina, devem ser realizadas conforme normas da Instituição de Ensino.
Não são permitidas correções parciais no decorrer do módulo, ou seja, o famoso: “Professor, veja se minha atividade está certa?”. Isso invalida seu processo avaliativo. Lembre-se de que a interpretação da atividade também faz parte da avaliação.
Procure sanar suas dúvidas junto à mediação em tempo hábil sobre o conteúdo exigido na atividade, de modo que consiga realizar sua participação.
Atenção ao prazo de entrega. Evite enviar a atividade em cima do prazo. Você pode ter algum problema com internet, computador, software, etc., e os prazos não serão flexibilizados, mesmo em caso de comprovação.
Bons estudos!
Em caso de dúvidas, encaminhar mensagem ao seu professor mediador.
Clique Aqui e Compre pelo Whatsapp
