Tipos de datos primitivos, conversiones y errores  – 100 días de Python #2

Tipos de datos primitivos, conversiones y errores – 100 días de Python #2

En este segundo día vas a aprender los tipos de datos primitivos de Python, conversiones y mucho más. Aquí tienes el contenido del segundo día del curso.

Tipos de datos básicos

Strings

Los strings (str en Python) son un tipo de dato que utilizamos para almacenar cadenas de caracteres. Para que lo entiendas bien, pueden almacenar cualquier tipo de caracter, letras, números y símbolos (texto). Esto es un string:

"Esto es un string"

Los strings van siempre entre comillas simples ' ' o dobles " ". Eso los diferencia de otros tipos de datos.

"String en comillas dobles"
'String en comillas simples'

Ahora, haz una prueba. ¿Qué ocurre si ejecutas este código? ¿Por qué?

print(""Blue" es azul en español.")

Error en la consola

File "d:\tests\python\100\day2.py", line 1
print(""Blue" es azul en español.")
^^^^^^
SyntaxError: invalid syntax. Perhaps you forgot a comma?

Nos devuelve un SyntaxError (error de sintaxis) en la zona de las comillas de apertura. Esto es porque estoy utilizando comillas dobles dentro del string. Lo que hace, es que se cierre el string justo después de abrirse. Después de "Blue" se abre otro string.

Para solucionar esto, podemos utilizar comillas simples dentro de las comillas dobles, o utilizar comillas simples para el string y poner las dobles dentro.

print("'Blue' es azul en español.")
print('"Blue" es azul en español.')

Resultado en la consola

'Blue' es azul en español.
"Blue" es azul en español.

La función len()

Vamos a utilizar algo más en el código. La función len(). La cual, va a devolver el número de caracteres que tiene un string.

print(len("Amarillo"))

Resultado en la consola

8

Pues ya sabes que Python contará por tí los caracteres de los strings que quieras.

En lugar de pasarle a len() el valor literal, puedes utilizar una variable.

color = "Amarillo"

print(len(color))

Acceder a una posición del string

La ventaja de los strings, es que Python (y la mayoría de lenguajes de programación) los dividen en caracteres. Estas divisiones, permiten acceder a cada uno de los caracteres de forma individual mediante un número de posición. Probemos de acceder a la primera "A" de "Amarillo". Estas posiciones se empiezan a contar desde el cero. Por lo tanto, la primera letra de cualquier string, está en la posición 0.

color = "Amarillo"

print(color[0])

Resultado en la consola

A

Algo que también está permitido, es escribir el string literal y utilizar una posición:

print("Amarillo"[7])

Resultado en la consola

o

Integers

Los integers son el tipo de dato que representa los valores numéricos enteros. En un string, tenemos valores numéricos, pero no son operables aritméticamente hablando. Pronto te mostraré una prueba de esto.

En el siguiente código tenemos un integer. A diferencia del string, este se escribe sin las comillas.

numero_1 = 100

Suma de integers

Realicemos una suma, para ver como podemos operar con los integers.

numero_1 = 100
numero_2 = 400

print(numero_1 + numero_2)

Resultado en la consola

500

¡Estupendo! Hemos conseguido realizar la primera suma en Python ¿Te has fijado en que utilizamos el mismo operador para sumar integers y para concatenar strings?

Aquí es donde tienes que ver los strings numéricos.

String numéricos

Puesto que en los strings, podemos almacenar números, no es raro encontrarse strings que contienen solo números.

numero_1 = "100"
numero_2 = "400"

print(numero_1 + numero_2)

Resultado en la consola

100400

Lo que acaba de pasar, es que en lugar de sumar, puesto que son strings, nos concatena el valor string "100" con el "400".

Almacenar resultado de operaciones aritméticas

Podemos guardar el resultado de las operaciones aritméticas en una variable. Eso nos será útil para poder realizar operaciones y devolverle el resultado al usuario, o utilizarlo para más cosas dentro del programa.

numero_1 = 100
numero_2 = 400

resultado = numero_1 + numero_2

Resta, multiplicación y división de integers

Además de la suma, podemos realizar las operaciones aritméticas básicas de resta, multiplicación y división.

Para la resta, utiliza el operador "-":

numero_1 = 100
numero_2 = 400

resultado = numero_1 - numero_2

print(resultado)

Resultado en la consola

-300

Como puedes ver, los strings manejan correctamente si el valor es positivo o negativo.

Para la multiplicación utiliza el símbolo "*".

numero_1 = 100
numero_2 = 400

resultado = numero_1 * numero_2

print(resultado)

Resultado en la consola

40000

Para la división, utiliza el operador "/":

numero_1 = 100
numero_2 = 400

resultado = numero_1 / numero_2

print(resultado)

Resultado en la consola

0.25

El resultado que acaba de aparecer, es un float. Tipo de dato que ahora veremos.

Exponentes

Pasemos a ver otro operador aritmético más. El operador de exponente "**", el cual va a permitir calcular potencias, es decir un número multiplicado por si mismo un número "x" de veces.

print(2**10)

Resultado en la consola

1024

Paréntesis en las operaciones aritméticas

Al igual que hacemos con las matemáticas corrientes, podemos realizar operaciones en Python con paréntesis. Estos sirven para establecer prioridad de unas operaciones sobre otras. La multiplicación y la división, por defecto, tiene más prioridad que la suma y la resta. Aquí tienes un ejemplo con y sin paréntesis:

operacion_1 = 10 + 56 * 89 - 3 / 2
operacion_2 = 10 + 56 * (89 - 3) / 2

print(operacion_1)
print(operacion_2)

Resultado en la consola

4992.5
2418.0

Ambas operaciones son iguales, solo cambia la prioridad de la resta en la segunda operación gracias a los paréntesis.

Barras bajas para representar números muy grandes

Cuando escribimos números muy grandes, es difícil sin cerrar un poco los ojos y contar los números, saber el valor de ese número. ¿Sabes decirme el valor de este número? Es un poco complicado de ver. Al menos, si tuviera puntos, podríamos ver donde están los miles, los millones, etc.

numero_1 = 4897567800678543558

Python nos permite algo muy peculiar. Se trata de utilizar las barras bajas como si fueran los puntos para separar las partes del número. En la ejecución, estas barras se ignoran.

numero_1 = 4_897_567_800_678_543_558

print(numero_1)

Resultado en la consola

4897567800678543558

Float

Los tipos de dato float (coma flotante) sirven para representar los valores con números decimales. Fíjate en el resultado de la división, es un float obtenido de dos integer. Los float se escriben con un punto. A la izquierda del punto la parte entera. A la derecha la parte decimal.

numero_1 = 56.879

Estos float, se pueden operar junto con integers, las normas son las mismas.

Boolean

El tipo de dato boolean (booleano en español) es un tipo de dato que solo puede recibir dos valores. O bien es verdadero (true) o bien es falso (false).

Estos nos van a servir un poco más adelante, cuando lleguemos al día de los condicionales.

¿Cómo ver el tipo de dato en Python?

Algo que nos va a ser de gran utilidad en un futuro cercano, es la función type(). Esta nos va a servir para devolver el tipo de dato que tiene una variable.

numero_1 = 4
numero_2 = 769.97
texto = "Soy un string."
decision = True


print(type(numero_1))
print(type(numero_2))
print(type(texto))
print(type(decision))

Resultado en la consola

<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>

Números en la función len()

La función len() funciona con strings, si utilizamos con ella números, nos va a dar un error.

numero = 897890654565

print(len(numero))

Error en la consola

File "d:\tests\python\100\day2.py", line 3, in
print(len(numero))
TypeError: object of type 'int' has no len()

Nos aparece un error de tipo TypeError. Este error se debe a un tipo de dato que la función no esperaba. Entonces, ¿no se pueden contar con len() el número de dígitos de un número?

Si se puede. Podríamos hacerlo de varias formas. Una es poner el número como string:

numero = "897890654565"

print(len(numero))

Resultado en la consola

12

Sin embargo, ahora no podemos utilizar ese número para operaciones aritméticas.

Transformar integer en string

Tenemos disponible la función str() que transforma un valor a string. En este caso, vamos a mantener el núemero como integer y lo transformaremos en otra variable. Así tendremos los dos tipos de dato y podremos utilizar uno para operar y otro como string, para cosas que lo requieran como len().

numero = 897890654565

digitos = str(numero)

print(len(digitos))

Resultado en la consola

12

Transformar string en integer

De la misma forma que transformamos de integer a string, podemos hacerlo a la inversa.

En este ejemplo, transformo directamente sobre la variable "suma" los dos valores string. Si no lo hiciera, estos en lugar de sumarse, se concatenarían.

La conversión se puede realizar en variables a parte, hay mucha flexibilidad.

numero_1 = "10"
numero_2 = "50"

suma = int(numero_1) + int(numero_2)

print(suma)

Resultado en la consola

60

Transformar datos a float

En el siguiente código encontramos un problema. Al intentar transformar estos números a int, me da el siguiente error:

numero_1 = "10.57"
numero_2 = "50.9"

suma = int(numero_1) + int(numero_2)

print(suma)

Error en la consola

File "d:\tests\python\100\day2.py", line 4, in
suma = int(numero_1) + int(numero_2)
ValueError: invalid literal for int() with base 10: '10.57'

Se trata de otro tipo de error más. Un ValueError. Este error se obtiene cuando pasamos un valor erróneo a cierto tipo de dato. El int, no está preparado para guardar float, por lo tanto, debemos cambiar la conversión de int() a float(), ya que son números decimales.

numero_1 = "10.57"
numero_2 = "50.9"

suma = float(numero_1) + float(numero_2)

print(suma)

Resultado en la consola

61.47

Recuerda, que siempre que tengas dudas sobre el valor que contiene una variable (a veces no lo sabrás a simple vista como en estos ejemplos básicos), utiliza siempre la función type(). Tener esto en cuenta, te ahorrara mucho tiempo buscando errores en el futuro.

Truncamiento de números

Podemos realizar un truncamiento de números convirtiendo tipos de datos. En el siguiente código tenemos dos números decimales. Si realizamos una operación con ellos, nos devuelve un valor decimal, aunque sea .0.

numero_1 = 10.60
numero_2 = 10.40

suma = numero_1 + numero_2

print(suma)

Resultado en la consola

21.0

Si transformamos el valor del resultado a int(), vamos a truncar los decimales, ya que el tipo de dato se convierte en integer y no admite decimales, los perdemos. Esto es útil cuando solo quieres valores enteros.

numero_1 = 10.60
numero_2 = 10.40

suma = numero_1 + numero_2

trunca_suma = int(suma) 

print(trunca_suma)

Resultado en la consola

21

Redondeo de números

En Python tenemos una función muy útil llamada round(), la cual, nos va a permitir redondear valores numéricos.

En la siguiente multiplicación obtenemos muchos decimales:

multiplicacion = 7.5678 * 6.943534

print(multiplicacion)

Resultado en la consola

52.5472766052

Si utilizamos round(), va a redondear a entero, a la alta o a la baja, dependiendo de los decimales.

multiplicacion = 7.5678 * 6.943534

print(round(multiplicacion))

Resultado en la consola

53

Por si no sabes que es el redondeo a la alta o a la baja, aquí tienes un ejemplo:

print(round(7.3))
print(round(7.5))
print(round(7.7))

Resultado en la consola

7
8
8

7.3 está más cerca del 7 que del 8, así, que se redondea a la baja (7).

7.5 está en el medio. En este caso se redondea a la alta (8).

7.7 está pasado del medio, así que se redondea a la alta (8).

Los rangos son:

De .0 a .4 a la baja y de .5 a .9 a la alta.

¿Y si no queremos perder todos los decimales y dejar unos cuantos?

round() permite añadir un segundo argumento aparte del valor. Le indicaremos la cantidad de decimales que queremos:

multiplicacion = 7.5678 * 6.943534

print(round(multiplicacion, 2))

Resultado en la consola

52.55

De todas formas, el redondeo lo sigue realizando con los decimales que le quedan.

El operador de floor division

Este operador "//" realiza divisiones y redondea el resultado al valor entero más cercano.

Veamos una división primero:

division = 10 / 3

print(division)

Resultado en la consola

3.3333333333333335

Ahora, hagamos la misma división, pero con el nuevo operador:

division = 10 // 3

print(division)

Resultado en la consola

3

El operador módulo

Este operador módulo (%) realiza también la división, pero en lugar de devolvernos el resultado, nos devuelve el resto.

division = 10 %% 3

print(division)

Resultado en la consola

1

Operadores de asignación de incremento y decremento

Hasta ahora, has visto el operador de asignación "=", el que utilizamos para asignar valores a las variables. No obstante, tenemos más variantes de este operador. Hay muchos, así que en esta ocasión, solo veremos el incremento y decremento.

Operador +=

Este operador asigna un incremento determinado a una variable:

numero_1 = 10

numero_1 += 10

print(numero_1)

Resultado en la consola

20

Si utilizamos el operador "=" sin el "+" para poner esta variable a 20, o le tendríamos que dar literalmente el valor de 20 o hacer esto:

numero_1 = 10

numero_1 = numero_1 + 10

print(numero_1)

Resultado en la consola

20

Esta forma, no es incorrecta, pero si menos óptima.

Operador -=

Este operador hace los contrario que el anterior, decrementa valores a sí misma.

numero_1 = 100

numero_1 -= 25

print(numero_1)

Resultado en la consola

75

Formateo de strings

Hay una cosa importante que debo detallar antes de continuar con el siguiente capítulo. El formateo de strings.

Para que aprecies su utilidad, vamos a crear una frase con un string y un valor numérico.

suma = 90 + 67

print("El resultado de la suma es: " + suma)

Error en la consola

File "d:\tests\python\100\day2.py", line 3, in
print("El resultado de la suma es: " + suma)
TypeError: can only concatenate str (not "int") to str

Esto tan simple, nos devuelve un TypeError que dice que solo se puede concatenar un string con otro string, integers no.

Con lo que sabes hasta ahora, podrías hacer esto:

suma = 90 + 67

print("El resultado de la suma es: " + str(suma))

Resultado en la consola

El resultado de la suma es: 157

Esto está bien, pero no es para nada óptimo, ya que cada vez, tendremos que utilizar una función que consume recursos para transformar el tipo de dato.

En su lugar, podemos mostrar un valor literal utilizando un prefijo "f".

suma = 90 + 67

print(f"El resultado de la suma es: {suma}")

Resultado en la consola

El resultado de la suma es: 157

Con esto, ya no necesitas ni utilizar la función ni concatenar. Podrás ir añadiendo todas las variables que quieras dentro de un mismo f"".

Tienes unos cuantos ejercicios con soluciones y el proyecto del día en este enlace.

4 comentarios en «0»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Arduino uno Entrada anterior Instalación y uso de EasyBuzzer para Arduino
Entrada siguiente Las direcciones IPv4