39 € por curso49,90 €/mês por todos os 3.000 cursos
Tudo.guru
Voltar ao caminho

Aula de prévia

Transformar um pedido em regras verificáveis

20 minutos · Python básico com checklist

Nesta aula vais transformar um pedido vago num contrato de entrada e saída. O projeto do curso calcula quantas caixas são necessárias para uma quantidade de objetos. O resultado terá de funcionar também nos limites, não apenas no exemplo apresentado.

O pedido é: distribuir 17 cadernos em caixas com capacidade para 6. Duas caixas ficam cheias e sobram cinco cadernos, que exigem uma terceira caixa. Distinguimos caixas cheias, unidades restantes e caixas totais. São três respostas diferentes.

Definimos desde já as regras: quantidade é um inteiro maior ou igual a zero; capacidade é um inteiro maior que zero; não se misturam objetos de encomendas diferentes. Nesta primeira versão, os valores usados no exemplo cumprem essas condições. A rejeição de entradas inválidas será implementada na aula 3.

python

def distribuir(quantidade, capacidade):
    cheias = quantidade // capacidade
    restantes = quantidade % capacidade
    total = cheias + (1 if restantes else 0)
    return {"cheias": cheias, "restantes": restantes, "total": total}

resultado = distribuir(17, 6)
print(resultado)
assert resultado == {"cheias": 2, "restantes": 5, "total": 3}

// calcula a divisão inteira e % o resto. A condição acrescenta uma caixa somente quando há unidades por colocar. O resultado é um dicionário com significado explícito; uma lista como [2, 5, 3] exigiria memorizar o que representa cada posição.

Uma regra que ajuda a conferir o cálculo é cheias * capacidade + restantes == quantidade. Outra é 0 <= restantes < capacidade. Estas relações serão úteis mesmo quando escolhermos números diferentes.

Exercício: prevê os resultados para zero objetos e para doze objetos com capacidade seis. Depois confirma com esta solução autónoma.

python

def distribuir(quantidade, capacidade):
    cheias, restantes = divmod(quantidade, capacidade)
    return {"cheias": cheias, "restantes": restantes,
            "total": cheias + (1 if restantes else 0)}

print(distribuir(0, 6))
print(distribuir(12, 6))
assert distribuir(0, 6) == {"cheias": 0, "restantes": 0, "total": 0}
assert distribuir(12, 6) == {"cheias": 2, "restantes": 0, "total": 2}

Zero objetos exige zero caixas; uma divisão exata não exige uma caixa adicional. O critério de conclusão é conseguires explicar essas duas decisões e escrever as regras sem depender de exemplos específicos. Este projeto calcula quantidades abstratas; não calcula peso, transporte, segurança de embalagens ou preços.

Referências técnicas: números no Python e funções integradas, incluindo divmod. Problema e exemplos originais Tudo.guru.

O restante fica na tua biblioteca.

Cria a conta, confirma o email e escolhe entre comprar este caminho ou aderir ao Passe Total.