3.2 Números
En esta sección veremos los tipos de datos númericos que ofrece Python centrándonos en booleanos, enteros y flotantes.
George Boole es considerado como uno de los fundadores del campo de las ciencias de la computación y fue el creador del Álgebra de Boole que da lugar, entre otras estructuras algebraicas, a la Lógica binaria. En esta lógica las variables sólo pueden tomar dos valores discretos: verdadero o falso.
El tipo de datos bool proviene de lo explicado anteriormente y admite dos posibles valores:
- True que se corresponde con verdadero (y también con 1 en su representación numérica).
- False que se corresponde con falso (y también con 0 en su representación numérica). Veamos un ejemplo de su uso:
La primera variable is_opened está representando el hecho de que algo esté abierto, y al tomar el valor True podemos concluir que sí. La segunda variable has_sugar nos indica si una bebida tiene azúcar; dado que toma el valor False inferimos que no lleva azúcar.
Los números enteros no tienen decimales pero sí pueden contener signo y estar expresados en alguna base distinta de la usual (base 10).
Literales enteros
Veamos algunos ejemplos de números enteros:
Dos detalles a tener en cuenta:
- No podemos comenzar un número entero por 0.
- Python permite dividir los números enteros con guiones bajos _ para clarificar su lectura/escritura. A efectos prácticos es como si esos guiones bajos no existieran.
Operaciones con enteros
A continuación se muestra una tabla con las distintas operaciones sobre enteros que podemos realizar en Python:
Veamos algunas pruebas de estos operadores:
Es de buen estilo de programación dejar un espacio entre cada operador. Además hay que tener en cuenta que podemos obtener errores dependiendo de la operación (más bien de los operandos) que estemos utilizando, como es el caso de la división por cero.
Igualmente es importante tener en cuenta la prioridad de los distintos operadores:
Ejemplos de prioridad de operadores:
Asignación aumentada
Python nos ofrece la posibilidad de escribir una asignación aumentada mezclando la asignación y un operador.
Supongamos que disponemos de 100 vehículos en stock y que durante el pasado mes se han vendido 20 de ellos. Veamos cómo sería el código con asignación tradicional vs. asignación aumentada:
Estas dos formas son equivalentes a nivel de resultados y funcionalidad, pero obviamente tienen diferencias de escritura y legibilidad. De este mismo modo, podemos aplicar un formato compacto al resto de operaciones:
Estas dos formas son equivalentes a nivel de resultados y funcionalidad, pero obviamente tienen diferencias de escritura y legibilidad. De este mismo modo, podemos aplicar un formato compacto al resto de operaciones:
Módulo
La operación módulo (también llamado resto), cuyo símbolo en Python es %, se define como el resto de dividir dos números. Veamos un ejemplo para enteder bien su funcionamiento:
Exponenciación
Para elevar un número a otro en Python utilizamos el operador de exponenciación **:
Se debe tener en cuenta que también podemos elevar un número entero a un número decimal. En este caso es como si estuviéramos haciendo una raíz. Por ejemplo:
Ejercicio
Una ecuación de segundo grado se define como ax2 + bx + c = 0, y (en determinados casos) tiene dos soluciones:
Dados los coeficientes a=4, b=-6 y c=2 calcule sus dos soluciones. Tenga en cuenta subdividir los cálculos y reutilizar variables (por ejemplo el discriminante).
La solución para los valores anteriores es:
- x1 = 1
- x2 = 0.5
Recuerde que la raíz cuadrada se puede calcular como la exponenciación a 1.
Puede comprobar los resultados para otros valores de entrada con esta aplicación para resolver ecuaciones cuadráticas.
Valor absoluto
Python ofrece la función abs() para obtener el valor absoluto de un número:
Límite de un entero
Nivel avanzado
¿Cómo de grande puede ser un int en Python? La respuesta es de cualquier tamaño. Por poner un ejemplo, supongamos que queremos representar un centillón. Este valor viene a ser un «1» seguido por ¡600 ceros! ¿Será capaz Python de almacenarlo?