1
resposta

[Dúvida] Desafio: Hora da Prática - Exercício 11

Eu fiz a minha lógica um pouco diferente do que foi demonstrado na Opinião do Instrutor, desta forma também funciona?
Eu testei com alguns resultados no Google Colab e aparentemente foi:

n1 = float(input('Digite o tamanho do primeiro lado: '))
n2 = float(input('Digite o tamanho do segundo lado: '))
n3 = float(input('Digite o tamanho do terceiro lado: '))

if n1+n2 > n3 or n2+n3 > n1 or n1+n3 > n1:
  if n1==n2==n3:
    print('É um triângulo Equilátero')
  elif n1==n2 or n1==n3 or n2==n3:
    print('É um triângulo Isóscleles')
  elif n1!=n2!=n3:
    print('É um triângulo Escaleno')
else:
  print ('Não é um triângulo')
1 resposta

Oi, Amanda. Tudo bem?

Fico muito feliz em ver você testando caminhos diferentes para resolver o problema. Esse é o melhor jeito de aprender programação!

A sua lógica interna para classificar os triângulos (Equilátero, Isósceles e Escaleno) está muito boa e funciona bem. Mas, precisamos ter atenção à condição inicial que você usou para verificar se os lados realmente formam um triângulo.

Vamos analisar alguns pontos importantes para te ajudar a ajustar seu código:

1. A Regra de Existência de um Triângulo

Pra que três medidas formem um triângulo, a regra matemática diz que a soma de dois lados deve ser sempre maior que o terceiro lado. Isso deve valer para todas as combinações.

No seu código, você usou o operador or:
if n1+n2 > n3 or n2+n3 > n1 or n1+n3 > n1:

O problema aqui é que, se apenas uma dessas condições for verdadeira, o programa aceitará os números como um triângulo. Por exemplo, se você digitar os lados 10, 1 e 1, a condição 10 + 1 > 1 é verdadeira, mas esses valores não conseguem fechar um triângulo na vida real.

O ideal é usar o and, garantindo que todas as condições sejam atendidas ao mesmo tempo.

2. Pequeno ajuste na última condição

Na sua última verificação do if, há um detalhe de digitação: n1+n3 > n1. O correto para validar o terceiro lado seria n1+n3 > n2.

3. Comparação encadeada

Sua lógica para o triângulo equilátero n1==n2==n3 é excelente e o Python entende isso perfeitamente. Já para o escaleno, usar n1 != n2 != n3 pode ser traiçoeiro em alguns casos. O mais seguro para garantir que os três são diferentes entre si é comparar todos os pares: n1 != n2 and n2 != n3 and n1 != n3.

Como seu código ficaria com os ajustes:

n1 = float(input('Digite o tamanho do primeiro lado: '))
n2 = float(input('Digite o tamanho do segundo lado: '))
n3 = float(input('Digite o tamanho do terceiro lado: '))

# Trocamos o 'or' pelo 'and' para garantir a regra matemática
if (n1 + n2 > n3) and (n2 + n3 > n1) and (n1 + n3 > n2):
    if n1 == n2 == n3:
        print('É um triângulo Equilátero')
    elif n1 == n2 or n1 == n3 or n2 == n3:
        print('É um triângulo Isósceles')
    else:
        # Se não é equilátero nem isósceles, só pode ser escaleno
        print('É um triângulo Escaleno')
else:
    print('Não é um triângulo')

Percebe como o else final ajuda a simplificar? Se ele passou no primeiro if (é um triângulo) e não caiu nas regras de lados iguais ou dois iguais, ele obrigatoriamente terá os três lados diferentes.

Você está no caminho certo!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!