📝 Strings y Formateo
🔤 Conceptos básicos
Un string es una serie de caracteres. En Python, todo lo que está entre comillas (simples o dobles) es un string. Puedes acceder a caracteres individuales usando índices, donde el primer carácter está en la posición 0.
→ Python Crash Course, Capítulo 2, pp. 19-25
texto = "Hola Mundo"
# Acceder a caracteres (índice empieza en 0)
texto[0] # 'H'
texto[4] # ' ' (espacio)
texto[-1] # 'o' (último)
texto[-2] # 'd' (penúltimo)
# Longitud
len(texto) # 10
✂️ Slicing (rebanado)
El slicing permite extraer una porción de un string usando la sintaxis [inicio:fin].
El índice de inicio está incluido, pero el de fin NO. Si omites el inicio, empieza desde 0;
si omites el fin, va hasta el final.
→ Python Crash Course, Capítulo 4, pp. 61-62
s = "ABCDEFGHIJ"
# 0123456789
s[0:3] # 'ABC' (posiciones 0, 1, 2)
s[2:5] # 'CDE'
s[:4] # 'ABCD' (desde el inicio)
s[6:] # 'GHIJ' (hasta el final)
s[-3:] # 'HIJ' (últimos 3)
s[::-1] # 'JIHGFEDCBA' (invertir)
s[::-1] invierte cualquier string o lista.
Es la forma más rápida de comprobar palíndromos.
Ejemplos prácticos de slicing
# Primer carácter
s[0]
# Último carácter
s[-1]
# Todo menos el primero
s[1:]
# Todo menos el último
s[:-1]
# Primeros N caracteres
s[:n]
# Últimos N caracteres
s[-n:]
# ¿Es palíndromo?
if s == s[::-1]:
print("Es palíndromo")
🛠️ Métodos de strings esenciales
Los métodos son funciones que pertenecen a un objeto. Los strings tienen muchos métodos útiles
como lower(), upper(), strip(). Se llaman con un punto
después del string: texto.lower().
→ Python Crash Course, Capítulo 2, pp. 20-23
Cambiar mayúsculas/minúsculas
s = "Hola Mundo"
s.lower() # 'hola mundo'
s.upper() # 'HOLA MUNDO'
s.capitalize() # 'Hola mundo' (solo primera)
s.title() # 'Hola Mundo' (cada palabra)
s.swapcase() # 'hOLA mUNDO'
Buscar y comprobar
s = "programación en python"
# Buscar posición (devuelve -1 si no encuentra)
s.find("python") # 16
s.find("java") # -1
# Comprobar si contiene
"python" in s # True
"java" in s # False
# Comprobar inicio/fin
s.startswith("prog") # True
s.endswith("thon") # True
# Contar ocurrencias
s.count("o") # 3
Limpiar espacios
s = " hola mundo "
s.strip() # 'hola mundo' (quita ambos lados)
s.lstrip() # 'hola mundo ' (solo izquierda)
s.rstrip() # ' hola mundo' (solo derecha)
strip() para limpiar antes de comparar.
Dividir y unir
# split(): string → lista
"uno dos tres".split() # ['uno', 'dos', 'tres']
"a,b,c".split(",") # ['a', 'b', 'c']
"hola".split() # ['hola'] (1 elemento)
# join(): lista → string
" ".join(["uno", "dos"]) # 'uno dos'
",".join(["a", "b", "c"]) # 'a,b,c'
"".join(["h", "o", "l", "a"]) # 'hola'
Reemplazar
s = "hola mundo"
s.replace("mundo", "python") # 'hola python'
s.replace("o", "0") # 'h0la mund0' (todas)
s.replace("o", "0", 1) # 'h0la mundo' (solo 1)
Comprobar tipo de contenido
"abc".isalpha() # True (solo letras)
"123".isdigit() # True (solo dígitos)
"abc123".isalnum() # True (letras y/o dígitos)
"ABC".isupper() # True (todas mayúsculas)
"abc".islower() # True (todas minúsculas)
" ".isspace() # True (solo espacios)
🎯 Patrones comunes en CodeWars
1. Invertir palabras (no letras)
# "hola mundo" → "mundo hola"
texto = input()
palabras = texto.split()
resultado = " ".join(palabras[::-1])
print(resultado)
2. Capitalizar cada palabra
# "hola mundo" → "Hola Mundo"
texto = input()
print(texto.title())
# O manualmente (más control):
palabras = texto.split()
resultado = " ".join(p.capitalize() for p in palabras)
print(resultado)
3. Verificar palíndromo
texto = input().lower().replace(" ", "")
if texto == texto[::-1]:
print("Es palindromo")
else:
print("No es palindromo")
4. Contar vocales
texto = input().lower()
vocales = "aeiou"
contador = 0
for letra in texto:
if letra in vocales:
contador += 1
print(contador)
# Versión corta:
print(sum(1 for c in texto if c in "aeiouAEIOU"))
5. Extraer números de un texto
texto = "tengo 3 manzanas y 5 peras"
numeros = [int(c) for c in texto.split() if c.isdigit()]
# [3, 5]
6. Eliminar caracteres repetidos consecutivos
# "aaabbbccc" → "abc"
texto = input()
resultado = texto[0]
for i in range(1, len(texto)):
if texto[i] != texto[i-1]:
resultado += texto[i]
print(resultado)
🔢 Formateo de números
n = 3.14159265
# Decimales fijos
f"{n:.2f}" # '3.14'
f"{n:.3f}" # '3.142' (redondea)
f"{n:.0f}" # '3'
# Ancho mínimo (rellena con espacios)
f"{n:10.2f}" # ' 3.14' (10 caracteres total)
# Rellenar con ceros
x = 42
f"{x:05d}" # '00042' (5 dígitos)
# Porcentaje
p = 0.756
f"{p:.1%}" # '75.6%'
✅ Ejercicios de práctica
👁️ Ver solución
frase = input().lower()
palabras = frase.split()
contador = 0
for p in palabras:
if p[0] in "aeiou":
contador += 1
print(contador)
👁️ Ver solución
texto = input()
palabras = texto.split()
mas_larga = ""
for p in palabras:
if len(p) > len(mas_larga):
mas_larga = p
print(mas_larga)
# Versión corta:
print(max(input().split(), key=len))
👁️ Ver solución
texto = input()
resultado = ""
for c in texto:
if c.lower() not in "aeiou":
resultado += c
print(resultado)
# Versión corta:
print("".join(c for c in input() if c.lower() not in "aeiou"))