🐍 Strings en Python
Monitoría de Lógica y Algoritmia
👋 Bienvenidos
¿Qué vamos a aprender?
Los strings (str) son cadenas de caracteres. En Python aparecen constantemente: nombres, correos, contraseñas, archivos, mensajes, códigos, etc.
En esta monitoría vamos a aprender a:
- crear y explorar strings;
- acceder a caracteres mediante índices y slicing;
- transformar y limpiar texto;
- buscar información;
- separar y unir cadenas;
- validar datos;
- combinar strings con
if, operadores lógicos yinput(); - resolver retos sin depender de memorizar una lista de métodos.
No se trata de memorizar 30 métodos. Se trata de reconocer qué problema tengo y elegir la herramienta adecuada.
1. ¿Qué es un str?
Un string es una cadena de caracteres.
nombre = "Catalina"
universidad = "UPB"
carrera = "Ingeniería Industrial"Podemos comprobar el tipo:
type(nombre)También podemos tener números representados como texto:
edad_numero = 22
edad_texto = "22"
print(type(edad_numero))
print(type(edad_texto))22 y "22" no son lo mismo. El primero es un int; el segundo es un str.
🎯 Mini reto 1
¿Qué tipo tiene cada variable?
a = "2026"
b = 2026
c = "UPB"
d = True2. Conociendo nuestros strings
len()
len() cuenta cuántos caracteres tiene un string.
texto = "Python"
print(len(texto))Resultado:
6
Los espacios también cuentan:
texto = "Hola mundo"
print(len(texto))Resultado:
10
🎯 Reto
¿Cuántos caracteres tiene?
frase = "Ingeniería Industrial"¿El espacio cuenta?
💡 Ver respuesta
Sí. El espacio también es un carácter.
3. Índices y slicing
Python empieza a contar desde 0.
Para:
texto = "PYTHON"tenemos:
P Y T H O N
0 1 2 3 4 5
Podemos acceder a una posición:
print(texto[0])
print(texto[2])
print(texto[5])También podemos usar índices negativos:
print(texto[-1]) # N
print(texto[-2]) # OSlicing
print(texto[0:3])Resultado:
PYT
La posición final no se incluye.
Otros ejemplos:
print(texto[1:4])
print(texto[:3])
print(texto[3:])
print(texto[::-1])En texto[inicio:fin], Python toma desde inicio y se detiene antes de fin.
🎯 Reto 2
Dado:
palabra = "ALGORITMO"Obtén:
- La primera letra.
- La última letra.
"ALGO"."RITMO".- La palabra invertida.
4. Transformar texto
upper()
Convierte las letras a mayúsculas.
texto = "hola mundo"
print(texto.upper())Resultado:
HOLA MUNDO
Los números y símbolos no cambian:
print("Python 2026!".upper())⚠️ Importante
Los strings son inmutables. Esto:
nombre = "catalina"
nombre.upper()
print(nombre)sigue mostrando:
catalina
Para guardar el cambio:
nombre = nombre.upper()🎯 Reto
¿Qué imprime?
texto = "PyThOn 3.14"
print(texto.upper())lower()
Convierte las letras a minúsculas.
texto = "HOLA MUNDO"
print(texto.lower())Una aplicación muy común es normalizar datos recibidos con input():
respuesta = input("¿Desea continuar? ").lower()
if respuesta == "si":
print("Continuamos")"Sí".lower() sigue teniendo tilde: "sí". Si quieres aceptar "si" y "sí", debes contemplar ambas posibilidades.
🎯 Reto
Haz que cualquiera de estas entradas se convierta en "python":
PYTHON
Python
PyThOn
capitalize()
Pone en mayúscula la primera letra y convierte el resto a minúsculas.
texto = "hOLA MUNDO"
print(texto.capitalize())Resultado:
Hola mundo
Compara:
texto = "hOLA MUNDO"
print(texto.upper())
print(texto.capitalize())title()
Pone en mayúscula la primera letra de cada palabra.
nombre = "cAtAlInA góMeZ"
print(nombre.title())Resultado:
Catalina Gómez
Muy útil para nombres:
nombre = input("Nombre completo: ")
nombre = nombre.strip().title()
print(nombre)swapcase()
Intercambia mayúsculas y minúsculas.
texto = "Hola Mundo"
print(texto.swapcase())Resultado:
hOLA mUNDO
🎯 Reto 3
¿Qué imprime?
texto = "PyThOn 2026!"
print(texto.swapcase())5. Limpiar texto
strip()
Elimina espacios al principio y al final.
nombre = " Catalina "
print(nombre.strip())Resultado:
Catalina
No elimina los espacios internos:
texto = " Hola Mundo "
print(texto.strip())Resultado:
Hola Mundo
Una aplicación real:
correo = " ESTUDIANTE@UPB.EDU.CO "
correo = correo.strip().lower()
print(correo)Resultado:
estudiante@upb.edu.co
lstrip()
Elimina espacios de la izquierda.
texto = " Hola "
print(texto.lstrip())rstrip()
Elimina espacios de la derecha.
texto = " Hola "
print(texto.rstrip())lstrip() → izquierda
rstrip() → derecha
strip() → ambos lados
🎯 Reto 4
¿Qué muestra cada línea?
texto = " Python "
print(repr(texto.lstrip()))
print(repr(texto.rstrip()))
print(repr(texto.strip()))Usamos repr() para poder ver los espacios.
6. Reemplazar texto
replace()
Sintaxis:
texto.replace(viejo, nuevo)Ejemplo:
frase = "Me gusta Java"
nueva_frase = frase.replace("Java", "Python")
print(nueva_frase)Resultado:
Me gusta Python
También podemos eliminar caracteres:
telefono = "300-123-4567"
telefono = telefono.replace("-", "")
print(telefono)Podemos limitar cuántos reemplazos hacemos:
texto = "banana"
print(texto.replace("a", "o", 1))Resultado:
bonana
🎯 Reto 5
Transforma:
texto = "Python es difícil. Python requiere práctica."en:
programación es difícil. programación requiere práctica.
7. Buscar información
count()
Cuenta cuántas veces aparece algo.
texto = "banana"
print(texto.count("a"))Resultado:
3
También podemos contar palabras:
frase = "Python es genial y Python es poderoso"
print(frase.count("Python"))🎯 Reto
¿Cuántas veces aparece "o"?
frase = "Hola, ¿cómo estás?"find()
Busca la posición donde aparece un texto.
texto = "Python"
print(texto.find("t"))Resultado:
2
Recuerda:
P y t h o n
0 1 2 3 4 5
Si no encuentra el texto:
print(texto.find("z"))Resultado:
-1
Una aplicación:
correo = "estudiante@upb.edu.co"
if correo.find("@") != -1:
print("Tiene @")Aunque normalmente es más claro:
if "@" in correo:
print("Tiene @")rfind()
Busca desde la derecha.
texto = "banana"
print(texto.find("a"))
print(texto.rfind("a"))Resultado:
1
5
index()
Es parecido a find(), pero hay una diferencia importante.
texto = "Python"
print(texto.index("t"))→ 2
Si no encuentra el texto, index() produce un ValueError, mientras find() devuelve -1.
Si no estás seguro de que el texto exista, find() puede ser más conveniente.
8. ¿El texto comienza o termina así?
startswith()
archivo = "reporte_final.pdf"
print(archivo.startswith("reporte"))→ True
print(archivo.startswith("tesis"))→ False
endswith()
archivo = "datos.xlsx"
print(archivo.endswith(".xlsx"))→ True
Aplicación:
archivo = input("Nombre del archivo: ")
if archivo.endswith(".csv"):
print("Es un CSV")
elif archivo.endswith(".xlsx"):
print("Es un Excel")
else:
print("Formato diferente")🎯 Reto 6
Haz un programa que reciba un nombre de archivo y diga si es:
.pdf.csv.xlsx- otro formato
9. Separar información
split()
Convierte un string en una lista.
frase = "Python es muy interesante"
palabras = frase.split()
print(palabras)Resultado:
['Python', 'es', 'muy', 'interesante']Podemos usar un separador específico:
datos = "Catalina,Gómez,Industrial,9"
print(datos.split(","))Resultado:
['Catalina', 'Gómez', 'Industrial', '9']Y luego acceder a cada elemento:
datos = "Catalina,Gómez,Industrial,9"
partes = datos.split(",")
print(partes[0])
print(partes[1])
print(partes[2])
print(partes[3])🎯 Reto 7
Dado:
datos = "Ana|22|Ingeniería|UPB"separa la información y muestra:
Nombre: Ana
Edad: 22
Carrera: Ingeniería
Universidad: UPB
10. Unir información
join()
Hace el proceso contrario a split().
palabras = ["Python", "es", "genial"]
frase = " ".join(palabras)
print(frase)Resultado:
Python es genial
También:
numeros = ["2026", "08", "18"]
fecha = "-".join(numeros)
print(fecha)Resultado:
2026-08-18
split():
string → lista
join():
lista → string
🎯 Reto 8
Dada:
palabras = ["Ingeniería", "Industrial", "UPB"]obtén:
Ingeniería - Industrial - UPB
11. Validar información
Los métodos que empiezan con is... normalmente devuelven True o False.
isdigit()
Comprueba si todos los caracteres son dígitos.
print("123".isdigit())
print("123a".isdigit())Resultado:
True
False
Muy útil con input():
edad = input("Edad: ")
if edad.isdigit():
edad = int(edad)
print("Edad registrada:", edad)
else:
print("Debes ingresar un número")input() devuelve un str, incluso si el usuario escribe un número.
isdecimal()
También valida caracteres decimales.
print("123".isdecimal())
print("abc".isdecimal())Para esta monitoría, basta con entender que es una validación más específica relacionada con caracteres decimales.
isnumeric()
Comprueba si los caracteres representan valores numéricos.
print("123".isnumeric())
print("Hola".isnumeric())Pregunta:
"12.5".isnumeric()¿Será True?
No. El punto . hace que no sea una cadena formada únicamente por caracteres numéricos.
isalpha()
Comprueba si todos los caracteres son letras.
print("Hola".isalpha())
print("Hola123".isalpha())
print("Hola Mundo".isalpha())Los dos últimos son False.
¿Por qué?
Hola123contiene números.Hola Mundocontiene un espacio.
isalnum()
Comprueba si contiene únicamente letras y números.
print("ABC123".isalnum())
print("ABC 123".isalnum())Resultado:
True
False
isspace()
Comprueba si todos los caracteres son espacios.
print(" ".isspace())
print(" Hola ".isspace())islower() e isupper()
print("hola".islower())
print("HOLA".isupper())También:
print("Hola".islower())
print("Hola".isupper())Ambos serán False.
istitle()
Comprueba si el texto está en formato título.
print("Hola Mundo".istitle())
print("hola mundo".istitle())isidentifier()
Comprueba si un string puede tener la forma de un identificador válido de Python.
print("nombre".isidentifier())
print("nombre_123".isidentifier())
print("123nombre".isidentifier())
print("mi nombre".isidentifier())Resultado:
True
True
False
False
Esto conecta directamente con las reglas para nombrar variables.
12. in: comprobar si algo está dentro
No necesitamos escribir __contains__() directamente.
Usamos:
texto = "Python"
print("Py" in texto)
print("Java" in texto)Resultado:
True
False
Aplicación:
correo = "estudiante@upb.edu.co"
if "@" in correo:
print("El correo contiene @")También podemos usar not in:
if " " not in usuario:
print("No contiene espacios")in es una herramienta fundamental para preguntar si un elemento está contenido en otro.
13. Métodos especiales: los __dunder__
En dir() también aparecen elementos como:
__add__
__class__
__contains__
__eq__
__getitem__
__len__
__str__
Estos son métodos especiales.
Por ejemplo:
texto = "Hola"
len(texto)está relacionado internamente con:
texto.__len__()Y:
texto[0]está relacionado con:
texto.__getitem__(0)No necesitas memorizar ni usar directamente estos métodos en esta monitoría. Lo importante es reconocer que Python los utiliza para definir el comportamiento de los objetos.
14. 🧩 Retos de integración
Ahora dejamos de preguntar:
“¿Qué hace
strip()?”
y empezamos a preguntar:
“Tengo este problema. ¿Qué herramientas necesito?”
🟢 Reto 1 — Nombre
nombre = " mARia jOsE pEReZ "Obtén:
Maria Jose Perez
Pistas:
- necesitas eliminar espacios;
- necesitas transformar el formato.
🟢 Reto 2 — Correo
correo = " ESTUDIANTE@UPB.EDU.CO "Obtén:
estudiante@upb.edu.co
Después verifica si termina en:
@upb.edu.co
🟡 Reto 3 — Usuario
Solicita un usuario:
usuario = input("Ingrese su usuario: ")Debe ser válido si:
- tiene mínimo 5 caracteres;
- contiene únicamente letras y números.
¿Qué dos herramientas necesitas?
🟡 Reto 4 — Teléfono
Solicita:
telefono = input("Ingrese su teléfono: ")El programa debe comprobar que contiene únicamente números.
Si es válido:
Teléfono válido
Si no:
Teléfono no válido
🟡 Reto 5 — Frase
Dado:
frase = "Python es fácil y Python es poderoso"El programa debe mostrar:
- número de palabras;
- número de veces que aparece
"Python"; - primera palabra;
- última palabra.
15. 🏆 Reto final
Construye un pequeño programa de registro:
nombre = input("Nombre completo: ")
correo = input("Correo: ")
telefono = input("Teléfono: ")El programa debe:
- limpiar espacios innecesarios;
- convertir el nombre a formato título;
- convertir el correo a minúsculas;
- comprobar que el correo contiene
@; - comprobar que el teléfono contiene únicamente números;
- mostrar la longitud del nombre;
- mostrar todos los datos organizados.
💭 No hay una única solución
La meta no es copiar un código.
La meta es que puedas responder:
¿Qué problema tengo y qué herramienta de Python me ayuda a resolverlo?
16. 🧠 Mapa rápido de herramientas
| Necesito… | Uso… |
|---|---|
| Mayúsculas | upper() |
| Minúsculas | lower() |
| Primera letra mayúscula | capitalize() |
| Cada palabra con mayúscula inicial | title() |
| Intercambiar mayúsculas/minúsculas | swapcase() |
| Quitar espacios extremos | strip() |
| Reemplazar texto | replace() |
| Contar apariciones | count() |
| Buscar una posición | find() |
| Buscar desde la derecha | rfind() |
| Saber si empieza con algo | startswith() |
| Saber si termina con algo | endswith() |
| Separar texto | split() |
| Unir elementos | join() |
| Comprobar números | isdigit() |
| Comprobar letras | isalpha() |
| Letras + números | isalnum() |
| Comprobar espacios | isspace() |
| Comprobar minúsculas | islower() |
| Comprobar mayúsculas | isupper() |
| Buscar contenido | in |
| Contar caracteres | len() |
🚀 ¿Qué sigue?
Ya conoces varias herramientas. Ahora viene la parte verdaderamente importante:
PROBLEMA
↓
¿QUÉ INFORMACIÓN TENGO?
↓
¿QUÉ NECESITO OBTENER?
↓
¿QUÉ HERRAMIENTA PUEDO USAR?
↓
CÓDIGO
↓
PRUEBA
↓
¿FUNCIONA?
🎓 Recuerda
Programar no es memorizar funciones.
Programar es descomponer un problema y elegir las herramientas adecuadas para resolverlo.
📚 Referencias
Las siguientes fuentes fueron consultadas para complementar los conceptos de strings y métodos de cadenas en Python:
Python Software Foundation. Built-in Types — Text Sequence Type — str. Python Documentation.
https://docs.python.org/3/library/stdtypes.html#text-sequence-type-strPython Software Foundation. Built-in Functions. Python Documentation.
https://docs.python.org/3/library/functions.htmlPython Software Foundation. The Python Tutorial — Data Structures. Python Documentation.
https://docs.python.org/3/tutorial/datastructures.htmlPython Software Foundation. The Python Tutorial — More Control Flow Tools. Python Documentation.
https://docs.python.org/3/tutorial/controlflow.html
📝 Nota sobre el material
Este recurso fue elaborado como material de apoyo para la Monitoría de Lógica y Algoritmia.
Los ejemplos y retos fueron diseñados con fines educativos y buscan complementar la documentación oficial de Python mediante explicaciones prácticas y ejercicios progresivos.
Fuente principal: Python Software Foundation, documentación oficial de Python.