Durante esta actividad, los alumnos serán capaces de:
NOTA: La siguiente actividad se puede realizar de manera individual o en parejas.
Crea un archivo fuente llamado practica4.py
.
Coloca en la parte superior de este archivo el siguiente comentario reemplazando los datos ficticios con tus datos personales (matrícula y nombre):
# Autores: # A01166611 Pepper Pots # A01160611 Anthony Stark # # Descripción de la práctica. # # 24 de septiembre, 2019. . . (El resto del programa va aquí) .
En este mismo archivo escribe en Python las funciones que se describen a continuación. Cada función debe incluir al inicio una cadena de documentación que describa brevemente el comportamiento de la función seguido de todos los casos de prueba indicados en la descripción del problema. Por ejemplo:
def raiz_cuadrada_entera(n): """ Devuelve la raíz cuadrada entera de n. >>> raiz_cuadrada_entera(4) 2 >>> raiz_cuadrada_entera(20) 4 >>> raiz_cuadrada_entera(70) 8 >>> raiz_cuadrada_entera(0) 0 >>> isinstance(raiz_cuadrada_entera(0), int) True """ raiz_cuadrada = n ** 0.5 truncado = int(raiz_cuadrada) return truncado
Coloca al final del archivo y una sola vez el siguiente código con el fin de que las pruebas se ejecuten de manera automática al momento de correr el programa:
if __name__ == '__main__': import doctest doctest.testmod()
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
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
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
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
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
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
Todas tus funciones deben estar contenidas en el archivo practica4.py
.
Para entregar el archivo practica4.py
, ingresa los siguientes datos:
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.