Introducción
¿Qué es Python?
Es un lenguaje de programación de código abierto, orientado a objetos, simple y fácil de entender. Tiene una sintaxis sencilla que cuenta con una vasta biblioteca de herramientas. Es interpretado con tipado dinámico, multiparadigma y multiplataforma.
Principales usos
- Inteligencia artificial
- Big Data
- Data Science
- Frameworks de pruebas
- Desarrollo Web
- Bots 😍
- Etc
¿Qué es una variable?
Las variables se pueden entender como "cajas" en las que se guardan datos, pero en Python las variables son "etiquetas" que permiten hacer referencias a los datos (que se guardan en "cajas" llamadas objetos).
Python es un lenguaje de programación orientado a objetos y su modelo de datos también está basado en objetos.
Python es case-sensitive. Por lo que va a distinguir las mayúsculas y minúsculas de las variables.
Para cada dato que aparece en un programa, Python crea un objeto que lo contiene. Cada objeto tiene:
- Un identificador único (un número entero, distinto para cada objeto). Esto permite a Python referirse al objeto sin ambigüedades.
- Un tipo de datos (entero, decimal, etc.) Esto le permite saber qué operaciones puede hacerse con el dato.
- Un valor (el propio dato).
Precedencia
El orden normal de las operaciones es de izquierda a derecha, evaluando en orden los siguientes operadores:
- Términos entre paréntesis
- Potenciación y raíces
- Multiplicación y división
- Suma y resta
Tipos de datos
Enteros
Python distingue entre enteros (int - long), números de punto flotante (float) y números complejos (complex). A diferencia de otros lenguajes de programación, los números tipo int en Python 3 pueden ser pequeños o grandes, no tienen límite alguno.
Los números complejos son los que tienen parte imaginaria y es muy probable que no lo vayas a necesitar nunca. Se almacenan usando reales, ya que es una extensión de dichos números.
Cadena de texto
Las cadenas o strings (str) son un tipo de dato compuesto por secuencias de caracteres que representan texto. Estas cadenas se delimitan mediante el uso de comillas simples o dobles.
"Esto es una cadena de texto"
'Esto es una cadena de texto también'
""" También esto es una cadena de texto """
Los Strings son inmutables, esto significa que no podemos sustituir ninguno de sus caracteres individualmente.
Cada uno de los caracteres de una cadena (en donde se incluyen los espacios y símbolos especiales), tienen asignado un índice. Este nos permite seleccionar su carácter asociado haciendo referencia a él entre corchetes en la variable que lo almacena.
El índice comienza en 0 para el primer carácter y en caso de buscar el último corresponde al -1.
Slicing
Nos permite seleccionar una parte de la cadena en base a la notación [inicio:fin:paso]
.
Inicio: Es el índice del primer carácter de la porción de la cadena que queremos seleccionar.
Fin: Es el índice del último carácter no incluido de la porción de la cadena que queremos seleccionar.
Paso: Indica cuántos caracteres seleccionamos entre las posiciones de inicio y fin.
cadena = 'Python'
print(cadena[2:6:2])
>>> to
cadena = 'Python'
print(cadena[0:4:1])
>>> Pyth
Si utilizamos [::-1] sobre una cadena de texto, esta nos retorna la cadena al revés.
cadena = “acitámetaM ,5.8 ,otipeP ordeP”
cadena_reverse = cadena[::-1]
print(cadena_reverse)
>>>Pedro Pepito, 8.5, Matemática
Listas y Tuplas
Las listas son un tipo de dato que nos permite almacenar variables, números, cadenas de textos, otras listas, etc. Dichos valores, deben estar separados por comas dentro de los corchetes.
Al igual que los Strings las listas tienen un índice y se puede utilizar el slicing para recorrerlos con la ventaja de que, en este caso, si podemos modificar los valores de sus índices ya que las listas son mutables.
# Consulta por Slicing
lista = [10, 'Pedro', '3', 4]
print(lista[-2:])
>>> ['3',4]
# Modificación por Slicing
letras = ['a','b','c','d','e','f']
letras[:3] = ['A','B','C']
print(letras)
>>> ['A', 'B', 'C', 'd', 'e', 'f']
# Borrado por Slicing
letras[:3] = []
print(letras)
>>> ['d', 'e', 'f']
Las tuplas son similares a las listas, con la diferencia de que estas son inmutables, por lo que no podremos modificarlas una vez instanciadas. Son de SOLO LECTURA.
Diccionarios
Es una colección no ordenada de objetos (no posee un índice) la cúal para identificar un elementro dentro de esta se utiliza una clave y su contenido es el valor. Podemos modificar sus valores ingresando desde su clave.
colores = {"amarillo": "yellow", "azul": "blue"}
print(colores["amarillo"])
>>> yellow
colores["azul"] = "orange"
print(colores["azul"])
>>> orange
Si necesitamos agregar nuevos valores al diccionario, basta con agregarlos de la siguiente manera:
colores = {"amarillo": "yellow", "azul": "blue"}
colores["rojo"] = "red"
print(colores)
>>> {'amarillo': 'yellow', 'azul': 'blue', 'rojo': 'red'}
colores.update("verde": "green", "negro": "black")
print(colores)
>>>
Conjuntos
Es una colección no ordenada de objetos únicos (no hay elementos duplicados). En ellos se nos permite guardar enteros, cadenas de texto y variables de forma homogenea y heterogenea pero no objetos mutables (listas, diccionarios u otros conjuntos).
Si bien son mutables como las listas, una diferencia con ellas es que en los conjuntos no podemos utilizar slicing ni manejar índices, así como tampoco puede tener valores duplicados.
numeros = {1,2,3,4}
palabras = {"Hola", "como", "estas", "?"}
heterogeneo = {1, 2, "Hola", 4}
conjunto_vacio = set()
Condicionales
If / Elif / Else
Al utilizar el condicional if le indicamos a Python que queremos ejecutar una porción de código siempre y cuando se cumplan las condiciones dadas.
De no cumplirse la primera condición, elif nos permite hacer lo mismo ampliando más las condiciones posibles.
Y, en el caso de que ninguna condición sea verdadera, se ejecutará el else como porción de código por defecto.
A = 30
if A < 10:
print('Es menor a 10')
elif A < 15:
print('Es menor a 15')
elif A < 20:
print('Es menor a 20')
else:
print('Es mayor a 20')
Match - Case
A partir de la versión 3.10 contamos con una sentencia Switch para utilizar.
select = input("Seleccione una opción: ")
match select:
case "1":
print("Carguemos una nueva receta.")
case "2":
print("Veamos las recetas creadas.")
case _:
print("No es una opción válida.")
Iteraciones
For
Se utiliza para recorrer un objeto iterable, como una lista o tupla y ejecutar una porción de código sobre ellos.
lista = [1,2,3,4,5]
for valor in lista:
print('Soy un ítem de la lista y valgo', valor)
### range(inicio,fin,pasos)
for valor in range(10,40,2):
print('Soy un ítem de la lista y valgo', valor)
While
Nos permite repetir un fragmento de código mientras una condición lógica sea Verdadera.
num = 0
while num <= 3:
print(num)
num += 1
# El else dentro del while nos permite ejecutar una porción de código cuando se cumple la condición del while.
chance = 1
while chance <= 3:
txt = input("Escribe SI: ")
if txt == "SI":
print("Ok, lo conseguiste en el intento", chance)
break
chance += 1
else:
print("Has agotado tus tres intentos")
break
Con esta instrucción podemos cortar la ejecución de nuestro bucle.
continue
Con esta instrucción vamos a poder volver al inicio del bucle.
Operadores de pertenecia
in
Nos permite analizar si existe un fragmento dentro de un texto.
texto = "Hola Mundo"
print("Hola" in texto)
>>> True
numeros = {1,2,3,4}
print(2 in numeros)
>>> True
print(10 in numeros)
>>> False
Operadores lógicos
AND
Devuelve True si ambos operandos son verdaderos, de lo contrario, devuelve False.
OR
Devuelve True si al menos uno de los operandos es verdadero, de lo contrario, devuelve False.
NOT
Devuelve la negación lógica del operando; si el operando es True, devuelve False; si el operando es False, devuelve True.
Palabras reservadas
pass
La utilizaremos cuando queramos crear una clase, método, función, bucle o condicional, pero en el que todavía no queramos definir ningún comportamiento por lo que le indica al programa que ignore esa condición y continúe ejecutando el programa como de costumbre
del
Se utiliza para eliminar elementos de una estructura de datos o para eliminar variables.
Funciones incorporadas
Print / Input
Gracias a la función print() podemos mostrar de forma correcta las cadenas de texto (u otros objetos) en pantalla.
# Comilla simple
print('Hola Mundo')
# Comilla doble
print("Hola Mundo")
# Agregar un template string
print("""Primera línea
Segunda línea""")
Para recibir datos del exterior usamos la función input(), la cual nos permite obtener texto escrito por teclado. Al llegar el programa a dicha función, se detiene esperando que el usuario escriba algo y pulse la tecla Intro.
De forma predeterminada, input() convierte la entrada en una cadena, aunque en ella escribamos un número. Si necesitamos convertir este valor a un entero, debemos utilizar la función int()
year = int(input('¿En qué año estamos?'))
# Sin argumento
nombre = input()
print(nombre)
# Con argumento
nombre = input('¿Cómo te llamas?')
print(nombre)
type
Nos retorna el tipo de dato que estamos manipulando.
text = "Quiero volver a Neuquen a fin de año."
print(type(text))
>>> <class 'str'>
len
Nos permite conocer longitudes.
nombre = 'Brian'
print(len(nombre))
>>> 5
range
Se utiliza para generar una secuencia de números. Se puede utilizar en bucles for o para crear listas de números enteros.
range(inicio, fin, paso)
secuencia = range(5)
print(list(secuencia))
>>> [0, 1, 2, 3, 4]
secuencia = range(1, 10, 2)
print(list(secuencia))
>>> [1, 3, 5, 7, 9]
str
Convierte a un objeto al tipo de dato cadena de texto.
numero = 42
cadena = str(numero)
print(cadena)
>>> "42"
int
Convierte a un objeto al tipo de dato entero.
cadena = "42"
numero = int(cadena)
print(numero)
>>> 42
list
Convierte un iterable en una lista.
vocales = 'aeiou'
print(list(vocales))
>>> ['a','e','i','o','u']
set
Convierte un iterable a un conjunto.
vocales = ['a','e','i','o','u']
mi_set = set(vocales)
print(mi_set)
>>> {'i', 'e', 'u', 'a', 'o'}
tuple
Convierte un iterable a una tupla.
vocales = ['a','e','i','o','u']
mi_set = tuple(vocales)
print(mi_set)
>>> ('a', 'e', 'i', 'o', 'u')
dict
Sirve para crear un nuevo diccionario o para convertir otros tipos de datos en diccionarios.
lista_claves = ['a', 'b', 'c']
lista_valores = [1, 2, 3]
nuevo_diccionario = dict(zip(lista_claves, lista_valores))
print(nuevo_diccionario)
>>> {'a': 1, 'b': 2, 'c': 3}
zip
se utiliza para combinar elementos de iterables (como listas, tuplas, etc.) y crear un iterador que genera tuplas de elementos emparejados.
numeros = [1, 2, 3]
letras = ['a', 'b', 'c']
pares = zip(numeros, letras)
lista_pares = list(pares)
print(lista_pares)
>>> [(1, 'a'), (2, 'b'), (3, 'c')]
Es importante tener en cuenta que si las listas tienen longitudes diferentes, zip generará tuplas hasta la longitud del iterable más corto. Los elementos adicionales del iterable más largo se ignorarán en la combinación.
Métodos para cadenas
Upper
Convierte una cadena a mayúsculas.
cadena = "hola mundo"
cadena_mayusculas = cadena.upper()
print(cadena_mayusculas)
>>> HOLA MUNDO
Lower
Convierte una cadena a minúsculas.
cadena = "HOLA MUNDO"
cadena_minusculas = cadena.lower()
print(cadena_minusculas)
>>> hola mundo
Swapcase
Intercambia mayúsculas y minúsculas en una cadena.
cadena = "Hola Mundo"
cadena_swap = cadena.swapcase()
print(cadena_swap)
>>> hOLA mUNDO
Startswith
Verifica si una cadena comienza con un prefijo específico.
cadena = "Hola Mundo"
comienza_con_hola = cadena.startswith("Hola")
print(comienza_con_hola)
>>> True
Endswith
Verifica si una cadena termina con un sufijo específico.
cadena = "Hola Mundo"
termina_con_mundo = cadena.endswith("Mundo")
print(termina_con_mundo)
>>> True
Replace
Reemplaza parte de una cadena por otra.
cadena = "Hola Mundo"
cadena_reemplazada = cadena.replace("Mundo", "Python")
print(cadena_reemplazada)
>>> Hola Python
Capitalize
Convierte el primer carácter de una cadena a mayúscula y el resto a minúsculas.
cadena = "hola mundo"
cadena_capitalizada = cadena.capitalize()
print(cadena_capitalizada)
>>> Hola mundo
title
Convierte cada palabra en la cadena a que comience con mayúscula.
cadena = "hola mundo"
cadena_titulada = cadena.title()
print(cadena_titulada)
>>> Hola Mundo
isdigit
Verifica si todos los caracteres de la cadena son dígitos.
cadena_digitos = "12345"
es_digito = cadena_digitos.isdigit()
print(es_digito)
>>> True
Métodos para listas y tuplas
append
Disponible unicamente para listas.
Nos permite agregar un nuevo ítem al final de una lista.
letras = []
letras.append('a')
letras.append('b')
print(letras)
>>> ['a', 'b']
insert
Disponible unicamente para listas.
Insertar un elemento en una posición específica de una lista.
mi_lista = [1, 2, 3, 4]
mi_lista.insert(2, "nuevo elemento")
print(mi_lista)
>>> [1, 2, 'nuevo elemento', 3, 4]
pop
Disponible unicamente para listas.
Al contrario de append(), en este caso nos permite eliminar el último ítem de la lista. También nos permite pasar por parámetro el indice a borrar.
letras = ['a', 'b','c','d']
letras.pop()
print(letras)
>>> ['a', 'b','c']
letras.pop(0)
print(letras)
>>> [ 'b','c']
remove
Elimina un valor de la lista que le pasemos. De no existir nos retorna error.
mi_lista = [1, 2, 3, 4]
mi_lista.remove(3)
print(mi_lista)
>>> [1, 2, 4]
mi_lista = [1, 2, 3, 4]
mi_lista.remove(34)
print(mi_lista)
>>> ValueError: list.remove(x): x not in list
count
Disponible para listas, tuplas y cadenas de caracteres.
Nos permite contar cuantas veces nuestro ítem se repite en la lista.
numeros = [1,1,3,2,5,2,1]
print(numeros.count(1))
>>> 3
index
Disponible para listas, tuplas y cadenas de caracteres.
Nos permite buscar nuestro ítem y nos retorna el índice en el que se encuentra. En caso de haber varios valores iguales, solo nos retornará el primero que encuentre.
letras = ['a','b','c','a']
print(letras.index('a'))
>>> 0
Si se intenta buscar un valor fuera de lista, retornará un error.
sort
Ordena automáticamente los ítems de una lista por su valor de menor a mayor o a la inversa.
mi_lista = [5, 2, 8, 1, 3]
mi_lista.sort()
print(mi_lista)
>>> [1, 2, 3, 5, 8]
mi_lista = [5, 2, 8, 1, 3]
mi_lista.sort(reverse=True)
print(mi_lista)
>>> [8, 5, 3, 2, 1]
No puede ordenar listas que tenga almacenado diferentes tipos de datos.
extend
Nos sirve para agregar los elementos de una lista al final de otra lista
lista_1 = [1, 2, 3]
lista_2 = [4, 5, 6]
lista_1.extend(lista_2)
print(lista_1)
>>> [1, 2, 3, 4, 5, 6]
Métodos para conjuntos
add
Nos permite agregar un nuevo ítem al conjunto así como también realizar operaciones aritméticas dentro de este.
numeros = {1,2,3,4}
numeros.add(5)
numeros.add(3*2)
print(numeros)
>>> {1, 2, 3, 4, 5, 6}
update
Nos sirve para insertar múltiples elementos iterables (tuplas, string, listas, etc).
numeros = {1,2,3,4}
numeros.update([5,6,7,8])
numeros.update(range(9,12))
print(numeros)
>>> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
discard
Nos permite descartar un valor dentro del conjunto, en caso de que dicho valor no exista se omite la operación.
numeros = {1,2,3,4}
numeros.discard(2)
numeros.discard(10)
print(numeros)
>>> {1, 3, 4}
remove
Es similar al discard, pero en caso de que no exista el valor a remover nos arroja un error.
clear
Nos sirve para eliminar todos los valores del conjunto.
numeros = {1,2,3,4}
numeros.clear()
print(numeros)
>>> set()
pop
Remueve del conjunto un elemento aleatorio y lo retorna. Por lo general suele ser el primero, pero no deberíamos confiarnos ya que es una colección desordenada.
numeros = {1,2,3,4}
numeros.pop()
numeros.pop()
print(numeros)
>>> {3, 4}
Métodos para diccionarios
get
Retorna el valor asociado con la clave key en el diccionario. Si la clave no existe, retorna default (por defecto None si no se proporciona).
mi_diccionario = {'a': 1, 'b': 2, 'c': 3}
valor = mi_diccionario.get('a')
print(valor)
>>> 1
keys
Retorna una vista que contiene todas las claves del diccionario.
mi_diccionario = {'a': 1, 'b': 2, 'c': 3}
claves = mi_diccionario.keys()
print(claves)
>>> dict_keys(['a', 'b', 'c'])
values
Retorna una vista que contiene todos los valores del diccionario
mi_diccionario = {'a': 1, 'b': 2, 'c': 3}
valores = mi_diccionario.values()
print(valores)
>>> dict_values([1, 2, 3])
items
Retorna una vista que contiene tuplas de pares clave-valor del diccionario.
mi_diccionario = {'a': 1, 'b': 2, 'c': 3}
elementos = mi_diccionario.items()
print(elementos)
>>> dict_items([('a', 1), ('b', 2), ('c', 3)])
clear
Elimina todos los elementos del diccionario.
mi_diccionario = {'a': 1, 'b': 2, 'c': 3}
mi_diccionario.clear()
print(mi_diccionario)
>>> {}
pop
Elimina la clave key del diccionario y retorna su valor. Si la clave no existe, retorna default (por defecto genera un error KeyError).
mi_diccionario = {'a': 1, 'b': 2, 'c': 3}
valor_eliminado = mi_diccionario.pop('b')
print(valor_eliminado)
>>> 2
setdefault
Retorna el valor asociado con la clave key en el diccionario. Si la clave no existe, inserta la clave con el valor default (por defecto None si no se proporciona) y retorna ese valor.
mi_diccionario = {'a': 1, 'b': 2, 'c': 3}
valor_default = mi_diccionario.setdefault('d', 10)
print(valor_default)
>>> 10
update
Actualiza el diccionario con elementos de otro diccionario u otro objeto iterable.
mi_diccionario = {'a': 1, 'b': 2}
mi_diccionario.update({'c': 3, 'd': 4})
print(mi_diccionario)
>>> {'a': 1, 'b': 2, 'c': 3, 'd': 4}