Pens. comp. para ingeniería

Práctica #4: Estatutos condicionales

Objetivo

Durante esta actividad, los alumnos serán capaces de:


Instrucciones

NOTA: La siguiente actividad se puede realizar de manera individual o en parejas.

Problemas

  1. La función signo recibe como argumento un número n. Devuelve -1 si n es negativo, 1 si n es positivo mayor que cero, o 0 si n es igual a cero.

    Pruebas:

    >>> signo(-5)
    -1
    >>> signo(10)
    1
    >>> signo(0)
    0
    >>> isinstance(signo(0), int)
    True
    
  2. El IMC (índice de masa corporal) se utiliza para determinar si la proporción de peso y altura de una persona es adecuada. El IMC se puede calcular usando la siguiente fórmula:

    $$ \textit{IMC} = \frac{\textit{peso}}{\textit{altura}^2} $$

    Donde \(\textit{peso}\) está en kilogramos y \(\textit{altura}\) en metros. La siguiente tabla muestra cómo se clasifican los diferentes rangos de IMC:

    Rango IMC Descripción
    IMC < 20 'bajo peso'
    20 ≤ IMC < 25 'normal'
    25 ≤ IMC < 30 'obeso 1'
    30 ≤ IMC < 40 'obeso 2'
    40 ≤ IMC 'obeso 3'

    La función indice_de_masa_corporal recibe dos argumentos: peso y altura. Devuelve una cadena de caracteres que represente la descripción del IMC correspondiente calculada a partir de sus entradas.

    Pruebas:

    >>> indice_de_masa_corporal(45, 1.7)
    'bajo peso'
    >>> indice_de_masa_corporal(55, 1.5)
    'normal'
    >>> indice_de_masa_corporal(76, 1.7)
    'obeso 1'
    >>> indice_de_masa_corporal(81, 1.6)
    'obeso 2'
    >>> indice_de_masa_corporal(120, 1.6)
    'obeso 3'
    >>> isinstance(indice_de_masa_corporal(120, 1.6), str)
    True
    
  3. La función max3 recibe como argumentos tres números: a, b y c. Devuelve el mayor de los tres números. No debes utilizar las funciones predefinidas max, sorted o similar de Python.

    Pruebas:

    >>> max3(-34, 25, 16)
    25
    >>> max3(-34, -25, -16)
    -16
    >>> max3(34, 25, 16)
    34
    >>> isinstance(max3(34, 25, 16), int)
    True
    
  4. La función sort3 recibe como argumentos tres números: a, b y c. Devuelve una tupla con los mismos tres valores pero en orden ascendente. No debes utilizar la función predefinidas sorted o similar de Python.

    Pruebas:

    >>> sort3(-34, 16, 25)
    (-34, 16, 25)
    >>> sort3(-34, 25, 16)
    (-34, 16, 25)
    >>> sort3(16, -34, 25)
    (-34, 16, 25)
    >>> sort3(16, 25, -34)
    (-34, 16, 25)
    >>> sort3(25, -34, 16)
    (-34, 16, 25)
    >>> sort3(25, 16, -34)
    (-34, 16, 25)
    >>> sort3(25, 25, 25)
    (25, 25, 25)
    >>> sort3(-25, 25, 25)
    (-25, 25, 25)
    >>> sort3(25, -25, 25)
    (-25, 25, 25)
    >>> sort3(25, 25, -25)
    (-25, 25, 25)
    >>> isinstance(sort3(-25, 25, 25), tuple)
    True
    
  5. La función generacion recibe como argumento un entero y. Devuelve una cadena de caracteres que indica la generación a la que pertenece una persona nacida en el año y. Utiliza la información de la siguiente tabla:

    Año de nacimiento Nombre de la generación
    1945 o anterior 'Generación silenciosa'
    Entre 1946 y 1964 'Baby Boomers'
    Entre 1965 y 1980 'Generación X'
    Entre 1981 y 2000 'Generación Y o Millenials'
    2001 y posterior 'Generación Z o Centennials'

    Pruebas:

    >>> generacion(1939)
    'Generación silenciosa'
    >>> generacion(1945)
    'Generación silenciosa'
    >>> generacion(1946)
    'Baby Boomers'
    >>> generacion(1964)
    'Baby Boomers'
    >>> generacion(1965)
    'Generación X'
    >>> generacion(1977)
    'Generación X'
    >>> generacion(1980)
    'Generación X'
    >>> generacion(1981)
    'Generación Y o Millenials'
    >>> generacion(2000)
    'Generación Y o Millenials'
    >>> generacion(2001)
    'Generación Z o Centennials'
    >>> generacion(2019)
    'Generación Z o Centennials'
    >>> isinstance(generacion(2019), str)
    True
    
  6. La función llamada tipo_de_triangulo recibe como argumento tres tuplas: p1, p2 y p3. Cada una de estas tuplas corresponde a un punto en un plano de coordenadas bidimensional. El punto p1 es la tupla (x1, y1), el punto p2 es la tupla (x2, y2), y el punto p3 es la tupla (x3, y3). La función devuelve una cadena que indique qué tipo de triángulo conforman los tres puntos. Dicha cadena puede ser:

    • 'rectángulo'
    • 'equilátero'
    • 'isósceles'
    • 'escaleno'

    Considera que:

    • La distancia \(d\) entre dos puntos \((x_1, y_1)\) y \((x_2, y_2)\) se calcula con la siguiente fórmula:

      $$ d = \sqrt{(x_2-x_1)^2 + (y_2 - y_1)^2} $$
    • Un triángulo es rectángulo si se cumple el teorema de Pitágoras. Es decir, para un triángulo con lados de longitud \(a\), \(b\) y \(c\) (donde \(a\) y \(b\) son menores que \(c\)):

      $$ a^2 + b^2 = c^2 $$
    • Un triángulo es equilátero si todos sus lados son iguales.

    • Un triángulo es isósceles si solo dos de sus lados son iguales.

    • Un triángulo es escaleno si todos sus lados son diferentes.

    • IMPORTANTE: Dadas las imprecisiones que pueden ocurrir al comparar dos números flotantes, en lugar de usar los operadores == y != se debe usar la función isclose, tal como se muestra en los siguientes ejemplos:

      # No recomendable:
      if f == g:
          pass
      
      # Preferible:
      if isclose(f, g):
          pass
      
      # No recomendable:
      if h != i:
          pass
      
      # Preferible:
      if not isclose(h, i):
          pass
      

      Para usar la función isclose se debe añadir la siguiente línea al inicio del archivo fuente:

      from math import isclose
      

    Pruebas:

    >>> tipo_de_triangulo((1, 2), (2, 3), (4, 2))
    'escaleno'
    >>> tipo_de_triangulo((1, 1), (2, 3), (3, 1))
    'isósceles'
    >>> tipo_de_triangulo((1, 3), (1, 5), (1 + 3 ** 0.5, 4))
    'equilátero'
    >>> tipo_de_triangulo((5, 5), (3, 5), (3, 1))
    'rectángulo'
    >>> isinstance(tipo_de_triangulo((5, 5), (3, 5), (3, 1)), str)
    True
    

¿Qué se debe entregar?

Todas tus funciones deben estar contenidas en el archivo practica4.py.

Instrucciones para subir archivo

Para entregar el archivo practica4.py, ingresa los siguientes datos:

Solicitar NIP

Si la práctica fue desarrollada por un equipo de dos personas, basta que una persona la entregue.

Fecha límite: Martes, 24 de septiembre.