2  Preliminares Python

Aquí se presentarán los conceptos y funciones de Python conforme las utilicemos en el curso. Se sugiere revisar la primera parte del libro Python Programming and Numerical Methods.

2.1 Tipos de Datos en Python

Python soporta varios tipos de datos integrados, usados para almacenar valores. Estos incluyen:

2.1.1 Numéricos

Python soporta tres tipos numéricos diferentes:

  • int: Números enteros, por ejemplo, 5, 100.

  • float: Números de punto flotante, por ejemplo, 5.5, 100.0.

  • complex: Números complejos, por ejemplo, 1+2j.

La función type() en Python se utiliza para determinar el tipo de dato de una variable u objeto. Por ejemplo:

type(5)
int
type(5.5)
float
type(1+2j)
complex

2.1.2 Cadenas (Strings)

Las cadenas son secuencias de caracteres encerradas entre comillas simples o dobles.

type("Esta secuencia de caracteres es del tipo string")
str

2.1.3 Booleanos

Los valores booleanos representan True o False.

type(True)
bool
type(False)
bool

2.2 Listas

Las listas en Python son estructuras de datos que permiten almacenar múltiples elementos en un solo contenedor. Estos elementos pueden ser de diferentes tipos de datos, como números, cadenas, booleanos, e incluso otras listas. Las listas son mutables, lo que significa que sus elementos pueden ser modificados después de su creación.

2.2.1 Creación de listas

Se pueden crear listas utilizando corchetes [] o el constructor list().

# Crear listas
mi_lista = [1, 2, 3, 4, 5]  # Lista con elementos
lista_vacia = []  # Lista vacía
lista_mixta = [1, "texto", True, 3.14]  # Lista con diferentes tipos de datos
lista_con_list = list((6, 7, 8))  # Lista a partir de una tupla

2.2.2 Métodos de las listas

Las listas en Python tienen varios métodos incorporados para facilitar su manipulación. A continuación, se enumeran los más comunes:

Método Descripción
append(x) Agrega un elemento al final de la lista.
extend(iter) Extiende la lista agregando todos los elementos de un iterable.
insert(i, x) Inserta un elemento en una posición específica.
remove(x) Elimina la primera ocurrencia de un elemento.
pop([i]) Elimina y devuelve el elemento en el índice especificado (por defecto, el último).
clear() Elimina todos los elementos de la lista.
index(x) Devuelve el índice de la primera ocurrencia del elemento especificado.
count(x) Devuelve el número de ocurrencias de un elemento en la lista.
sort() Ordena la lista en su lugar (de menor a mayor por defecto).
reverse() Invierte el orden de los elementos de la lista.
copy() Devuelve una copia superficial de la lista.
mi_lista = [3, 1, 4, 1, 5]
mi_lista.append(9)  # [3, 1, 4, 1, 5, 9]
mi_lista.extend([2, 6])  # [3, 1, 4, 1, 5, 9, 2, 6]
mi_lista.insert(2, 8)  # [3, 1, 8, 4, 1, 5, 9, 2, 6]
mi_lista.remove(1)  # [3, 8, 4, 1, 5, 9, 2, 6]
elemento = mi_lista.pop()  # Devuelve 6, lista: [3, 8, 4, 1, 5, 9, 2]
mi_lista.sort()  # [1, 2, 3, 4, 5, 8, 9]
mi_lista.reverse()  # [9, 8, 5, 4, 3, 2, 1]
copia = mi_lista.copy()  # [9, 8, 5, 4, 3, 2, 1]
mi_lista.clear()  # Lista vacía: []

2.2.3 Funciones comunes aplicables a listas

Además de los métodos, existen funciones integradas que se pueden usar con listas:

Función Descripción
len(lista) Devuelve el número de elementos en la lista.
max(lista) Devuelve el valor máximo de la lista (si los elementos son comparables).
min(lista) Devuelve el valor mínimo de la lista (si los elementos son comparables).
sum(lista) Devuelve la suma de los elementos (si son numéricos).
list(iter) Convierte un iterable (como una tupla o rango) en una lista.

Ejemplos

mi_lista = [3, 1, 4, 1, 5, 9]
longitud = len(mi_lista)  # 6
maximo = max(mi_lista)  # 9
minimo = min(mi_lista)  # 1
suma = sum(mi_lista)  # 23
lista_rango = list(range(5))  # [0, 1, 2, 3, 4]

2.3 El bucle for en Python

El bucle for en Python se utiliza para iterar sobre una secuencia de elementos, como listas, tuplas, cadenas, conjuntos o cualquier objeto iterable. Es una herramienta poderosa para recorrer elementos de manera ordenada y realizar operaciones repetitivas.

2.3.1 Estructura del bucle for

El bucle for tiene la siguiente estructura:

#for variable in iterable:
    # Bloque de código a ejecutar

2.3.2 Componentes

  1. variable: Es una variable que toma el valor de cada elemento del iterable en cada iteración.

  2. iterable: Es una colección o un objeto que puede ser iterado, como listas, tuplas, cadenas, diccionarios, rangos, etc.

  3. Bloque de código: Es el conjunto de instrucciones que se ejecutan en cada iteración. Este bloque debe estar indentado.

2.3.3 Ejemplos básicos

  1. Iterar sobre una lista
numeros = [1, 2, 3, 4, 5]
for numero in numeros:
  print(numero)
1
2
3
4
5
  1. Iterar sobre una cadena
cadena = "Python"
for caracter in cadena:
  print(caracter)
P
y
t
h
o
n
  1. Iterar usando range()

El objeto range() genera una secuencia de números, comúnmente usado para iteraciones controladas.

for i in range(5):
  print(i)
0
1
2
3
4
  1. Iterar sobre un diccionario
diccionario = {"a": 1, "b": 2, "c": 3}
for clave, valor in diccionario.items():
    print(f"Clave: {clave}, Valor: {valor}")
Clave: a, Valor: 1
Clave: b, Valor: 2
Clave: c, Valor: 3

2.3.4 Modificar el flujo del bucle

Usar break para salir del bucle

El comando break termina el bucle de manera inmediata.

for numero in range(10):
  if numero == 5:
    break
  print(numero)
0
1
2
3
4

Usar continue para saltar una iteración

El comando continue omite el resto del código en la iteración actual y pasa a la siguiente.

for numero in range(5):
  if numero == 2:
    continue
  print(numero)
0
1
3
4

2.3.5 Usar else con for

El bloque else se ejecuta después de que el bucle se completa, a menos que se termine con un break.

for numero in range(5):
  print(numero)
else:
  print("El bucle ha finalizado.")
0
1
2
3
4
El bucle ha finalizado.

2.3.6 Bucles anidados

Se pueden incluir bucles for dentro de otros bucles para iterar sobre estructuras más complejas.

matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for fila in matriz:
  for elemento in fila:
    print(elemento, end=" ")
1 2 3 4 5 6 7 8 9 

2.4 El bucle while en Python

El bucle while en Python permite ejecutar un bloque de código repetidamente mientras una condición sea verdadera. Es útil cuando no se conoce de antemano cuántas iteraciones serán necesarias.

2.4.1 Estructura del bucle while

#while condicion:
    # Bloque de código a ejecutar

2.4.2 Componentes

  1. condicion: Es una expresión que se evalúa como verdadera o falsa. Mientras sea verdadera, el bloque de código se ejecutará.

  2. Bloque de código: Es el conjunto de instrucciones que se ejecutan en cada iteración. Debe estar indentado.

2.5 Ejemplos básicos

  1. Contador simple
contador = 0
while contador < 5:
  print(contador)
  contador += 1
0
1
2
3
4
  1. Usar else con while

El bloque else se ejecuta cuando la condición del bucle se evalúa como falsa (excepto si se utiliza break).

contador = 0
while contador < 3:
  print(contador)
  contador += 1
else:
  print("El bucle ha terminado.")
0
1
2
El bucle ha terminado.

2.5.1 Modificar el flujo del bucle

break para salir del bucle

El comando break termina el bucle inmediatamente.

numero = 10
while numero > 0:
  if numero == 5:
    break
  print(numero)
  numero -= 1
10
9
8
7
6

continue para saltar una iteración

El comando continue omite el resto del bloque de código en la iteración actual y pasa a la siguiente.

numero = 0
while numero < 5:
  numero += 1
  if numero == 3:
    continue
  print(numero)
1
2
4
5

2.5.2 Precauciones al usar while

  1. Evitar bucles infinitos: Asegúrate de que la condición eventualmente sea falsa.

  2. Controlar el flujo: Usa condiciones claras y actualiza las variables relacionadas con el bucle dentro de su bloque.

2.6 Definición de funciones

Las funciones en Python son bloques de código reutilizables que se definen para realizar una tarea específica. Son útiles para organizar, simplificar y reutilizar código.

2.6.1 Estructura de una función

Una función en Python se define utilizando la palabra clave def, seguida del nombre de la función, paréntesis (que pueden incluir parámetros) y dos puntos. El bloque de código de la función debe estar indentado.

Sintaxis básica

def nombre_funcion(parametros_opcionales):
    """Docstring: Describe qué hace la función (opcional)."""
    # Código de la función
    return resultado_opcional

Componentes

  1. def: Palabra clave que indica el inicio de una definición de función.

  2. Nombre de la función: Un identificador válido que describe la tarea de la función.

  3. Paréntesis: Contienen los parámetros opcionales que la función puede recibir.

  4. return: (Opcional) Palabra clave que devuelve un valor al llamador de la función.

2.6.2 Ejemplos de funciones

  1. Función simple sin parámetros
def saludar():
    """Imprime un saludo simple."""
    print("¡Hola!")

# Llamada a la función
saludar()
¡Hola!
  1. Función con parámetros
def sumar(a, b):
    """Devuelve la suma de dos números."""
    return a + b

# Llamada a la función
resultado = sumar(5, 3)
print(resultado)  # Salida: 8
8
  1. Función con valores predeterminados
def presentar(nombre, edad=18):
    """Imprime una presentación con un valor predeterminado para la edad."""
    print(f"Me llamo {nombre} y tengo {edad} años.")

# Llamadas a la función
presentar("Ana")  # Salida: Me llamo Ana y tengo 18 años.
Me llamo Ana y tengo 18 años.
presentar("Luis", 25)
Me llamo Luis y tengo 25 años.
  1. Función con argumentos variables
def multiplicar(*numeros):
    """Devuelve el producto de todos los números proporcionados."""
    producto = 1
    for num in numeros:
        producto *= num
    return producto

# Llamada a la función
resultado = multiplicar(2, 3, 4)
print(resultado)  # Salida: 24
24

2.6.3 Uso de funciones anónimas (lambdas)

Las funciones lambda son funciones pequeñas y anónimas definidas con la palabra clave lambda. Se usan para operaciones simples.

Ejemplo de lambda

# Función lambda para sumar dos números
sumar = lambda x, y: x + y

print(sumar(4, 6))  # Salida: 10
10

2.6.4 Buenas prácticas al definir funciones

  1. Usa nombres descriptivos para las funciones y parámetros.
  2. Documenta la función con un docstring para describir su propósito.
  3. Evita parámetros excesivos; considera usar *args o **kwargs si es necesario.
  4. Mantén las funciones concisas y enfocadas en una tarea específica.