Curso de Python Sesion 1
Curso de Python Sesion 1
Curso de Python Sesion 1
Sesión 1 (8 horas):
.
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
Características principales:
Aplicaciones comunes:
1. Visitar www.python.org
2. Descargar la última versión estable para tu sistema operativo
3. Ejecutar el instalador y seguir las instrucciones (importante: marcar la opción "Add
Python to PATH")
4. Verificar la instalación abriendo una terminal y escribiendo: python --version
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
1.3 Tu primer programa: "Qué vamos hacer hoy?!" “ Vamos a conquistar al mundo!”
Ejemplo ilustrativo:
Explicación:
En Python, las variables son nombres que se refieren a valores almacenados en la memoria.
Python es un lenguaje de tipado dinámico, lo que significa que no es necesario declarar el
tipo de una variable explícitamente.
a) Enteros (int):
edad = 25
año_actual = 2024
numero_negativo = -10
altura = 1.75
pi = 3.14159
nombre = "Ana"
apellido = 'García'
frase = """Este es un texto
que ocupa varias líneas"""
d) Booleanos (bool):
es_estudiante = True
tiene_mascota = False
valor_desconocido = None
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
Ejemplo ilustrativo:
2.2 Operadores
a) Operadores aritméticos:
suma = 5 + 3 #8
resta = 10 - 4 #6
multiplicacion = 3 * 4 # 12
division = 15 / 4 # 3.75
division_entera = 15 // 4 # 3
modulo = 15 % 4 #3
potencia = 2 ** 3 #8
b) Operadores de comparación:
igual = (5 == 5) # True
diferente = (5 != 3) # True
mayor_que = (7 > 3) # True
menor_que = (2 < 8) # True
mayor_o_igual = (5 >= 5) # True
menor_o_igual = (4 <= 6) # True
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
c) Operadores lógicos:
Estructura básica:
if condicion1:
# código si condicion1 es verdadera
elif condicion2:
# código si condicion2 es verdadera
else:
# código si ninguna condición anterior es verdadera
Características importantes:
Ejemplos sencillos:
2. Calificación de un examen:
b) Bucle for:
El bucle for se utiliza para iterar sobre una secuencia (como una lista, tupla, diccionario,
conjunto o cadena) o cualquier objeto iterable.
Estructura básica:
Características importantes:
Puede usarse con la función range() para repetir un número específico de veces.
Puede anidarse dentro de otros bucles.
Puede usarse con else para ejecutar código cuando el bucle termina normalmente.
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
Ejemplos sencillos:
numeros = [1, 2, 3, 4, 5]
suma = 0
for numero in numeros:
suma += numero
print(f"La suma es: {suma}")
Ejemplos complejos:
inicio = 2
fin = 50
for num in range(inicio, fin + 1):
es_primo = True
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
es_primo = False
break
if es_primo:
print(num, end=" ")
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
c) Bucle while:
El bucle while se utiliza para repetir un bloque de código mientras una condición sea
verdadera.
Estructura básica:
while condicion:
# código a ejecutar mientras la condición sea verdadera
Características importantes:
Ejemplos sencillos:
1. Cuenta regresiva:
contador = 5
while contador > 0:
print(contador)
contador -= 1
print("¡Despegue!")
while True:
respuesta = input("¿Quieres continuar? (s/n): ")
if respuesta.lower() in ['s', 'n']:
break
print("Por favor, responde 's' o 'n'.")
print("Gracias por responder.")
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
Ejemplos complejos:
1. Juego de adivinar un número:
import random
while True:
intento = int(input("Adivina el número (1-100): "))
intentos += 1
if opcion == '5':
print("¡Hasta luego!")
break
if opcion == '1':
print(f"Resultado: {num1 + num2}")
elif opcion == '2':
print(f"Resultado: {num1 - num2}")
elif opcion == '3':
print(f"Resultado: {num1 * num2}")
elif opcion == '4':
if num2 != 0:
print(f"Resultado: {num1 / num2}")
else:
print("Error: No se puede dividir por cero")
else:
print("Opción no válida. Por favor, elige una opción del 1 al 5.")
3.1 Listas
Las listas son colecciones ordenadas y mutables de elementos. Pueden contener elementos
de diferentes tipos.
Características principales:
Ejemplos básicos:
# Acceder a elementos
print(frutas[0]) # Imprime: manzana
print(frutas[-1]) # Imprime: cereza (último elemento)
# Modificar elementos
frutas[1] = "pera"
print(frutas) # Imprime: ['manzana', 'pera', 'cereza']
# Añadir elementos
frutas.append("uva")
print(frutas) # Imprime: ['manzana', 'pera', 'cereza', 'uva']
# Longitud de la lista
print(len(frutas)) # Imprime: 4
# Eliminar elementos
del frutas[2]
print(frutas) # Imprime: ['manzana', 'pera', 'uva']
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
numeros = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3]
# Ordenar la lista
numeros.sort()
print(numeros) # Imprime: [1, 1, 2, 3, 3, 4, 5, 5, 6, 9]
# Invertir la lista
numeros.reverse()
print(numeros) # Imprime: [9, 6, 5, 5, 4, 3, 3, 2, 1, 1]
# Contar ocurrencias
print(numeros.count(5)) # Imprime: 2
# Encontrar índice
print(numeros.index(4)) # Imprime: 4
3.2 Tuplas
Características principales:
Ejemplos básicos:
# Acceder a elementos
print(coordenadas[0]) # Imprime: 10
# Longitud de la tupla
print(len(persona)) # Imprime: 3
numeros = (3, 1, 4, 1, 5, 9, 2, 6, 5, 3)
# Contar ocurrencias
print(numeros.count(5)) # Imprime: 2
# Encontrar índice
print(numeros.index(4)) # Imprime: 2
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
3.3 Diccionarios
Características principales:
Se definen con llaves {}
Cada elemento es un par clave-valor
Las claves deben ser únicas e inmutables (típicamente strings o números)
Los valores pueden ser de cualquier tipo y mutables
No mantienen un orden específico (aunque en versiones recientes de Python,
mantienen el orden de inserción)
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
Ejemplos básicos:
# Crear un diccionario
persona = {
"nombre": "Ana",
"edad": 28,
"ciudad": "Barcelona"
}
# Acceder a valores
print(persona["nombre"]) # Imprime: Ana
# Modificar valores
persona["edad"] = 29
print(persona) # Imprime: {'nombre': 'Ana', 'edad': 29, 'ciudad': 'Barcelona'}
# Método get() para obtener un valor con un valor predeterminado si la clave no existe
print(persona.get("altura", "No especificada")) # Imprime: No especificada
inventario = {
"manzanas": {"cantidad": 50, "precio": 0.5},
"plátanos": {"cantidad": 30, "precio": 0.75},
"naranjas": {"cantidad": 40, "precio": 0.6}
}
def mostrar_inventario():
print("\nInventario actual:")
for producto, info in inventario.items():
print(f"{producto}: {info['cantidad']} unidades, Precio: ${info['precio']:.2f}")
3.4 Conjuntos
Características principales:
Ejemplos básicos:
# Crear un conjunto
frutas = {"manzana", "banana", "cereza"}
# Añadir elementos
frutas.add("naranja")
print(frutas) # Imprime un conjunto con los elementos en orden aleatorio
# Eliminar un elemento
frutas.remove("banana")
print(frutas)
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
# Unión
print(set1 | set2) # o set1.union(set2)
# Intersección
print(set1 & set2) # o set1.intersection(set2)
# Diferencia
print(set1 - set2) # o set1.difference(set2)
# Subconjunto
set3 = {1, 2}
print(set3.issubset(set1)) # True
# Superconjunto
print(set1.issuperset(set3)) # True
def analizar_texto(texto):
# Convertir el texto a minúsculas y dividirlo en palabras
palabras = texto.lower().split()
# Texto de ejemplo
texto_ejemplo = """
Python es un lenguaje de programación versátil y poderoso.
Python se utiliza en una variedad de aplicaciones, desde desarrollo web hasta
análisis de datos y aprendizaje automático. Muchos programadores eligen Python
por su sintaxis clara y legible.
"""
analizar_texto(texto_ejemplo)
Este ejemplo utiliza un conjunto para identificar palabras únicas y un diccionario para
contar la frecuencia de cada palabra, demostrando cómo diferentes estructuras de datos
pueden trabajar juntas en aplicaciones más complejas.
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
4. Funciones (2 horas)
Las funciones son bloques de código reutilizables que realizan una tarea específica.
Permiten organizar el código, evitar la repetición y hacer el programa más modular y fácil
de mantener.
Estructura básica:
Ejemplos básicos:
resultado = suma(5, 3)
print(resultado) # Imprime: 8
c, r = divmod(20, 3)
print(f"Cociente: {c}, Resto: {r}") # Imprime: Cociente: 6, Resto: 2
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
a) Argumentos posicionales:
describir_persona("Ana", 28)
1. Definición: Los argumentos posicionales son valores que se pasan a una función en
un orden específico. Su posición en la llamada a la función determina a qué
parámetro corresponden en la definición de la función.
2. Características principales:
o Orden: El orden en que se pasan los argumentos es crucial. El primer
argumento corresponde al primer parámetro, el segundo al segundo, y así
sucesivamente.
o Correspondencia uno a uno: Debe haber una correspondencia exacta entre
el número de argumentos posicionales y el número de parámetros (a menos
que se usen parámetros opcionales o *args).
o Sin nombres: A diferencia de los argumentos con palabra clave, no se
especifican los nombres de los parámetros al llamar a la función.
3. Uso en el código:
o En la definición de la función, los parámetros se listan en un orden
específico.
o Al llamar a la función, los argumentos se pasan en el mismo orden.
4. *Flexibilidad con args:
o Python permite usar *args para aceptar un número variable de argumentos
posicionales.
o Estos argumentos se empaquetan en una tupla dentro de la función.
5. Consideraciones:
o Legibilidad: Con muchos argumentos, puede ser difícil recordar el orden
correcto. En estos casos, los argumentos con palabra clave pueden ser más
claros.
o Mantenibilidad: Si cambias el orden de los parámetros en la definición de
la función, todas las llamadas a esa función deben ser revisadas y
posiblemente actualizadas.
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
6. Buenas prácticas:
o Usa argumentos posicionales para parámetros que tienen un orden natural o
cuando son pocos y su uso es claro.
o Considera usar argumentos con palabra clave para funciones con muchos
parámetros o cuando el orden no es intuitivo.
o Documenta claramente el orden y propósito de los argumentos posicionales
en la documentación de la función.
Los argumentos posicionales son una parte fundamental de las funciones en Python,
ofreciendo una forma sencilla y directa de pasar información a las funciones. Sin embargo,
es importante usarlos juiciosamente, especialmente en funciones complejas donde los
argumentos con palabra clave pueden ofrecer mayor claridad.
describir_persona(edad=28, nombre="Ana")
1. Definición: Los argumentos con palabras clave son valores que se pasan a una
función especificando el nombre del parámetro al que corresponden.
2. Características principales:
o Nombre explícito: Se especifica el nombre del parámetro seguido de un
signo igual y el valor.
o Orden flexible: El orden en que se pasan estos argumentos no importa.
o Claridad: Hacen el código más legible, especialmente cuando la función
tiene muchos parámetros.
o Valores por defecto: A menudo se usan en combinación con valores por
defecto en la definición de la función.
3. Uso en el código:
o En la llamada a la función, se especifica nombre_parametro=valor.
o En la definición de la función, se pueden establecer valores por defecto: def
funcion(parametro=valor_por_defecto).
4. **Flexibilidad con kwargs:
o Python permite usar **kwargs para aceptar un número arbitrario de
argumentos con palabras clave.
o Estos argumentos se empaquetan en un diccionario dentro de la función.
5. Ventajas:
o Legibilidad: Hace que las llamadas a funciones sean más claras,
especialmente con muchos argumentos.
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
Los argumentos con palabras clave ofrecen una gran flexibilidad y claridad en la
programación Python. Son especialmente útiles en funciones complejas o cuando quieres
hacer que ciertos argumentos sean opcionales. Combinados con argumentos posicionales,
proporcionan un sistema poderoso y flexible para diseñar interfaces de funciones.
def saludar(nombre="Invitado"):
print(f"Hola, {nombre}!")
def suma_total(*args):
return sum(args)
def info_persona(**kwargs):
for clave, valor in kwargs.items():
print(f"{clave}: {valor}")
Las funciones pueden retornar valores usando la palabra clave return. Si no se especifica
un valor de retorno, la función retorna None por defecto.
def es_par(numero):
return numero % 2 == 0
Las funciones lambda en programación, también conocidas como funciones anónimas, son
una característica importante en muchos lenguajes, incluyendo Python. Aquí te explico de
qué se tratan y sus características principales:
1. Definición: Una función lambda es una pequeña función anónima que puede tener
cualquier número de argumentos, pero solo puede tener una expresión.
2. Características principales:
Son funciones de primer orden: Pueden ser pasadas como argumentos a otras
funciones.
Ejemplo simple:
5. Usos comunes:
o En funciones como map(), filter(), y reduce().
o Para definir funciones simples en línea.
o En ordenamiento personalizado (como key en sort() o sorted()).
6. Limitaciones:
o No pueden contener múltiples expresiones o declaraciones complejas.
o No son ideales para funciones complejas o largas.
Las funciones lambda son útiles para escribir código conciso y funcional, especialmente
cuando se necesita una función simple para una operación rápida.
cuadrado = lambda x: x ** 2
print(cuadrado(5)) # Imprime: 25
def calculadora(operacion):
if operacion == 'suma':
return lambda a, b: a + b
elif operacion == 'resta':
return lambda a, b: a - b
elif operacion == 'multiplicacion':
return lambda a, b: a * b
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
# Uso de la calculadora
suma = calculadora('suma')
resta = calculadora('resta')
multiplicacion = calculadora('multiplicacion')
division = calculadora('division')
La función filter() en Python es una función incorporada que se utiliza para filtrar
elementos de una secuencia, como una lista, mediante la aplicación de una función de filtro.
La función filter() toma dos argumentos: la función de filtro y la secuencia que se desea
filtrar.
La sintaxis general de filter() es la siguiente:
filter(función, secuencia)
La función de filtro (función) es una función que devuelve True o False para cada
elemento de la secuencia.
La secuencia es la colección de elementos que se van a filtrar.
def es_par(numero):
return numero % 2 == 0
La función filter() es una herramienta poderosa para filtrar elementos de una secuencia de
manera eficiente en Python
La función list() en Python es una función incorporada que se utiliza para crear una lista a
partir de una secuencia iterable, como una tupla, un rango, un conjunto, una cadena u otro
objeto iterable. La función list() toma como argumento la secuencia iterable y devuelve una
nueva lista que contiene los elementos de la secuencia en el mismo orden.
La sintaxis general de list() es la siguiente:
list(secuencia)
La secuencia es el objeto iterable del cual se desea crear la lista.
Por ejemplo, si tenemos una tupla y queremos convertirla en una lista, podemos usar la
función list() de la siguiente manera:
función list() de la siguiente manera:
tupla = (1, 2, 3, 4, 5)
lista = list(tupla)
x = 10 # Variable global
def funcion():
y = 5 # Variable local
print(x) # Puede acceder a la variable global
print(y)
funcion()
print(x) # Imprime: 10
# print(y) # Esto causaría un error, y no es accesible fuera de la función
def modificar_global():
global x
x = 20
modificar_global()
print(x) # Imprime: 20
1. Concepto básico:
o Un decorador es una función que toma otra función (o clase) como
argumento y devuelve una nueva función (o clase) con alguna funcionalidad
adicional.
2. Sintaxis:
o Se utilizan con el símbolo @ seguido del nombre del decorador, justo encima
de la definición de la función o clase que se quiere decorar.
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
def registrar_llamada(func):
def envoltorio(*args, **kwargs):
print(f"Llamando a la función: {func.__name__}")
resultado = func(*args, **kwargs)
print(f"La función {func.__name__} ha terminado")
return resultado
return envoltorio
@registrar_llamada
def saludar(nombre):
print(f"Hola, {nombre}!")
saludar("Ana")
Este ejemplo muestra cómo un decorador puede ser usado para añadir funcionalidad (en
este caso, registrar la llamada) a una función existente sin modificar su código.
try:
# Código que puede generar una excepción
except TipoDeExcepcion:
# Código para manejar la excepción
else:
# Código que se ejecuta si no hay excepciones
finally:
# Código que se ejecuta siempre, haya o no excepciones
Ejemplo básico:
try:
numero = int(input("Introduce un número: "))
resultado = 10 / numero
except ValueError:
print("Error: Debes introducir un número válido.")
except ZeroDivisionError:
print("Error: No se puede dividir por cero.")
else:
print(f"El resultado es: {resultado}")
finally:
print("Operación finalizada.")
Python tiene muchos tipos de excepciones predefinidas. Algunos de los más comunes son:
ValueError: Cuando una función recibe un argumento del tipo correcto pero con
un valor inapropiado.
TypeError: Cuando se realiza una operación en un objeto de tipo inapropiado.
ZeroDivisionError: Cuando se intenta dividir por cero.
FileNotFoundError: Cuando se intenta acceder a un archivo que no existe.
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
IndexError: Cuando se intenta acceder a un índice que está fuera del rango de una
secuencia.
KeyError: Cuando se intenta acceder a una clave que no existe en un diccionario.
try:
verificar_edad(150)
except ValueError as e:
print(f"Error: {e}")
La palabra clave raise en Python, que se utiliza para lanzar excepciones. Las excepciones
son eventos que ocurren durante la ejecución de un programa que interrumpen el flujo
normal de las instrucciones.
1. Propósito:
o raise se utiliza para lanzar (o "levantar") una excepción de forma explícita.
o Permite al programador indicar que ha ocurrido una situación excepcional o
un error.
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
2. Sintaxis básica:
4. Tipos de excepciones:
5. Características importantes:
6. Buenas prácticas:
En el artefacto de código que he creado, puedes ver ejemplos prácticos de cómo usar raise
en diferentes situaciones, incluyendo:
Puedes crear tus propias clases de excepción heredando de la clase base Exception.
class ErrorDeBalanceInsuficiente(Exception):
def __init__(self, balance, cantidad):
self.balance = balance
self.cantidad = cantidad
self.mensaje = f"Balance insuficiente. Tienes {balance}, pero intentas retirar
{cantidad}"
super().__init__(self.mensaje)
class CuentaBancaria:
def __init__(self, balance_inicial):
self.balance = balance_inicial
cuenta = CuentaBancaria(100)
try:
cuenta.retirar(150)
except ErrorDeBalanceInsuficiente as e:
print(f"Error en la transacción: {e}")
Los context managers son útiles para manejar recursos que necesitan ser liberados o
cerrados después de su uso, como archivos o conexiones de red.
def leer_archivo(nombre_archivo):
try:
with open(nombre_archivo, 'r') as archivo:
contenido = archivo.read()
print(contenido)
except FileNotFoundError:
print(f"El archivo {nombre_archivo} no se encontró.")
except PermissionError:
print(f"No tienes permiso para leer el archivo {nombre_archivo}.")
leer_archivo("archivo_existente.txt")
leer_archivo("archivo_no_existente.txt")
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
1. Excepciones básicas:
o Exception: La clase base para todas las excepciones incorporadas.
o ArithmeticError: Base para errores aritméticos.
o BufferError: Relacionado con operaciones de buffer.
o LookupError: Base para errores de búsqueda.
2. Excepciones de error operativo:
o TypeError: Operación aplicada a un objeto de tipo inapropiado.
o ValueError: Operación con un argumento de tipo correcto pero valor
inapropiado.
o NameError: Se usa una variable no definida.
o IndexError: Índice de secuencia fuera de rango.
o KeyError: Clave no encontrada en un diccionario.
o ZeroDivisionError: División o módulo por cero.
3. Excepciones de manejo de archivos y E/S:
o FileNotFoundError: Intento de abrir un archivo no existente.
o IOError: Error de entrada/salida general.
o PermissionError: Operaciones sin permisos suficientes.
4. Excepciones de importación:
o ImportError: Error al importar un módulo.
o ModuleNotFoundError: Módulo no encontrado (subclase de ImportError).
5. Excepciones de sintaxis y compilación:
o SyntaxError: Error de sintaxis en el código.
o IndentationError: Indentación incorrecta.
6. Excepciones de sistema y ambiente:
o EnvironmentError: Error relacionado con el entorno.
o OSError: Error relacionado con el sistema operativo.
7. Excepciones de ejecución:
o RuntimeError: Error genérico durante la ejecución.
o NotImplementedError: Método o función no implementada.
8. Otras excepciones comunes:
o AttributeError: Atributo de objeto no existente.
o MemoryError: Operación sin suficiente memoria.
o OverflowError: Resultado demasiado grande para ser representado.
o RecursionError: Profundidad máxima de recursión excedida.
9. Excepciones de advertencia:
o Warning: Clase base para advertencias.
o DeprecationWarning: Sobre características obsoletas.
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
Esta lista no es exhaustiva, pero cubre las excepciones más comúnmente utilizadas en
Python. Es importante notar que algunas de estas excepciones son subclases de otras (por
ejemplo, FileNotFoundError es una subclase de IOError).
Conocer estos tipos de excepciones te ayudará a manejar errores de manera más específica
en tu código, permitiéndote crear programas más robustos y fáciles de depurar. También te
permitirá usar raise de manera más precisa cuando necesites lanzar excepciones
específicas en tu propio código.
Curso de básico de Python.
Prof. Ing. Jesús R. Romero Manzanilla
1. Crear un programa que solicite al usuario dos números y realice la división entre
ellos, manejando las posibles excepciones (división por cero, entrada no numérica).
2. Implementar una función que lea un archivo CSV y maneje las excepciones que
puedan ocurrir (archivo no encontrado, formato incorrecto).
3. Crear una excepción personalizada para validar una dirección de correo electrónico
y usarla en una función que verifique direcciones de correo.
4. Escribir un context manager personalizado que mida el tiempo de ejecución de un
bloque de código.