(0.5) Elabore um programa em Python que mostre todas as combinações de faces de dois dados que produzem a soma 7.
Passo 1
O enunciado pede que eu elabore um programa em Python que mostre todas as combinações de faces de dois dados que produzem a soma
. Informações importantes dadas (ou assumidas como padrão do problema):
- Cada dado é um dado comum com faces numeradas de
até . - Quero listar todos os pares
tais que é a face do primeiro dado, é a face do segundo dado, e .
Não começo a resolver ainda; só deixei claro o que é pedido e quais dados tenho.
Passo 2
Pensando matematicamente no que devemos gerar: as combinações são exatamente o conjunto
Isto é, todos os pares ordenados
com
e
entre
e
cuja soma dá
. Se eu pensar rápido, os pares são
— são
combinações no total.
Método natural para implementar isso num programa: percorrer todas as possibilidades do primeiro dado e, para cada uma, percorrer todas as possibilidades do segundo dado (produto cartesiano), testar se a soma é e, se for, mostrar a combinação. Esse método é direto, fácil de lembrar na prova e eficiente aqui (são só
verificações).
Método natural para implementar isso num programa: percorrer todas as possibilidades do primeiro dado e, para cada uma, percorrer todas as possibilidades do segundo dado (produto cartesiano), testar se a soma é
Passo 3
Vou explicar as construções Python que vou usar (passo-a-passo, como se eu estivesse aprendendo agora):
- Laço for e a função
: em Python, gera os inteiros (observe que o limite superior é exclusivo). Então usamos dois laços aninhados: um para e outro para . - Condicional if: testa se
. Em Python o operador de igualdade é . - Impressão formatada: para mostrar bonito uso uma f-string como
que coloca os valores de e na string. - Organização: é bom acumular os pares numa lista se quiser processar depois, ou imprimir direto durante a verificação. Na prova, imprimir direto é perfeitamente aceitável e mais simples.
Exemplo didático (pseudocódigo, não o código final):
- Para cada
em : - Para cada
em : - Se
, então mostrar o par .
- Se
- Para cada
Passo 4
Vou explicar por que este método funciona e como aplicar na hora da prova:
- Estamos usando força bruta controlada: testar todas as possibilidades é seguro porque o espaço é pequeno (
casos). Muitas questões de programação pedem exatamente isso quando os domínios são limitados. - Se fosse preciso, poderíamos também derivar os pares sem testar todas as combinações: para cada
em podemos calcular diretamente e aceitar o par apenas se estiver em . Este atalho reduz verificações, mas o laço duplo é mais simples mentalmente e menos propenso a erros de canto em prova. - Resultado esperado (exemplo de saída que seu programa deve produzir, uma linha por combinação):
-
Passo 5
Detalhes finais e dicas para a prova:
- Use
para não se confundir com o limite exclusivo do Python. - Se quiser os pares ordenados por ordem natural do primeiro dado, o laço aninhado com o primeiro laço variando mais lentamente (ou seja, primeiro laço em
, segundo em ) já dá a ordem mostrada acima. - Se precisar contar as combinações, basta manter um contador e incrementá-lo quando encontrar uma soma igual a
— resultado esperado do contador: . - Não esqueça de checar se o enunciado pede pares ordenados (
) ou combinações sem ordem; aqui normalmente pede pares ordenados (quem lança o dado A e quem lança o dado B importa).
Resposta
#!/usr/bin/env python3
def main():
for a in range(1, 7):
for b in range(1, 7):
if a + b == 7:
print(f"{a} + {b} = 7")
if __name__ == "__main__":
main()