
Fundamentos de Python
Fundamentos de Python
Python es un lenguaje de programación de alto nivel, interpretado y de propósito general. Es conocido por su filosofía de diseño que enfatiza la legibilidad del código con su notable uso de espacios en blanco significativos.
Instalación y Configuración
Windows
- Descarga el instalador desde python.org
- Ejecuta el instalador y marca la opción “Add Python to PATH”
- Verifica la instalación abriendo una terminal y escribiendo:
python --version
macOS
- Instala Homebrew si no lo tienes:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Instala Python con Homebrew:
brew install python
- Verifica la instalación con:
python3 --version
Linux
En la mayoría de distribuciones Linux, Python ya viene preinstalado. Puedes verificar con:
python3 --version
Si no está instalado:
sudo apt update
sudo apt install python3 python3-pip
Sintaxis Básica
Variables y Tipos de Datos
Python es un lenguaje de tipado dinámico, lo que significa que no necesitas declarar el tipo de una variable:
# Enteros
edad = 25
# Flotantes
altura = 1.75
# Strings (cadenas de texto)
nombre = "Ana"
apellido = 'García' # Puedes usar comillas simples o dobles
# Booleanos
es_estudiante = True
es_mayor_de_edad = False
# Listas (arrays mutables)
colores = ["rojo", "verde", "azul"]
# Tuplas (arrays inmutables)
coordenadas = (10, 20)
# Diccionarios (pares clave-valor)
persona = {"nombre": "Juan", "edad": 30, "ciudad": "Santiago"}
# Sets (conjuntos sin elementos duplicados)
numeros_unicos = {1, 2, 3, 4, 5}
Operadores
Aritméticos
suma = 5 + 3 # 8
resta = 5 - 3 # 2
multiplicacion = 5 * 3 # 15
division = 5 / 3 # 1.6666...
division_entera = 5 // 3 # 1
modulo = 5 % 3 # 2
potencia = 5 ** 3 # 125
Comparación
igual = 5 == 3 # False
diferente = 5 != 3 # True
mayor = 5 > 3 # True
menor = 5 < 3 # False
mayor_igual = 5 >= 3 # True
menor_igual = 5 <= 3 # False
Lógicos
and_logico = True and False # False
or_logico = True or False # True
not_logico = not True # False
Estructuras de Control
Condicionales
edad = 18
if edad < 18:
print("Menor de edad")
elif edad == 18:
print("Justo en el límite")
else:
print("Mayor de edad")
Bucles
For
# Iterando sobre una lista
frutas = ["manzana", "banana", "cereza"]
for fruta in frutas:
print(fruta)
# Iterando con range
for i in range(5): # 0, 1, 2, 3, 4
print(i)
# Iterando con enumerate
for indice, fruta in enumerate(frutas):
print(f"Índice {indice}: {fruta}")
While
contador = 0
while contador < 5:
print(contador)
contador += 1
Funciones
# Definición básica
def saludar(nombre):
return f"Hola, {nombre}!"
# Llamada a la función
mensaje = saludar("María")
print(mensaje) # Hola, María!
# Función con parámetros por defecto
def saludar_formal(nombre, titulo="Sr./Sra."):
return f"Saludos, {titulo} {nombre}"
print(saludar_formal("Pérez")) # Saludos, Sr./Sra. Pérez
print(saludar_formal("García", "Dr.")) # Saludos, Dr. García
# Función con número variable de argumentos
def sumar(*numeros):
resultado = 0
for num in numeros:
resultado += num
return resultado
print(sumar(1, 2, 3, 4, 5)) # 15
Estructuras de Datos
Listas
# Crear una lista
numeros = [1, 2, 3, 4, 5]
# Acceder a elementos
primer_numero = numeros[0] # 1
ultimo_numero = numeros[-1] # 5
# Slicing (rebanado)
primeros_tres = numeros[0:3] # [1, 2, 3]
desde_el_segundo = numeros[1:] # [2, 3, 4, 5]
hasta_el_cuarto = numeros[:4] # [1, 2, 3, 4]
# Modificar elementos
numeros[0] = 10
print(numeros) # [10, 2, 3, 4, 5]
# Añadir elementos
numeros.append(6) # [10, 2, 3, 4, 5, 6]
numeros.insert(1, 15) # [10, 15, 2, 3, 4, 5, 6]
# Eliminar elementos
numeros.remove(3) # Elimina el valor 3
eliminado = numeros.pop(2) # Elimina y devuelve el elemento en el índice 2
# Longitud
longitud = len(numeros)
Diccionarios
# Crear un diccionario
estudiante = {
"nombre": "Carlos",
"edad": 22,
"carrera": "Ingeniería",
"promedio": 6.7
}
# Acceder a valores
nombre = estudiante["nombre"] # Carlos
edad = estudiante.get("edad") # 22
# Modificar valores
estudiante["promedio"] = 6.8
# Añadir nuevos pares clave-valor
estudiante["semestre"] = 6
# Eliminar pares
del estudiante["edad"]
carrera = estudiante.pop("carrera")
# Verificar si una clave existe
if "nombre" in estudiante:
print("El nombre está definido")
# Iterar sobre un diccionario
for clave in estudiante:
print(f"{clave}: {estudiante[clave]}")
# Iterar sobre pares clave-valor
for clave, valor in estudiante.items():
print(f"{clave}: {valor}")
Manejo de Excepciones
try:
numero = int(input("Ingresa un número: "))
resultado = 10 / numero
print(f"El resultado es: {resultado}")
except ValueError:
print("Error: Debes ingresar un número válido")
except ZeroDivisionError:
print("Error: No puedes dividir por cero")
except Exception as e:
print(f"Ocurrió un error inesperado: {e}")
finally:
print("Este bloque siempre se ejecuta, haya error o no")
Importación de Módulos
# Importar un módulo completo
import math
raiz_cuadrada = math.sqrt(25) # 5.0
# Importar funciones específicas
from datetime import datetime, timedelta
ahora = datetime.now()
manana = ahora + timedelta(days=1)
# Importar con alias
import numpy as np
matriz = np.array([1, 2, 3, 4, 5])
# Importar todo (no recomendado generalmente)
from math import *
seno = sin(3.14/2) # Aproximadamente 1
Programación Orientada a Objetos
class Persona:
# Constructor
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
self._privado = "Este atributo es privado por convención"
# Método
def saludar(self):
return f"Hola, me llamo {self.nombre} y tengo {self.edad} años"
# Método estático
@staticmethod
def es_adulto(edad):
return edad >= 18
# Property (getter)
@property
def nombre_completo(self):
return f"{self.nombre} Apellido"
# Setter
@nombre_completo.setter
def nombre_completo(self, valor):
self.nombre = valor.split()[0]
# Crear instancia
juan = Persona("Juan", 25)
print(juan.saludar())
# Herencia
class Estudiante(Persona):
def __init__(self, nombre, edad, carrera):
super().__init__(nombre, edad)
self.carrera = carrera
# Sobrescribir método
def saludar(self):
return f"{super().saludar()}. Estudio {self.carrera}"
maria = Estudiante("María", 22, "Informática")
print(maria.saludar())
Gestión de Archivos
# Escribir en un archivo
with open("ejemplo.txt", "w") as archivo:
archivo.write("Esta es la primera línea\n")
archivo.write("Esta es la segunda línea\n")
# Leer de un archivo
with open("ejemplo.txt", "r") as archivo:
contenido = archivo.read()
print(contenido)
# Leer línea por línea
with open("ejemplo.txt", "r") as archivo:
for linea in archivo:
print(linea.strip()) # strip() elimina espacios en blanco y saltos de línea
# Añadir a un archivo existente
with open("ejemplo.txt", "a") as archivo:
archivo.write("Esta línea se añade al final\n")