miércoles, 22 de mayo de 2024

Lenguajes. Python.

Funciones numéricas en Python

Vamos a dedicar una serie de entradas a hablar de las principales funciones propias (built-in functions) asociadas al manejo de datos, empezando por los datos numéricos.


La función int() permite obtener el valor numérico de tipo entero (integer) que le pasemos como parámetro, sea éste un dato alfanumérico o uno numérico real. 

int("24") -> devuelve 24

int(24.234) -> devuelve 24

Estos son, posiblemente, los usos más frecuentes de esta función (especialmente la de convertir a entero un dato alfanumérico), pero no los únicos, ya que int(x) cuenta en realidad con dos parámetros...

int(x, base = 10)  

... lo que permite utilizar int() también para realizar cambios de base en los números pasados como primer parámetro: int("24",16) -> Devuelve 36

Este no es un uso frecuente de la función, pero tampoco muy conocido, ya que normalmente empleamos int() con un único parámetro, pues si trabajamos en base 10 no es necesario especificar la base con la que se trabaja, como podemos ver en los dos primeros ejemplos.

La función eval() sirve para convertir una cadena alfanumérica que representa un número real en un número real, algo que no puede hacer la función int(). 

eval("23.23") -> devuelve 23.23

int("23.23") -> devuelve error (ValueError: invalid literal for int() with base 10: '23.23')

Si queremos convertir a valor numérico y extraer la parte entera de una cadena alfanumérica que representa un número real deberemos utilizar ambas funciones anidadas: int(eval("23.23")) -> Devuelve 23

En resumen, se puede decir que ambas funciones se complementan, resolviendo una lo que no le está permitido a la otra, por lo que es conveniente saber diferenciar las situaciones en las que podemos usar una u otra, o cuando es conveniente utilizar ambas (1).

Otra función numérica que nos interesa conocer es round(), que como su nombre indica, nos permite redondear un número real a un número determinado de decimales. Esta función dispone de dos parámetros de entrada, aunque el segundo es opcional: round(number,ndigits). El primer parámetro es el del número a redondear, y el segundo el número de dígitos decimales que tendrá dicho número una vez redondeado. En caso de no utilizar este segundo parámetro, el número real se trunca a entero más próximo. Veamos algunos ejemplos:

round(123.987) -> devuelve 124 pero round(123.499) -> devuelve 123

round(123.987,2) - > devuelve 123.99 round(123.125,2) -> devuelve 123.12

Estos ejemplos muestran que los criterios del redondeo no son iguales según que circunstancias, por lo que deberemos tenerlo en cuenta a la hora de utilizar esta función: mientras que el redondeo al número natural (cuando no empleamos el segundo parámetro) tiene como límite la cifra de las décimas 5 para redondear a la unidad superior y 4 para redondear a la inferior, en el caso de indicar decimales (usando el segundo parámetro), este límite se traslada al 5 como límite de la inferior y al 6 de la superior (2). 

La siguiente función abs(), que devuelve el valor absoluto de un número entero o real, esto es: haciendo abstracción de su signo (+ vs. -). Esta función tiene un único argumento: abs(x), siendo x el valor numérico. Veamos algunos ejemplos:

abs(-123.438) -> devuelve 23.438
abs(12) -> devuelve 12
abs(-12) -> devuelve 12
abs(+12) -> devuelve 12

Las dos siguientes funciones, max() y min(), hacen referencia a conjuntos numéricos, respecto a los cuales max() identifica el valor máximo y min() el mínimo. Su peculiaridad es precisamente que hacen referencia a una colección de números separados por comas, por lo que se pueden considerar como parámetros de la función, siendo en este caso, variables en número (3).

max(23,23.54,24,23.92) -> devuelve 24
min(23,23.54,24,23.92) -> devuelve 23

Podemos aquí dar por concluida la revisión de las funciones relativas a datos numéricos, ya que aunque no las hemos visto todas, sí las más importantes. En realidad faltan todas las variaciones de formato que podemos aplicar a estos datos, pero son demasiado numerosas como para pretender abarcarlas todas en esta entrada, siendo preferible hacer referencia a una fuente que las sintetiza correctamente, como Alberto Cuevas (2016:65-69).

NOTAS

(1) Alberto Cuevas (2016:61) resumen en una sencilla tabla la casuística específica de cada una de estas funciones.
(2) Se debe destacar que esta diferencia se produce en función del uso del segundo parámetro, incluso cuando éste se especifica con el argumento 0. En este caso, además, se mantiene la apariencia de número real, con presencia de un decimal (el 0). round(123.499,0) -> devuelve 123.0
(3) Los números pueden ser indistintamente positivos o negativas, enteros o reales. Al igual que en el resto de las funciones, los números reales emplean el punto para separar la parte entera de la decimal. Esto es importante recordarlo para evitar errores de interpretación, especialmente en las funciones que emplean más de un parámetro, ya que los parámetros se separar mediante comas, lo que puede dar lugar a confusiones. 

No hay comentarios:

Publicar un comentario

Comenta esta entrada