Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Métodos de Cadena (Ajustando Etiquetas)

Las etiquetas que llegan al almacén rara vez vienen perfectas. El operario teclea "Manzana " con un espacio colado al final, o "MANZANA" porque dejó las mayúsculas activadas. Para tu ojo es lo mismo. Para Python, no:

"Manzana" == "manzana "  # False. Ni la mayúscula ni el espacio perdonan.

Nota: == (doble igual) pregunta “¿son iguales?” y responde True o False. No lo confundas con el = de asignación. El Capítulo 6 se dedica a él.

Este es el bug clásico de los programas que usan input(): el texto se ve bien en pantalla, pero la comparación falla. La solución no es regañar al operario. Es normalizar la etiqueta antes de usarla.

La Estación de Limpieza

Toda cadena (str) trae herramientas integradas llamadas métodos. Se invocan con un punto después del valor o la variable.

¡Ojo!: no modifican la etiqueta original, devuelven una nueva.

Nota: ¿método o función? Una función como len(x) es un operario suelto del almacén: existe por su cuenta y le pasas las cosas entre paréntesis. Un método como x.strip() es una herramienta que viene dentro de la propia caja, por eso se llama con un punto: valor.metodo(). Mismo concepto de fondo (un procedimiento con nombre), distinta forma de invocarlo. No es programación orientada a objetos todavía; solo estás usando las herramientas que cada tipo trae de fábrica.

producto_sucio: str = "  Manzana Roja "

limpio: str = producto_sucio.strip()    # "Manzana Roja", sin bordes
minusculas: str = limpio.lower()        # "manzana roja"
mayusculas: str = limpio.upper()        # "MANZANA ROJA" (etiquetas de ALERTA)
titulo: str = limpio.title()            # "Manzana Roja", para reportes

# El combo estrella: limpiar y bajar a minúsculas en un solo paso
normalizado: str = producto_sucio.strip().lower()
print(normalizado)  # "manzana roja"

El Combo .strip().lower()

Encadenar los dos métodos es el procedimiento estándar antes de comparar cualquier texto que venga de un humano:

respuesta: str = input("¿Qué producto buscas? ").strip().lower()

print(respuesta == "manzana")  # True, sin importar cómo lo haya escrito

Ahora da igual que el operario escriba "Manzana ", "MANZANA" o " manzana". Todas las variantes terminan siendo la misma etiqueta.

Leer Trozos de la Etiqueta (Indexado y Rebanado)

Una cadena es una fila de ranuras, una letra por ranura, numeradas desde el cero. Pides una ranura con corchetes y te devuelve su letra:

codigo: str = "TORNILLO-42"

print(codigo[0])   # "T"  (primera ranura)
print(codigo[8])   # "-"

¿Y la última letra? No tienes que contar cuántas hay. Los índices negativos cuentan desde el final:

codigo: str = "TORNILLO-42"

print(codigo[-1])  # "2"  (el último)
print(codigo[-2])  # "4"

Para sacar un tramo entero se usa el rebanado (slicing): [inicio:fin]. Una sola regla, y es la que más confunde al principio: el inicio entra, el fin no.

codigo: str = "TORNILLO-42"

print(codigo[0:8])
print(codigo[:8])
print(codigo[9:])
print(codigo[-2:])

Antes de correrlo, predice qué imprime cada línea, sobre todo la primera: ¿el índice 8 entra en el corte o se queda fuera?

La salida real: las dos primeras imprimen "TORNILLO" (el 8 marca dónde termina el corte, pero ese índice no se incluye), y las dos últimas imprimen "42".

Indexar y rebanar no es exclusivo del texto. Funciona igual en las listas del próximo capítulo: misma regla del cero, mismos índices negativos, mismo corte que deja el final fuera.

Cortar en Pedazos: .split()

Hay un método más que conviene conocer: .split(",") corta una cadena en pedazos usando la coma como tijera, y devuelve una lista. Lo usaremos a fondo en el capítulo de archivos, cuando el almacén tenga que leer su inventario desde el disco.