(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 ...7.... Informações importantes dadas (ou assumidas como padrão do problema):
  • Cada dado é um dado comum com faces numeradas de ...1 até ...6.
  • Quero listar todos os pares (a,b) tais que a é a face do primeiro dado, b é a face do segundo dado, e a+b=7.
    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
\{(a,b)\in\{1,\dots,6\}\times\{1,\dots,6\}\mid a+b=7\}.
Isto é, todos os pares ordenados (a,b) com a e b entre ...1 e ...6 cuja soma dá ...7. Se eu pensar rápido, os pares são (1,6),(2,5),(3,4),(4,3),(5,2),(6,1) — são ...6 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 é ...7 e, se for, mostrar a combinação. Esse método é direto, fácil de lembrar na prova e eficiente aqui (são só 6\times6=36 verificações).

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 ...\text{range}: em Python, \text{range}(1,7) gera os inteiros ...1,2,3,4,5,6 (observe que o limite superior é exclusivo). Então usamos dois laços aninhados: um para a e outro para b.
  • Condicional if: testa se a+b==7. Em Python o operador de igualdade é ...==....
  • Impressão formatada: para mostrar bonito uso uma f-string como ...f"{a} + {b} = 7"... que coloca os valores de a e b 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 a em \{1,\dots,6\}:
    • Para cada b em \{1,\dots,6\}:
      • Se a+b=7, então mostrar o par (a,b).

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 ( ...36 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 a em \{1,\dots,6\} podemos calcular diretamente b=7-a e aceitar o par apenas se b estiver em \{1,\dots,6\}. 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):
    • ...1 + 6 = 7...
    • ...2 + 5 = 7...
    • ...3 + 4 = 7...
    • ...4 + 3 = 7...
    • ...5 + 2 = 7...
    • ...6 + 1 = 7...

Passo 5

Detalhes finais e dicas para a prova:
  • Use \text{range}(1,7) 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 a, segundo em b) 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 ...7 — resultado esperado do contador: ...6.
  • Não esqueça de checar se o enunciado pede pares ordenados ( (a,b) ) 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()

Exercícios relacionados