Eu tive uma certa dificuldade de compreender esta solução:
# Coletamos os preços dos três produtos
p1 = float(input('Digite o preço do primeiro produto: '))
p2 = float(input('Digite o preço do segundo produto: '))
p3 = float(input('Digite o preço do terceiro produto: '))
# Verificamos qual produto é o mais barato usando o operador lógico 'and'
if p1 < p2 and p1 < p3:
print('O primeiro produto é o mais barato.')
elif p2 < p1 and p2 < p3:
print('O segundo produto é o mais barato.')
elif p3 < p1 and p3 < p2:
print('O terceiro produto é o mais barato.')
elif p1 == p2 == p3:
print('Os produtos possuem o mesmo preço.')
else:
# Identificamos quais produtos possuem o mesmo preço, se for o caso
if p1 == p2:
print('O primeiro e o segundo produtos são os mais baratos.')
elif p2 == p3:
print('O segundo e terceiro produtos são os mais baratos.')
elif p1 == p3:
print('O primeiro e o terceiro produtos são os mais baratos.')
Porém se desenharmos o fluxo daquele código errado como uma árvore, fica transparente o exato momento em que o galho quebra:
[Início]
|
(p1 < p2 e p1 < p3?)
/ \
Sim / \ Não
/ \
[1º é o mais barato] (p2 < p1 e p2 < p3?)
/ \
Sim / \ Não
/ \
[2º é o mais barato] (p3 < p1 e p3 < p2?)
/ \
Sim / \ Não
/ \
[3º é o mais barato] (p1 == p2 == p3?)
/ \
Sim / \ Não
/ \
[Todos são iguais] [Cai no ELSE]
|
(p1 == p2?)
/ \
Sim / \ Não
/ ...
[1º e 2º mais baratos] (ERRO AQUI!)
[Início]
|
--- (Menor Único?) ---
/ | \
Sim Sim Sim
/ | \
[p1 < ...] [p2 < ...] [p3 < ...]
/ | \
[1º Mais Barato] [2º Mais Barato] [3º Mais Barato]
|
Não
|
--- (Empate Duplo?) ---
/ | \
Sim Sim Sim
/ | \
[p1==p2 e p1<p3] [p2==p3 e p2<p1] [p1==p3 e p1<p2]
/ | \
[1º e 2º Menores] [2º e 3º Menores] [1º e 3º Menores]
|
Não
|
[Todos São Iguais]