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.
Excelente curso!!!!! bien explicado. Es lo máximo, excelente!!!!
Excelente curso, gracias Master
Trabajazo!! muchísimas gracias. Lo explicas todo como nadie.
Hola, gracias por tu curso, pero una pregunta, los datos tipo bytes faltn no?
Hola, aquí solo se dan los tipos de datos primitivos.
Supongo que te refieres a bytes() y bytearray(). Esto lo dejo para más adelante en el curso.
Si, me refería a eso, muchas gracias!!