02 Elementos de Python
02 Elementos de Python
ES
En Python, cada variable es un objeto, lo que implica que soporta ciertas instrucciones
genéricas que proporcionan información sobre dichos objetos:
2
Variables
Los nombres válidos para las variables en Python deben cumplir las siguientes normas: Ejemplo:
1. Deben comenzar por una letra o un guion bajo (_). 1. Abrir la consola de Python.
2. No pueden comenzar por un número. 2. Incluir la declaración
3. Solo pueden contener caracteres alfanuméricos y guiones bajos (A-Z, a-z, 0-9, y _). múltiple de variables:
3. Incluir la instrucción
4. Son sensibles a mayúsculas y minúsculas (case-sensitive).
print(x) y observar el
La asignación de valores a una variable se realiza con el operador =. Es en ese momento resultado
4. Incluir la instrucción
cuando se establece el tipo de variable. Es posible realizar una asignación múltiple de variables
print(y) y observar el
de una manera sencilla y rápida: resultado.
x, y, z = "Amarillo", "Azul", "Rojo"
También es posible hacer una asignación múltiple con el mismo valor a diferentes variables:
x = y = z = 1
3
Tipos de datos
Las variables pueden almacenar diferentes tipos de datos y cada tipo permite realizar distintos tipos de acciones y
operaciones. Se puede obtener el tipo de dato de una variable (objeto) usando la función type().
4
Tipos de datos
Tipo de Dato Descripción Ejemplo
Existen situaciones en las que necesitaremos especificar un tipo de dato en una variable o que necesitaremos convertir
(casting) un tipo de dato en otro.
El casting en Python se realiza utilizando las funciones de construcción para convertir un tipo de dato en otro:
5
Operadores - Asignación
Operador Descripción Ejemplo
6
Operadores - Comparación y lógicos
Operador Descripción Ejemplo
== Igual a x == y
!= Distinto de x != y
and Devuelve True si ambas condiciones son verdaderas x > 3 and x < 10
not Invierte el valor de verdad de una condición not(x > 3 and x < 10)
7
Estructuras de control - Condicionales
Las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa:
Sentencia if
Permite ejecutar una o varias instrucciones cuando se cumple la condición establecida.
Sentencia else
Establece un bloque de instrucciones que se ejecuta en el caso de que no se cumplan las condiciones establecidas
previamente. Requiere una sentencia if previa.
Sentencia elif
Es la sentencia para indicar otras condiciones adicionales a la primera condición de la sentencia if. Requiere una sentencia
if previa. Pueden incluirse varios elif para evaluar distintas condiciones.
Indentación
A diferencia de otros lenguajes de programación, como Java o C++, el alcance de los bloques de código en Python se
establece con la indentación (tabular la línea de código) en lugar de utilizar llaves { ... }. Esto también sirve para añadir
legibilidad al código.
9
Estructuras de control - Bucles
Un bucle o ciclo en programación, es una secuencia que ejecuta repetidas veces un trozo de código, hasta que la
condición asignada a dicho bucle deja de cumplirse. En Python existen dos instrucciones de bucles primitivos: while y
for.
Sentencia while
Un bucle while permite repetir la ejecución de un grupo de instrucciones
mientras se cumpla una condición (es decir, mientras la condición tenga
el valor verdadero). La ejecución de esta estructura de control while es la
siguiente:
del bucle.
Estructuras de control - Bucle while
11
Estructuras de control - Bucle while
Bucles infinitos
En el caso de que la condición del bucle se cumpla
siempre, el bucle no terminaría nunca de ejecutarse, dando
lugar a un bucle infinito. Aunque existen situaciones en
las que es necesario utilizar bucles infinitos en un
programa, normalmente se deben a errores de
codificación, lo que implica perder el control sobre el
programa.
Instrucciones
● break permite detener el bucle aunque la condición
siga siendo verdadera.
● continue permite detener la iteración actual del
bucle y continuar con la siguiente.
● else permite ejecutar un bloque de código una vez
que la condición del bucle ya no es verdadera.
12
Estructuras de control - Bucle for
Un bucle for permite repetir el bloque de instrucciones un número predeterminado de veces. El bloque de instrucciones que
se repite se llama cuerpo del bucle y cada repetición se llama iteración.
No es necesario definir la variable de control antes del bucle, aunque se puede utilizar como variable de control una variable
ya definida en el programa.
13
Estructuras de control - Bucle for
break
Con la instrucción break, se puede detener el bucle antes de que
finalicen todos los elementos iterables.
continue
Con la instrucción continue, se puede detener la iteración actual del
bucle y continuar con la siguiente. Esto significa que cuando se
encuentra la instrucción continue, el código restante dentro del bucle
se salta y la siguiente iteración comienza de inmediato.
else
Con la instrucción else, se puede ejecutar un bloque de código una vez
que el bucle ha finalizado. El bloque else se ejecuta solo si el bucle
termina sin que se ejecute una instrucción break.
14
Estructuras de control - Bucles anidados
Un bucle anidado es un bucle que se encuentra dentro del bloque de otro bucle. En este tipo de estructura, el bucle "interno"
se ejecutará completamente una vez por cada iteración del bucle "externo".
Son útiles para recorrer estructuras de datos multidimensionales como matrices o listas de listas, y permiten realizar múltiples
niveles de iteración.
15
Tipos de datos avanzados - Listas
Las listas en Python son conjuntos ordenados de elementos (números, cadenas, listas, etc.). Se delimitan por corchetes [ ] y
los elementos se separan por comas. Una lista puede contener elementos de diferentes tipos, incluso otras listas.
Acceso
● Se puede acceder a los elementos de una lista utilizando su
índice. El índice comienza en 0.
● También es posible utilizar índices negativos, donde -1 hace
referencia al último elemento, -2 al penúltimo, y así
sucesivamente.
● Puedes especificar un rango de índices para obtener una
sublista. El rango comienza en el primer índice indicado
(incluido) y termina en el último índice indicado (no incluido).
● Si dejas el primer valor vacío, comenzará desde el inicio de
la lista.
● Si dejas el valor final vacío, continuará hasta el final de la
lista.
● También es posible obtener un rango con índices negativos,
de forma que comenzará la búsqueda desde el final de la
lista. 16
Tipos de datos avanzados - Listas
Modificación
● Para modificar un elemento en una lista, puedes
referenciar su índice y asignarle un nuevo valor.
Recorrido
● Puedes recorrer los elementos de una lista utilizando un
ciclo, como for, y puedes modificar los elementos
durante el recorrido si haces referencia al índice.
Comprobación de existencia
● Puedes recorrer los elementos de una lista utilizando un
ciclo, como for, y puedes modificar los elementos
durante el recorrido si haces referencia al índice.
17
Tipos de datos avanzados - Listas
len()
● Devuelve la longitud (número de elementos) de una lista.
append(val)
● Agrega un nuevo elemento al final de la lista, pero no
interactúa con los índices existentes.
insert(pos, val)
● Inserta un nuevo valor en cualquier posición de la lista
referenciando su índice. Los elementos existentes se
desplazan hacia la derecha para dar espacio al nuevo
elemento.
18
Tipos de datos avanzados - Listas
remove(val)
● Elimina la primera aparición de un valor específico en
la lista.
pop(pos=-1)
● Elimina y devuelve el elemento de la lista que se
encuentra en el índice indicado.
del
● El comando del se utiliza para eliminar un elemento en
una lista basándose en su índice o para eliminar toda la
lista.
19
Tipos de datos avanzados - Listas
clear()
● Elimina todos los elementos, dejándola vacía.
sort(reverse=?)
● Ordena ascendente (o descendente, si se especifica).
reverse()
● Invierte el orden de los elementos en la lista.
extend(val)
● Agrega todos los elementos de otra lista (o de cualquier
iterable) al final de la lista actual. Es similar a
append(), pero agrega múltiples elementos en lugar
de uno solo.
20
Tipos de datos avanzados - Listas - Copias
Es importante entender cómo hacer una copia de una lista para evitar modificar accidentalmente el contenido original.
● Asignación directa. Si simplemente se asigna una lista a otra variable, no se crea una copia, sino una referencia a la
misma lista. Cualquier cambio en una afectará a la otra.
● Una copia superficial crea una nueva lista con los mismos elementos, pero si esos elementos son listas u otros objetos
mutables, las sublistas seguirán siendo referencias a los objetos originales. Se usa la función copy() o slices.
21
Tipos de datos avanzados - Tuplas
Son colecciones ordenadas e inmutables, lo que significa que una
vez que se crean, no se pueden modificar, añadir o eliminar
elementos. Se delimitan por paréntesis () y sus elementos se
separan por comas.
Acceso
Se puede acceder a un elemento de una tupla utilizando su índice,
● empezando en el 0
● utilizando índices negativos, donde -1 se refiere al último
elemento, -2 al penúltimo, y así sucesivamente:
Inmutabilidad
Dado que las tuplas son inmutables, no se puede modificar
directamente sus elementos. Sin embargo, es posible convertir
una tupla en una lista, realizar los cambios necesarios y luego
convertirla de nuevo en tupla.
23
Tipos de datos avanzados - Tuplas
Bucles for
● Al igual que con las listas, se puede utilizar las tuplas en un
bucle for para recorrer cada uno de sus elementos.
Comprobar la existencia
● Se puede comprobar la existencia de un elemento dentro de
una tupla usando la palabra clave in.
len()
● La función len() permite saber cuántos elementos hay.
24
Tipos de datos avanzados - Tuplas
Unir tuplas
A diferencia de las listas, que permiten ser modificadas
fácilmente, las tuplas solo se pueden unir entre ellas usando el
operador +:
count(val)
● Tanto en las listas como en las tuplas, se usa el método
count() para contar cuántas veces aparece un elemento
dentro de la tupla.
25
Tipos de datos avanzados - Sets
Los sets en Python son una colección de elementos no ordenados y sin elementos repetidos. Se utilizan cuando no
importa el orden de los elementos y no queremos duplicados. Los sets se delimitan por llaves {} o usando la función set().
A diferencia de las listas y las tuplas, los sets no admiten acceso por índices debido a su naturaleza no ordenada.
Características
1. No ordenados: Los sets no almacenan los elementos en un orden particular, por lo que no puedes acceder a un
elemento específico mediante un índice.
2. Sin duplicados: Un set no puede contener dos elementos iguales. Si intentas añadir duplicados, solo se almacena una
copia.
3. Mutable: Se puede añadir o eliminar elementos de un set, aunque los elementos del set deben ser inmutables (por
ejemplo, números, cadenas, tuplas).
Creación
Utilizando llaves {} o la función set().
26
Tipos de datos avanzados - Sets
add(elem)
● Añade un elemento
remove(elem)
● Elimina un elemento específico, generando un error si
no está presente.
discard(elem)
● Elimina un elemento sin generar error si no existe.
pop()
● Elimina un elemento al azar, ya que los sets no están
ordenados.
27
Tipos de datos avanzados - Sets
clear()
● Elimina todos los elementos del set.
len()
● Para obtener el número de elementos de un set.
28
Tipos de datos avanzados - Diccionarios
Un diccionario en Python es una estructura de datos que almacena pares de clave-valor. Es muy útil para asociar valores a
claves únicas y rápidas de acceder.
Características
1. Colección desordenada.
2. Alterable: Los diccionarios pueden modificarse, agregando o eliminando elementos, o cambiando sus valores.
3. Indexación por clave: No se usan índices numéricos como en las listas, sino claves para acceder a los valores
asociados.
29
Tipos de datos avanzados - Diccionarios
Acceso
● Acceder por clave usando corchetes.
● Acceder con el método get() también permite
obtener el valor de una clave, pero es más seguro
porque no arroja un error si la clave no existe. Se puede
proporcionar un valor predeterminado en caso de que la
clave no exista.
Modificación
Como los diccionarios son alterables, se puede cambiar el
valor de un elemento haciendo referencia a su clave.
Agregación
Simplemente, asignar un valor a una nueva clave.
30
Tipos de datos avanzados - Diccionarios
Bucle for
Cuando se itera sobre un diccionario en un bucle for, de
manera predeterminada se recorren las claves.
values()
● Si solo interesa obtener los valores de un diccionario, se
puede usar el método values().
31
Tipos de datos avanzados - Diccionarios
items()
● El método items() devuelve tanto las claves como los
valores en forma de pares (tuplas). Esto te permite
recorrer el diccionario y trabajar con ambos de manera
simultánea.
pop()
● El método pop() en un diccionario elimina y devuelve el
valor asociado a una clave específica. Debes
proporcionar la clave como argumento, y este método
permite eliminar un par clave-valor.
popitem()
● El método popitem() elimina y devuelve el último par
clave-valor añadido en el diccionario. No toma
argumentos. Si el diccionario está vacío, genera un error. 32
Tipos de datos avanzados - Diccionarios
del
● La sentencia del se utiliza para eliminar un par clave-valor referenciando la clave.
clear()
● El método clear() elimina todos los pares clave-valor en un diccionario, dejándolo vacío.
33
Tipos de datos avanzados - Diccionarios - Copias
Es importante entender cómo hacer una copia de un diccionario para evitar modificar accidentalmente el contenido original.
● Asignación directa. Cuando se asigna un diccionario a otra variable, ambos nombres referencian el mismo diccionario.
Esto significa que cualquier cambio en uno de los nombres afectará al otro.
● El método copy() crea una nueva copia del diccionario, pero si el diccionario contiene objetos mutables (como listas o
diccionarios anidados), estos objetos seguirán compartiendo la referencia entre la copia y el original.
34
Funciones
El uso de funciones es un componente esencial dentro del paradigma de la programación estructurada. Las funciones
permiten dividir un programa complejo en partes más manejables y reutilizables. En Python, se pueden crear funciones
definidas por el desarrollador, además de las funciones que ya están integradas en el lenguaje.
Ventajas
1. Modularización: Permite dividir un programa complejo en módulos más simples, facilitando la programación y el testing.
2. Reutilización: Una función puede ser reutilizada en diferentes programas o contextos, mejorando la eficiencia del
desarrollo.
Para definir una función en Python, se utiliza la sentencia def, seguida de un nombre descriptivo para la función. A
continuación se muestran los componentes esenciales de una función.
35
Funciones - Componentes
● NOMBRE: El nombre de la función sigue las mismas reglas que los nombres de las variables (debe comenzar con una
letra o guion bajo y no puede contener espacios ni caracteres especiales).
● LISTA_DE_PARAMETROS: Parámetros opcionales que la función puede recibir como entrada. Los paréntesis son
obligatorios, aunque no haya parámetros.
● DOCSTRING: Un bloque de texto opcional que sirve para documentar la función, describiendo su propósito.
● SENTENCIAS: Bloque de código que define las acciones que realizará la función.
● RETURN: (Opcional) Permite devolver un valor desde la función. Este valor puede ser de cualquier tipo de datos:
enteros, cadenas, listas, tuplas, diccionarios, etc.
36
Funciones
Llamadas a Funciones
Una vez que la función ha sido definida, se puede llamar en cualquier parte del programa para ejecutar su bloque de
instrucciones.
Parámetros y Argumentos
● Parámetros de entrada: Se especifican al definir la función.
● Argumentos: Son los valores que se pasan a la función en el momento de su llamada. Si la función espera varios
parámetros, los argumentos deben estar separados por comas.
37
Funciones
Argumentos Indeterminados
En algunas situaciones, no se conoce el número exacto de
argumentos que recibirá una función. Para manejar este escenario,
Python permite el uso del carácter * antes del nombre del
parámetro. Esto convierte los argumentos en una tupla dentro de
la función.
38
Funciones
39
Funciones - Input
La función input() en Python se utiliza para recibir entradas del
usuario a través del teclado. Cuando el programa se ejecuta, se
detiene en el punto donde se encuentra la función input(),
esperando a que el usuario escriba algo y presione la tecla Enter.
El texto que el usuario introduce es devuelto por la función como
una cadena (tipo str).
Importante
Dado que siempre se devuelve una cadena, si intentas realizar
operaciones numéricas sin hacer la conversión apropiada,
obtendrás errores. Es por eso que, al pedir números o valores que
se usarán en cálculos, es importante convertir el resultado de
input() a los tipos de datos necesarios (int(), float(), etc.).
40
Funciones - Función principal
Cuando Python ejecuta un archivo, le asigna un nombre especial a
ese archivo: __name__. Si el archivo se está ejecutando
directamente (no importado como un módulo), el valor de
__name__ será "__main__". Este condicional garantiza que la
función main() solo se ejecute si el archivo se está ejecutando
directamente, no cuando se importa como parte de otro programa o
módulo.
41
Testing - Pytest
pytest es una herramienta de testing para Python que permite escribir y
ejecutar pruebas automatizadas de una manera fácil. Se usa principalmente para
verificar que el código funcione como se espera, lo cual es fundamental para
mantener la calidad y estabilidad de los proyectos de software.
42
Excepciones
Cuando se produce un error en un programa, Python genera un mensaje de error y el programa se detiene. Estos errores se
conocen como excepciones. Afortunadamente, Python permite manejar estas excepciones para evitar que el programa se
interrumpa abruptamente. Para ello, se utilizan las sentencias try y except.
Estructura Básica
La sentencia try permite probar bloques de código que pueden generar errores. Si ocurre un error dentro del bloque try, el
programa no se detiene, sino que pasa al bloque except para manejar la excepción y continuar con la ejecución.
Sin el manejo de excepciones, si se produce un error, el programa se detendrá inmediatamente y mostrará un mensaje de
error sin permitir que el programa continúe.
43
Excepciones
Múltiples except
Es posible definir varios bloques except para manejar diferentes
tipos de excepciones de manera individual. Esto se realiza
especificando el tipo de excepción que se quiere capturar para cada
bloque. De esta manera, se pueden manejar diferentes errores de
forma específica.
Bloque else
El bloque else se utiliza para ejecutar código solo si no se produjo
ninguna excepción en el bloque try. Esto es útil cuando se quiere
realizar alguna acción, únicamente si el código dentro de try se
ejecuta sin errores.
44
Excepciones
Bloque finally
El bloque finally se utiliza para ejecutar código que siempre debe
ejecutarse, sin importar si ocurrió o no una excepción. Esto es útil para
tareas como liberar recursos o cerrar archivos, independientemente
del resultado del bloque try.
45
Excepciones
46
Manejo de ficheros
La gestión de ficheros en Python se refiere a cómo el lenguaje interactúa con archivos en el sistema, permitiendo leer,
escribir, crear, o eliminar archivos. Python ofrece varias funciones incorporadas para manejar archivos fácilmente.
Pasos
1. Abrir un archivo: Para trabajar con un archivo, primero hay que abrirlo. Esto se hace usando la función open(). Esta
función toma dos argumentos: el nombre del archivo y el modo en el que se quiere abrirlo (leer, escribir, etc.).
2. Modos de apertura:
○ 'r': Modo lectura. El archivo debe existir.
○ 'w': Modo escritura. Si el archivo existe, lo sobreescribe; si no, lo crea.
○ 'a': Modo agregar. Añade información al final del archivo si ya existe; si no, lo crea.
○ 'x': Modo creación. Crea el archivo, pero falla si el archivo ya existe.
○ 't': Modo texto (por defecto).
○ 'b': Modo binario.
3. Leer o escribir: Una vez abierto el archivo, se puede leer su contenido o escribir en él.
4. Cerrar el archivo: Siempre es importante cerrar el archivo después de usarlo, para liberar recursos. Esto se hace con
close(), aunque es más común usar un bloque with, que se encarga de cerrar el archivo automáticamente.
47
Manejo de ficheros
Leer
1. Abrimos el archivo archivo.txt en modo lectura
('r').
2. Leemos el contenido del archivo usando el método
read().
3. Imprimimos el contenido del archivo en la consola.
4. El bloque with asegura que el archivo se cierre
automáticamente.
Escribir
1. Abrimos el archivo archivo.txt en modo escritura
('w'). Si el archivo ya existía, su contenido se
sobrescribirá.
2. Usamos el método write() para escribir el texto en el
archivo.
48
Manejo de ficheros
49
Manejo de ficheros
Consejos adicionales
● Manejo de errores: Es buena práctica manejar posibles errores usando bloques try-except en caso de que el archivo no
exista o haya algún problema al abrirlo.
● Rutas absolutas y relativas: Si el archivo no está en el mismo directorio que el script de Python, deberás usar una ruta
completa (absoluta) o una ruta relativa para abrirlo.
50