miércoles, 4 de julio de 2018

Triángulos factibles en Python

Reto: Triángulos factibles

Dados tres lados decir si es posible construir un triángulo con ellos. En caso afirmativo decir si el triángulo formado es equilátero, isósceles o escaleno.




Un triángulo es factible cuando el lado mayor es menor que la suma de los otros dos.

  • Equilatero: los tres lados iguales
  • Isósceles: dos lados iguales
  • Escaleno: los tres lados distintos



Método 1

Generamos números aleatorios entre 1 y 100 para los tres lados. En lugar de detectar cuál es el mayor de los lados y cuáles son los otros dos, lo que hacemos es establecer una triple condición en el if usando and para evaluar que ninguno de los lados sea mayor que los otros dos. Si se cumple la condición el triángulo es factible y pasamos a determinar de qué tipo se trata. Si los tres lados son iguales se trata de un triángulo equilátero. Si dos lados son iguales se trata de un triángulo isósceles, para ello usamos un operador lógico or y analizamos los tres casos posibles. En caso contrario los tres lados serán distintos y se tratará de un triángulo escaleno.

import random
a=random.randint(1,100)
b=random.randint(1,100)
c=random.randint(1,100)
if a<(b+c) and b<(a+c) and c<(a+b):
  print('Si a =',a,', b =',b,'y c =',c,' entonces si se puede hacer un triangulo')
  if a==b==c:
    print('Equilatero')
  elif a==b or b==c or a==c:
    print('Isósceles')
  else:
    print('Escaleno')
else:
  print('Si a =',a,', b =',b,'y c =',c,' entonces no se puede hacer un triangulo')


Método 2

Usamos tres bucles for encadenados para recorrer todas las posibilidades para los lados a, b, c.

for a in range(1,5):
  for b in range(1,5):
    for c in range(1,5):
      texto=''
      if a<(b+c) and b<(a+c) and c<(a+b):
        texto='Con '+str(a)+','+str(b)+','+str(c)+' si se puede hacer un triangulo: '
        if a==b==c:
          texto+='Equilatero'
        elif a==b or b==c or a==c:
          texto+='Isósceles'
        else:
          texto+='Escaleno'
        print(texto)


Método 3

Creamos una lista denominada lados, que contien los tres lados del triángulo obtenidos aleatoriamente. Ordenamos la lista, de esta forma sabemos que el último valor de la lista será el mayor. La ventaja que tiene este procedimiento es que en el condicional if solo tenemos que analizar la condición c<(a+b) puesto que ya sabemos que c es el lado mayor. También tiene otra ventaja en el elif del isósceles ya que solo analizamos a==b y b==c. No será necesario analizar a==c ya que los valores están ordenados.

import random
random.seed()
a=random.randint(1,100)
b=random.randint(1,100)
c=random.randint(1,100)
lados=[a,b,c]
lados.sort()
a=lados[0]
b=lados[1]
c=lados[2]
print(lados)
if c<(a+b):
  print('Si es factible con esos lados.')
  if a==b==c:
    print('El triángulo es equilatero.')
  elif a==b or b==c:
    print('El triángulo es isósceles.')
  else:
    print('El triángulo es escaleno.')
else:
  print('No es factible con esos lados.')

1 comentario:

  1. Menos líneas == mejor:

    a=list(map(int,input().split()))
    print('No existe'if max(a)*2>=sum(a)else['Equilátero','Isósceles','Escaleno'][len(set(a))-1])

    ResponderEliminar