- Aprender
- Informática
- Programación
- Introducción a la programación con Python
- Cadenas de caracteres en Python
Trabaja con cadenas de caracteres en Python
PrincipianteUnidad 5 de 10 del curso Curso de Introducción a la programación con Python
Lo que aprenderás
- Escribe literales de cadena, mide y combina cadenas, y usa índices y segmentos para acceder a cualquier carácter o sección de un texto.
- Escribe literales de cadena y combina cadenasCrea cadenas con comillas, secuencias de escape y comillas triples, calcula su longitud con
len()y combínalas con+y*. - Selecciona caracteres individuales mediante índicesUsa índices positivos y negativos para leer cualquier carácter de una cadena y evita los errores de desfase de una unidad (off-by-one) y los de cadenas vacías que lanzan
IndexError. - Extrae segmentos de una cadenaExtrae subcadenas con
[start:stop]y[start:stop:step], usa posiciones omitidas y negativas, y predice exactamente qué caracteres incluye un segmento.
- Escribe literales de cadena y combina cadenas
- Recorre una cadena con un bucle para contar, buscar y construir texto, teniendo en cuenta que los caracteres de una cadena nunca pueden modificarse sobre el objeto original.
- Recorre los caracteres de una cadena con un bucleVisita cada carácter con bucles
forywhile, usa las posiciones cuando sean relevantes y aplica al texto los patrones de conteo, búsqueda y acumulación. - Construye cadenas nuevas en lugar de modificar las existentesExplica qué significa que las cadenas sean inmutables y produce texto modificado mediante segmentos, concatenación y reasignación.
- Recorre los caracteres de una cadena con un bucle
- Llama a métodos de cadena para cambiar entre mayúsculas y minúsculas y limpiar texto, buscar y contar subcadenas, y comprobar qué contiene una cadena antes de usarla.
- Cambia entre mayúsculas y minúsculas y limpia texto con métodosLlama a métodos con notación de punto para cambiar entre mayúsculas y minúsculas, eliminar caracteres no deseados, sustituir texto y añadir relleno a las cadenas, y encadena varios métodos.
- Busca texto dentro de una cadenaComprueba si aparece una subcadena, encuentra dónde empieza, cuenta cuántas veces aparece y usa las posiciones encontradas para extraer texto.
- Comprueba y compara cadenasComprueba cómo empieza o termina una cadena y de qué está formada, valida los datos de entrada antes de convertirlos y predice cómo compara y ordena Python las cadenas.
- Cambia entre mayúsculas y minúsculas y limpia texto con métodos
- Divide una línea de texto en palabras o campos con
split()y vuelve a combinar las partes en una sola cadena conjoin().- Divide una cadena en una lista de partesUsa
split()con y sin separador, limita el número de divisiones y convierte las partes de una línea en los valores que necesita un programa. - Une cadenas con un separadorCombina muchas cadenas en una con
join(), elige el separador, convierte primero los elementos que no sean cadenas y combinasplit()conjoin()para reorganizar el texto.
- Divide una cadena en una lista de partes
- Construye una salida clara insertando valores en el texto con cadenas formateadas, dando un formato legible a números, fechas y horas, y alineando los resultados en columnas.
- Inserta valores en el texto con cadenas formateadasEscribe cadenas formateadas que incorporen al texto los valores de variables y expresiones, y reconoce los estilos anteriores con
format()y%en código existente. - Da un formato legible a números, fechas y horasAñade especificadores de formato para controlar las cifras decimales, el redondeo, los separadores de miles, los porcentajes, los signos y el relleno con ceros, y construye fechas y horas al estilo estadounidense.
- Alinea la salida en columnasEstablece anchuras de campo, alineación y caracteres de relleno, acorta el texto largo y combina estas opciones para imprimir tablas y recibos alineados.
- Inserta valores en el texto con cadenas formateadas
Guía de estudio de Cadenas de caracteres en Python
1Crea cadenas y selecciona sus partes
El texto de un programa tiene tanto contenido como posición. Un nombre puede contener un espacio, un mensaje puede contener un salto de línea y un código puede mantener sus dos primeras letras separadas de su número. Puedes crear estas cadenas, combinarlas y seleccionar exactamente los caracteres que necesitas. Empieza por distinguir cómo se escribe el texto en Python del valor que contiene y después usa un esquema de posiciones para predecir el comportamiento de los índices y los segmentos.
1.1 Escribe literales de cadena y combina cadenas
Una cadena de caracteres es una secuencia de caracteres de tipo str. Puede contener un nombre, una oración, un código o ningún carácter. Python conserva los caracteres en orden, incluidos los espacios y los signos de puntuación.
Escribe el valor entre comillas del mismo tipo
Las comillas simples y dobles crean el mismo tipo de valor: 'hello' y "hello" son iguales. Las comillas externas marcan los límites; no son caracteres del valor. Elige unas comillas que permitan leer fácilmente las que haya dentro:
message = "It's late"
reply = 'She said "yes"'
empty = ""
En 'It's late', el apóstrofo cierra la cadena demasiado pronto y provoca un SyntaxError. Las comillas dobles lo resuelven, o puedes escribir 'It\'s late'. Usa comillas rectas en el código.
Almacena saltos de línea y barras inversas
Una secuencia de escape empieza con una barra inversa. Python interpreta \n como un salto de línea, \t como una tabulación y \\ como una barra inversa. Las comillas con escape, \' y \", introducen caracteres de comillas en el texto.
text = "a\nb"
print(len(text)) # 3
print(text)
La última llamada imprime a y b en líneas separadas. El valor tiene tres caracteres: a, un salto de línea y b. Las secuencias de escape se procesan cuando Python lee el literal. La consola muestra una representación con comillas y secuencias de escape donde hacen falta; print() muestra los propios caracteres. Por ejemplo, "\x41" se convierte en "A", por lo que la consola no necesita mostrar la secuencia de escape original.
Las comillas triples permiten que un literal ocupe varias líneas. Cada salto de línea de su interior se convierte en un carácter de salto de línea:
notice = """Door closed
Use side entrance"""
Una cadena sin procesar tiene una r antes de sus comillas. En r"C:\new", la barra inversa y la n se mantienen separadas, lo que da seis caracteres. En "C:\new", \n se convierte en un salto de línea, lo que da cinco. Los literales sin procesar son útiles cuando las barras inversas forman parte del texto.
Mide y combina texto
len() cuenta todos los caracteres, incluidos los espacios: len("Hi there!") es 9, y len("") es 0. Más exactamente, cuenta puntos de código Unicode. len("café") es 4 cuando é es un solo punto de código; len("👍🏽") es 2, aunque el emoji parezca un solo símbolo.
Usa + para concatenar cadenas y * para repetir una:
first = "Ada"
last = "Lovelace"
full = first + " " + last # "Ada Lovelace"
rule = "-" * 10 # ten dashes
La concatenación no inserta nada por ti. Sin " ", los nombres se convierten en "AdaLovelace". Repetir "ab" cero veces da la cadena vacía.
Decide si los dígitos son texto o números
Ambos operandos de una concatenación de cadenas deben ser cadenas. "Age: " + 30 lanza TypeError; "Age: " + str(30) da "Age: 30". A la inversa, input() devuelve texto: "3" + "4" da "34". Para sumar sus valores numéricos, conviértelos primero: int("3") + int("4") da 7.
Puntos clave
- Una cadena almacena una secuencia ordenada de caracteres; sus comillas externas forman parte de la sintaxis.
es un carácter de salto de línea, mientras que los literales sin procesar mantienen separadas la barra inversa y la letra que la sigue.len()cuenta puntos de código, incluidos los espacios y los signos de puntuación.+une cadenas sin añadir espacios;*repite una cadena.- Convierte el texto en números para hacer operaciones aritméticas y los números en texto para concatenar.
1.2 Selecciona caracteres individuales mediante índices
Un índice selecciona un carácter por su posición. Python empieza a contar en cero, por lo que la posición de un carácter es una unidad menor que su lugar en un conteo habitual desde la izquierda.
Dibuja las posiciones
Para word = "Python", cada carácter tiene un índice no negativo y un índice negativo:
| Carácter | P | y | t | h | o | n |
|---|---|---|---|---|---|---|
| Desde el inicio | 0 | 1 | 2 | 3 | 4 | 5 |
| Desde el final | -6 | -5 | -4 | -3 | -2 | -1 |
word = "Python"
print(word[0]) # P
print(word[1]) # y
print(word[-1]) # n
Los corchetes situados después de la cadena seleccionan el carácter. El resultado es una cadena de longitud uno: Python no tiene un tipo independiente para caracteres. Puedes unir los caracteres seleccionados, por lo que word[0] + word[-1] da "Pn".
Para una longitud n, los índices válidos van de -n a n - 1 cuando n > 0. Los índices no negativos cuentan desde el inicio; los negativos cuentan desde el final. Un índice -k selecciona el mismo carácter que n - k; en esta palabra de seis caracteres, tanto -2 como 4 seleccionan "o".
Distingue la longitud del último índice
len(word) es 6, pero word[6] lanza IndexError: no hay un séptimo carácter. El último carácter es word[len(word) - 1] o, simplemente, word[-1]. Ir demasiado lejos desde cualquiera de los extremos falla; word[-7] también lanza IndexError.
Un índice debe ser un número entero. word[1.0] lanza TypeError aunque el número de coma flotante tenga un valor entero. Usa // al calcular una posición central:
word = "Pyt"
middle = len(word) // 2 # 1
print(word[middle]) # y
El operador / produciría 1.5, que no puede usarse como índice de una cadena. Para una longitud impar, len(word) // 2 selecciona el carácter central. Para una longitud par, selecciona el de la derecha de los dos caracteres centrales: "Python"[3] es "h".
Construye iniciales a partir de los primeros caracteres
first = "Grace"
last = "Hopper"
initials = first[0] + last[0]
print(initials) # GH
Cada nombre aporta su carácter del índice 0. Usar first[-1] aportaría "e", la última letra. Este método requiere que cada nombre tenga al menos un carácter.
Comprueba si la entrada está vacía antes de usar un índice
La cadena vacía tiene longitud cero y ningún índice de carácter válido. ""[0] lanza IndexError. Una comprobación de longitud puede evitar que un programa lea un carácter que no existe:
line = input("Comment: ")
if len(line) > 0 and line[0] == "#":
print("Comment line")
Python evalúa and de izquierda a derecha. Si la comprobación de longitud es falsa, omite line[0]. Invertir esas dos comprobaciones intentaría primero el acceso mediante el índice inseguro. Cuando solo necesitas saber si una línea empieza por "#", line.startswith("#") también funciona con una entrada vacía y devuelve False.
Puntos clave
- El índice 0 selecciona el primer carácter; el índice -1 selecciona el último.
- El último índice no negativo es
len(text) - 1. - El acceso mediante índices devuelve una cadena de un carácter y lanza
IndexErrorsi la posición no existe. - Usa un índice entero y comprueba si la entrada está vacía antes de seleccionar un carácter.
1.3 Extrae segmentos de una cadena
Un segmento selecciona una secuencia continua de caracteres y la devuelve como una cadena. Te permite tomar un prefijo, eliminar un final o separar campos que ocupan posiciones fijas.
Se incluye el inicio y se excluye el final
Escribe text[start:stop]. Con s = "Monty Python", s[0:5] da "Monty", y s[6:12] da "Python". El espacio está en el índice 5, por lo que el segundo segmento empieza en 6.
Imagina los números del segmento como huecos. El hueco 0 está antes del primer carácter y el hueco 5 está después de los primeros cinco. Tomar todo lo que hay entre ellos da cinco caracteres. Para 0 <= start <= stop <= len(text), la longitud es stop - start.
word = "Monty"
print(word[0:4]) # Mont
print(word[0:5]) # Monty
La posición final es la primera posición que queda fuera. Sumar uno al último índice deseado incluye ese último carácter.
Omite un límite
| Segmento | Significado | Resultado para s |
|---|---|---|
s[:5] | Desde el inicio hasta la posición 4 | "Monty" |
s[6:] | Desde la posición 6 hasta el final | "Python" |
s[:] | Cadena completa | "Monty Python" |
s[-6:] | Últimos seis caracteres | "Python" |
s[:-1] | Todo excepto el último carácter | "Monty Pytho" |
En cualquier posición de división k, s[:k] + s[k:] devuelve s. Los segmentos se encuentran en el mismo hueco, sin que falte ni se repita ningún carácter.
Los límites de un segmento que superan los extremos se ajustan. "cat"[1:100] es "at"; "cat"[5:] es "". Para un segmento que avanza hacia delante, un inicio situado en el límite final o después da una cadena vacía, como en s[4:2]. A diferencia de un índice de un solo carácter, un segmento fuera de rango no lanza IndexError.
Elige un paso
La tercera posición de text[start:stop:step] establece cuánto avanzar entre las posiciones seleccionadas:
letters = "abcdefgh"
print(letters[::2]) # aceg
print(letters[1::2]) # bdfh
print(letters[::-1]) # hgfedcba
Un paso negativo retrocede. Con ambos límites omitidos, [::-1] empieza en el último carácter y visita todos los caracteres en orden inverso. Un paso de cero lanza ValueError. La dirección debe concordar con los límites: la regla anterior del resultado vacío cuando «el inicio está en el límite final o después» corresponde a un paso positivo.
Aplica segmentos a una estructura fija
d = "2026-07-04"
year = d[:4]
month = d[5:7]
day = d[8:10]
print(month + "/" + day + "/" + year) # 07/04/2026
Las posiciones funcionan porque esta estructura siempre usa cuatro dígitos para el año y dos para el mes y el día. El texto con campos de longitud variable necesita una búsqueda o una división.
La inversión también permite comprobar si una palabra es un palíndromo: word == word[::-1]. "level" cumple la condición, pero "Level" no, porque se distingue entre mayúsculas y minúsculas. Asigna clean = word.lower() y comprueba clean == clean[::-1] para ignorar esa distinción.
Puntos clave
- Un segmento incluye su inicio y excluye su límite final.
- Los límites omitidos y las posiciones negativas facilitan seleccionar prefijos y finales.
- Los límites de un segmento fuera de rango se ajustan; un paso de cero lanza
ValueError. - Un paso negativo retrocede;
[::-1]invierte la cadena completa. - Los segmentos de posiciones fijas dependen de que el texto tenga una estructura uniforme.
2Procesa cadenas carácter a carácter
Un bucle puede examinar cada carácter, mantener un conteo acumulado, detenerse en la primera coincidencia o construir un mensaje nuevo. Los mismos patrones sencillos sirven para muchas tareas con texto: contar vocales, encontrar un dígito u ocultar determinadas letras. Las cadenas también tienen un valor fijo una vez creadas. Seguir un bucle pasada a pasada te mostrará cómo puede un programa producir texto modificado mientras la cadena original permanece intacta, y por qué asignar un valor a una variable es distinto de editar un carácter.
2.1 Recorre los caracteres de una cadena con un bucle
Usa un bucle cuando haya que tomar una decisión sobre cada carácter. El bucle puede contar coincidencias, usar sus posiciones, detenerse en la primera coincidencia o recoger los caracteres que deban formar parte de un resultado.
Visita los caracteres directamente
for ch in "hi!":
print(ch)
El cuerpo se ejecuta tres veces, con ch igual a "h", "i" y "!" por turno. La cadena vacía ejecuta el cuerpo cero veces. Un bucle que recorre directamente los caracteres no necesita un índice cuando solo usas el carácter actual.
Para contar, inicializa el contador antes del bucle e increméntalo solo cuando se supere la comprobación:
text = "Programming in Python"
count = 0
for ch in text.lower():
if ch in "aeiou":
count += 1
print(count) # 5
Convertir a minúsculas hace que también coincidan las vocales mayúsculas. La cadena de comprobación define las vocales que se cuentan; no incluye y. Reiniciar count dentro del bucle haría perder el total de las pasadas anteriores.
Usa posiciones cuando importen los caracteres vecinos
range(len(text)) proporciona los índices desde cero hasta el último índice válido. Para una tarea que necesite tanto la posición como el carácter, enumerate(text) los proporciona juntos:
for i, ch in enumerate("abc"):
print(i, ch)
Esto imprime 0 a, después 1 b y después 2 c. Las dos variables del bucle reciben el índice y el carácter de cada par.
Para comparar caracteres vecinos, el último índice no puede ser la posición actual porque no tiene un carácter siguiente:
text = "bookkeeper"
pairs = 0
for i in range(len(text) - 1):
if text[i] == text[i + 1]:
pairs += 1
print(pairs) # 3
Las coincidencias son oo, kk y ee. Con range(len(text)), la última pasada intentaría acceder a text[len(text)] y lanzaría IndexError.
Gestiona una posición con while
i = 0
while i < len(text):
print(text[i])
i += 1
La comprobación usa estrictamente <: la posición len(text) está más allá del final. El incremento acerca el bucle a su terminación; omitirlo hace que se lea el mismo carácter indefinidamente si el texto no está vacío. Para recorrer hacia atrás, empieza en len(text) - 1, continúa mientras i >= 0 y resta uno en cada pasada.
Busca o recoge caracteres
Para encontrar el primer dígito de "Room 42B", detente después de usar una coincidencia:
for ch in "Room 42B":
if ch.isdigit():
print(ch) # 4
break
Sin break, se imprimirían ambos dígitos. Para una comprobación sencilla de presencia, "4" in text ya responde sí o no.
Para recoger texto, empieza con result = "" y añade cada carácter deseado. Para "a b c", añadir solo cuando ch != " " construye "abc". Asignar ch = ch.upper() dentro de un bucle cambia solo la variable del bucle; no cambia los caracteres almacenados en text.
Puntos clave
- Un bucle
fordirecto visita cada carácter en orden. - Inicializa los contadores y acumuladores antes del bucle.
enumerate()proporciona cada índice junto con su carácter.- Detente una posición antes cuando leas
text[i + 1]. - Un bucle
whilenecesita un límite seguro y una actualización de la posición. breakdetiene una búsqueda en su primera coincidencia.
2.2 Construye cadenas nuevas en lugar de modificar las existentes
Las cadenas son inmutables: sus caracteres no pueden cambiarse una vez que existe la cadena. Un programa que parece editar texto está construyendo otra cadena y eligiendo qué variable se referirá a ella.
Lee un carácter, pero no le asignes un valor
name = "Jane"
name[0] = "D" # TypeError
El acceso mediante el índice permite leer "J", pero no puede ser el destino de una asignación. del name[0] también lanza TypeError. Para obtener "Dane", combina el primer carácter deseado con el final sin modificar:
name = "Jane"
name = "D" + name[1:]
print(name) # Dane
Python evalúa primero el lado derecho y produce una cadena nueva. Después hace que name se refiera a ese resultado.
Sustituye o inserta en una posición conocida
Para un índice no negativo válido i, estas expresiones usan segmentos distintos en la parte derecha:
| Tarea | Expresión |
|---|---|
Sustituir el carácter de i | text[:i] + new + text[i + 1:] |
Insertar antes del carácter de i | text[:i] + new + text[i:] |
La sustitución omite el carácter anterior; la inserción lo conserva. Con text = "cat", i = 1 y new = "X", la sustitución da "cXt", mientras que la inserción da "cXat".
Convierte un índice negativo en su equivalente no negativo antes de usar este patrón de sustitución. Para el último carácter de "cat", i = len(text) - 1 es 2. Si introduces -1 directamente en text[i + 1:], se convierte en text[0:], lo que añade toda la cadena anterior y da "caXcat".
Conserva el resultado de un método
Los métodos de transformación siguen la misma regla de inmutabilidad:
msg = "hello"
msg.upper()
print(msg) # hello
msg = msg.upper()
print(msg) # HELLO
La primera llamada calcula un resultado que el programa descarta. La asignación conserva el segundo resultado. Los métodos de cadena nunca cambian la cadena original, pero sus tipos de retorno varían: upper() devuelve una cadena, find() un número entero e isdigit() un booleano.
Sigue dos nombres que se refieren a un valor
Tras a = "cat" y b = a, ambas variables se refieren a "cat". Ejecutar a = a + "s" da a a el nuevo valor "cats"; b sigue refiriéndose a "cat". Ningún carácter de la cadena anterior compartida ha cambiado. a += "s" realiza el mismo tipo de reasignación para una cadena.
Construye un valor modificado en un bucle
word = "secret"
masked = ""
for ch in word:
if ch in "aeiou":
masked += "*"
else:
masked += ch
print(masked) # s*cr*t
print(word) # secret
Cada pasada amplía masked con un carácter elegido. Colocar cada carácter delante, con result = ch + result, invierte el texto: las pasadas por "drawer" construyen "d", "rd", "ard", "ward", "eward" y "reward".
La concatenación repetida es práctica para ejemplos breves. Cuando las partes ya existen en una lista, "".join(pieces) construye directamente un resultado y también puede colocar un separador entre ellas.
Puntos clave
- Una cadena no puede cambiarse asignando o eliminando elementos.
- La sustitución y la inserción construyen cadenas nuevas a partir de segmentos.
- Conserva el resultado de una transformación asignándolo.
- Reasignar una variable deja a las otras variables apuntando al valor anterior.
- Un acumulador construye una cadena nueva añadiendo una parte elegida cada vez.
3Transforma, busca y comprueba texto con métodos de cadena
Los métodos de cadena te permiten hacer preguntas útiles sobre el texto y producir versiones limpias de él. Un programa puede necesitar aceptar espacios adicionales en una respuesta, encontrar un separador o comprobar que una cantidad puede convertirse en un número. Elige un método según el resultado que necesites: texto modificado, una posición, un conteo o una comprobación booleana. Presta atención a las coincidencias exactas, al valor que se devuelve cuando falla una búsqueda y a la diferencia entre el orden del texto y el orden numérico.
3.1 Cambia entre mayúsculas y minúsculas y limpia texto con métodos
Un método es una función asociada a un valor. Los métodos de cadena realizan tareas habituales, como cambiar entre mayúsculas y minúsculas, recortar los extremos de los datos de entrada y sustituir texto. Cada llamada devuelve un resultado y deja intacta la cadena original.
Llama a un método con notación de punto
Escribe value.method(arguments), como en "hello".upper(). Los paréntesis hacen que se realice la llamada. name.upper sin paréntesis se refiere al propio método; no produce texto en mayúsculas. Escribir upper(name) no encuentra una función independiente llamada upper. Usa dir("") para enumerar los métodos de cadena y help(str.upper) para leer sobre uno.
Elige una operación de mayúsculas y minúsculas
| Método | Resultado del ejemplo |
|---|---|
"Hello".upper() | "HELLO" |
"Hello".lower() | "hello" |
"Hello".swapcase() | "hELLO" |
"the old man".title() | "The Old Man" |
"hELLO wORLD".capitalize() | "Hello world" |
capitalize() cambia el primer carácter y pone el resto en minúsculas; title() vuelve a empezar palabras después de caracteres que no son letras. Esto hace que "they're".title() se convierta en "They'Re", por lo que puede ser necesario revisar el uso automático de mayúsculas iniciales.
Para comparar sin distinguir entre mayúsculas y minúsculas, casefold() maneja más casos entre distintos idiomas que lower(). "Straße".lower() es "straße", mientras que "Straße".casefold() es "strasse". Aplica esta normalización a ambas cadenas antes de compararlas.
Limpia los extremos del texto
strip() elimina los caracteres de espacio en blanco iniciales y finales, incluidos espacios, tabulaciones y saltos de línea. Conserva el espaciado interno: " New York \n".strip() es "New York". lstrip() limpia solo el extremo izquierdo; rstrip() limpia solo el derecho.
Con un argumento, la eliminación retira repetidamente de los extremos cualquiera de esos caracteres. No elimina una palabra exacta:
print("...Wow!!!".strip(".!")) # Wow
print("report.txt".rstrip(".txt")) # repor
print("report.txt".removesuffix(".txt")) # report
La t final de report también pertenece al conjunto de caracteres que se eliminan, por lo que desaparece. removeprefix() y removesuffix() eliminan un texto exacto en un extremo; están disponibles en Python 3.9 y versiones posteriores.
Sustituye coincidencias y encadena cambios
replace(old, new) sustituye cada coincidencia exacta. Un tercer argumento limita cuántas coincidencias cambian: "a-b-c".replace("-", "", 1) da "ab-c". Una sustitución vacía elimina las coincidencias. Se distingue entre mayúsculas y minúsculas, por lo que "Cat cat".replace("cat", "dog") da "Cat dog".
answer = " YES \n"
answer = answer.strip().lower()
print(answer == "yes") # True
Las llamadas se ejecutan de izquierda a derecha: strip() devuelve "YES" y después lower() devuelve "yes". Un encadenamiento funciona cuando el siguiente método es compatible con el tipo del resultado anterior. El resultado de una búsqueda es un número entero, por lo que no admite métodos de limpieza de cadenas.
Para añadir relleno, "7".zfill(3) da "007", "Total".ljust(8) añade tres espacios a la derecha y "Hi".center(8, "*") da "***Hi***". rjust() añade relleno a la izquierda. Estas anchuras son mínimas; el texto más largo se conserva completo.
Puntos clave
- Usa notación de punto y paréntesis para llamar a un método de cadena.
- Las operaciones de mayúsculas y minúsculas tienen distintas funciones;
casefold()permite comparar texto de distintos idiomas. strip(chars)elimina un conjunto de caracteres de los extremos; los afijos exactos necesitanremoveprefix()oremovesuffix().replace()busca texto exacto y puede limitar el número de cambios.- Los encadenamientos de transformaciones se ejecutan de izquierda a derecha sobre cada cadena devuelta.
- El relleno añade caracteres hasta alcanzar una anchura mínima.
3.2 Busca texto dentro de una cadena
La búsqueda puede responder a tres preguntas distintas: si aparece un texto, dónde empieza y cuántas veces aparece. Elige el resultado que se ajuste a la decisión que deba tomar tu programa.
Elige un resultado de búsqueda
| Herramienta | Resultado | Cuando no hay coincidencias |
|---|---|---|
sub in text | Presencia como True o False | False |
text.find(sub) | Índice inicial de la primera coincidencia | -1 |
text.rfind(sub) | Índice inicial de la última coincidencia | -1 |
text.index(sub) | Índice inicial de la primera coincidencia | Lanza ValueError |
text.count(sub) | Número de coincidencias sin solapamiento | 0 |
Una subcadena es una secuencia de caracteres consecutivos. "py" in "happy" es True, pero "hpy" in "happy" es False. Las coincidencias distinguen entre mayúsculas y minúsculas: "Py" in "python" es False. not in invierte la comprobación de presencia. La cadena vacía aparece en todas las cadenas.
Encuentra la aparición adecuada
text = "banana"
print(text.find("an")) # 1
print(text.find("an", 2)) # 3
print(text.rfind("an")) # 3
La posición inicial opcional omite los posibles resultados anteriores. El índice devuelto sigue contando desde el principio de la cadena completa. index() devuelve la misma posición cuando hay una coincidencia, pero el error que lanza si no la hay lo hace útil cuando la ausencia indica un problema inesperado.
Comprueba una posición antes de extraer segmentos
email = "maria.lopez@example.org"
at = email.find("@")
if at != -1:
user = email[:at]
domain = email[at + 1:]
print(user) # maria.lopez
print(domain) # example.org
La búsqueda devuelve 11. El primer segmento se detiene antes de @; el segundo empieza un carácter después. Si faltara el marcador, at sería -1. Usarlo como límite de un segmento seleccionaría texto cercano al final sin avisar, así que maneja la ausencia del marcador antes de extraer las partes.
No uses if text.find("x"): como comprobación de presencia. Una coincidencia en el índice 0 se considera falsa en una condición, mientras que el valor -1 que indica ausencia se considera verdadero. Usa if "x" in text: o compara la posición explícitamente con -1.
Busca desde un marcador conocido
Para line = "Order #4521 shipped", el número va después de # y termina en el espacio siguiente:
start = line.find("#") + 1
end = line.find(" ", start)
number = line[start:end]
print(number) # 4521
Aquí existen ambos marcadores. Empezar la segunda búsqueda en start omite el espacio anterior, situado después de Order. Si pueden faltar marcadores, comprueba el resultado original de cada búsqueda antes de sumar uno o extraer segmentos; sumar uno a -1 ocultaría el fallo de la búsqueda al convertirlo en 0.
Cuenta coincidencias completas
"banana".count("a") es 3, y "banana".count("ana") es 1. Las dos coincidencias posibles de ana se solapan, por lo que count() no cuenta ambas. Del mismo modo, "aaaa".count("aa") es 2.
Para ignorar las diferencias entre mayúsculas y minúsculas, busca en una versión convertida, como "python" in sentence.lower(). La búsqueda sigue buscando coincidencias exactas dentro de esa versión. Los conteos y las comprobaciones de presencia pueden usar directamente la cadena convertida; un índice pertenece a la cadena concreta en la que se ha buscado.
Puntos clave
- Usa
inpara comprobar la presencia, un método de búsqueda para la posición ycount()para la frecuencia. find()yrfind()devuelven -1 cuando falta el texto;index()lanzaValueError.- Comprueba el resultado de una búsqueda antes de usarlo como índice o límite de un segmento.
- Un argumento de inicio omite las coincidencias anteriores y conserva los índices de la cadena completa.
count()cuenta coincidencias sin solapamiento.
3.3 Comprueba y compara cadenas
Las comprobaciones de cadenas devuelven booleanos que pueden guiar una condición. Te ayudan a aceptar datos de entrada que cumplan una regla y a comparar texto de manera uniforme.
Comprueba los extremos o los caracteres
startswith() y endswith() comprueban texto exacto en los extremos. Una tupla permite que una comprobación acepte varios finales: name.endswith((".jpg", ".png")). "photo.PNG", con su extensión en mayúsculas, no supera esa comprobación a menos que la conviertas primero a minúsculas.
| Comprobación | Verdadera cuando la cadena no vacía tiene… |
|---|---|
isalpha() | Solo letras |
isalnum() | Solo letras o dígitos |
isdigit() | Solo caracteres de dígitos Unicode |
isdecimal() | Solo caracteres de dígitos decimales |
isspace() | Solo caracteres de espacio en blanco |
Las cinco devuelven False para "". Las letras no tienen que ser del inglés: "café".isalpha() es True. El espacio de "hello world" hace que isalpha() sea falso.
isupper() e islower() examinan los caracteres que tienen mayúscula y minúscula y requieren al menos uno. "ABC1".isupper() es True; el dígito no invalida las letras mayúsculas. "123" no tiene caracteres con mayúscula y minúscula, por lo que ambas comprobaciones son falsas.
Valida antes de convertir
Una comprobación de dígitos no describe todos los números que Python puede leer. "-5".isdigit(), "3.5".isdigit() y " 42".isdigit() son falsas porque un signo, un punto o un espacio no son dígitos. Además, "²".isdigit() es verdadera aunque int("²") falle. isdecimal() rechaza ese superíndice y resulta adecuada para introducir un número entero no negativo escrito solo con dígitos.
text = input("Tickets: ").strip()
if text.isdecimal() and int(text) > 0:
print("Accepted")
else:
print("Enter a positive whole number")
La comprobación de la cadena se ejecuta primero. Cuando es falsa, and omite la conversión, evitando errores con entradas vacías o no numéricas. " 12 " se convierte en "12" y supera la comprobación; "0" se convierte sin problemas, pero no supera la comprobación de valor positivo. Esta regla rechaza deliberadamente las entradas con signo o punto decimal.
Una regla para nombres de usuario puede combinar comprobaciones de longitud y caracteres: 3 <= len(name) <= 12 and name.isalnum(). "ada99" se acepta, "ada 99" no supera la comprobación de caracteres y "ad" no supera la de longitud.
Compara texto limpio
La igualdad requiere los mismos caracteres en el mismo orden. "Yes" == "yes" y "yes " == "yes" son falsas. Para respuestas en las que deban ignorarse las diferencias entre mayúsculas y minúsculas y los espacios en blanco de los extremos, compara typed.strip().casefold() con expected.strip().casefold().
La ordenación funciona carácter a carácter. El primer punto de código Unicode distinto decide. ord("A") es 65, ord("Z") es 90 y ord("a") es 97; chr(97) da "a". Por tanto, "Zebra" < "apple" es verdadera. Cuando una cadena es un prefijo de la otra, la más corta va primero: "app" < "apple".
Las cadenas de dígitos también usan el orden de los caracteres: "10" < "9" es verdadera porque "1" va antes que "9". Convierte los valores a números al comparar cantidades. Las letras acentuadas también requieren cuidado: ord("é") es 233, por lo que "école" > "zoo" es verdadera. Esta ordenación incorporada sigue los puntos de código, no el orden de un diccionario de un idioma.
Puntos clave
- Las comprobaciones de cadenas devuelven booleanos; las de caracteres también comprueban que la cadena no esté vacía.
isdecimal()es más estricta queisdigit()para datos de entrada destinados aint().- Usa una comprobación de caracteres antes de una conversión numérica protegida por una condición.
- Limpia ambas cadenas de manera uniforme cuando no deban importar las mayúsculas, las minúsculas y los espacios de los extremos.
- La ordenación de cadenas usa el primer punto de código distinto; el orden numérico necesita valores numéricos.
4Divide texto en partes y une las partes para formar texto
Una línea de texto suele contener varias partes útiles: palabras de un mensaje, campos de un registro o partes de un código. La división convierte esa línea en una colección ordenada que puedes examinar, contar y convertir. La unión construye una cadena a partir de partes con un separador que tú eliges. Las reglas del separador determinan si se conservan los campos vacíos y el espaciado original, por lo que la elección es relevante cuando limpias texto o necesitas reconstruirlo exactamente.
4.1 Divide una cadena en una lista de partes
split() convierte una cadena en una lista de cadenas. Una lista es una colección ordenada escrita entre corchetes. Puedes leer un elemento mediante su índice, recorrer los elementos con un bucle o contarlos con len().
Elige espacios en blanco o un separador exacto
Sin argumentos, split() trata una secuencia de caracteres de espacio en blanco como un solo límite e ignora los de ambos extremos:
words = " the quick brown fox ".split()
print(words) # ['the', 'quick', 'brown', 'fox']
print(len(words)) # 4
print(words[0]) # the
Con un separador explícito, cada aparición exacta produce un corte. Los separadores consecutivos conservan un campo vacío:
fields = "red,green,,blue".split(",")
# ["red", "green", "", "blue"]
El tercer elemento vacío puede representar un valor que se ha dejado en blanco. Sigue contando como un elemento de la lista.
| Expresión | Resultado |
|---|---|
"a b".split() | ["a", "b"] |
"a b".split(" ") | ["a", "", "b"] |
"a,b".split(", ") | ["a,b"] |
Un separador puede contener varios caracteres, pero todos deben coincidir. Si no aparece ningún separador, el resultado contiene la cadena original completa como un solo elemento. Por tanto, dividir por coma y espacio es distinto de dividir por una coma.
Limita cuánto texto se divide
El segundo argumento, maxsplit, limita el número de cortes, no el número de elementos resultantes:
print("key=value=more".split("=", 1))
# ["key", "value=more"]
print("archive.tar.gz".rsplit(".", 1))
# ["archive.tar", "gz"]
split() empieza por la izquierda; rsplit() empieza por la derecha. Un corte desde la derecha separa la última extensión del archivo sin cortar en los puntos anteriores.
Lee campos y convierte cantidades
line = "Lovelace,Ada,1815"
parts = line.split(",")
if len(parts) == 3:
last = parts[0]
first = parts[1]
year = int(parts[2])
print(f"{first} {last} was born in {year}.")
La salida es "Ada Lovelace was born in 1815.". La comprobación de longitud evita que un elemento ausente provoque IndexError. No comprueba que el año sea numérico; eso necesita una regla de entrada independiente cuando los datos puedan ser inválidos.
Cada parte obtenida al dividir empieza siendo una cadena. Para sumar "3 14 15", inicializa total = 0, recorre line.split() con un bucle y añade int(part). El resultado es 32; concatenar las partes sin convertir uniría los dígitos.
Un separador explícito conserva los espacios de alrededor. "a, b".split(",") da ["a", " b"]. Llama a strip() en cada parte si no quieres esos espacios.
Reconoce dos resultados relacionados
splitlines() separa por los saltos de línea: "line one\nline two".splitlines() da dos cadenas. partition("=") siempre devuelve una tupla de tres partes: el texto anterior al primer separador, el separador y el texto posterior. "user=ada".partition("=") da ("user", "=", "ada"); con "user", da ("user", "", "").
Puntos clave
split()devuelve una lista ordenada de cadenas.- La división por espacios en blanco agrupa las secuencias; los separadores explícitos conservan los campos vacíos.
maxsplitlimita los cortes yrsplit()empieza por la derecha.- Comprueba el número de campos antes de acceder mediante índices y convierte los campos numéricos antes de hacer operaciones aritméticas.
splitlines()separa líneas;partition()devuelve el texto anterior, el separador y el texto posterior.
4.2 Une cadenas con un separador
join() construye una cadena a partir de una secuencia de cadenas. La cadena situada antes del punto proporciona el separador, que aparece entre elementos contiguos.
Pon primero el separador
colors = ["red", "green", "blue"]
text = ", ".join(colors)
print(text) # red, green, blue
Lee esto como «usa coma y espacio para unir los colores». No hay separador antes del primer elemento ni después del último. Puedes cambiar la estructura de la salida modificando solo el separador:
| Expresión | Resultado |
|---|---|
"".join(["a", "b", "c"]) | "abc" |
"-".join(["a", "b", "c"]) | "a-b-c" |
"\n".join(["a", "b", "c"]) | Un elemento en cada línea |
join() pertenece a la cadena separadora. Escribir ["a", "b"].join(",") lanza AttributeError porque la lista no tiene un método join. Una sola llamada también se adapta al número de partes; no necesitas escribir una nueva cadena de operaciones + para cada longitud de lista distinta.
Convierte primero las partes que no sean cadenas
Todas las partes deben ser ya cadenas. ", ".join([1, 2, 3]) lanza TypeError. map(str, items) aplica str() a cada elemento, por lo que esto funciona:
items = [1, 2, 3]
text = " ".join(map(str, items))
print(text) # 1 2 3
El str que se pasa a map() es la función de conversión. join() recibe las partes convertidas y devuelve una cadena.
Una cadena es en sí misma una secuencia de cadenas de un carácter, por lo que " ".join("ABC") da "A B C". Esto puede resultar útil, pero pasar una sola palabra cuando querías pasar una lista de palabras coloca separadores entre sus caracteres.
Reorganiza el espaciado y los separadores
text = "too many spaces"
cleaned = " ".join(text.split())
print(cleaned) # too many spaces
Primero, la división por espacios en blanco produce las tres palabras. Unirlas con un espacio establece una separación uniforme y no deja espacios en los extremos. El espaciado original se pierde en el paso de división.
Con un separador explícito, los campos vacíos conservan información suficiente para reconstruir el texto exacto. Si s = "a,,b,", entonces s.split(",") da ["a", "", "b", ""], y ",".join(...) vuelve a dar "a,,b,". El separador debe ser el mismo para lograr esa reconstrucción exacta.
Cambiar el separador cambia la estructura: "-".join("2026/07/04".split("/")) da "2026-07-04". Aquí, replace("/", "-") también es una solución directa.
Recoge un resultado breve a partir de palabras
Para formar una sigla, divide "portable network graphics", empieza con acronym = "" y añade word[0].upper() por cada palabra. La división por espacios en blanco proporciona palabras no vacías, por lo que sus primeros caracteres existen. Esto construye "PNG". Si las letras ya están en una lista, ".".join(["P", "N", "G"]) construye "P.N.G" sin punto final.
Puntos clave
- Llama a
join()sobre el separador y pasa las partes como argumento. - Los separadores aparecen solo entre las partes, y cada parte debe ser una cadena.
- Dividir por espacios en blanco y unir con un espacio uniformiza el espaciado.
- Unir con el mismo separador explícito permite reconstruir el texto, incluidos los campos vacíos.
5Da formato a la salida con cadenas formateadas
Una salida útil combina un valor correcto con una estructura legible. Una cadena formateada coloca valores y expresiones directamente dentro del texto y te permite elegir cómo se muestra cada campo: cifras decimales, agrupación, signos, fechas o columnas alineadas. Mantén separados el cálculo y la presentación. Un campo puede mostrar dos cifras decimales o un nombre abreviado mientras la variable original conserva su valor completo, listo para cálculos posteriores o para otra presentación.
5.1 Inserta valores en el texto con cadenas formateadas
Una cadena formateada es un literal de cadena con f o F antes de su comilla de apertura. En su interior, las llaves contienen expresiones cuyos valores se insertan en el texto.
Inserta variables y expresiones
name = "Ada"
age = 36
message = f"{name} is {age} years old."
print(message) # Ada is 36 years old.
Los números se convierten en texto automáticamente dentro de un campo. El mismo mensaje podría usar concatenación y str(age), pero la cadena formateada mantiene visible la estructura final en un solo lugar.
Las llaves pueden contener operaciones aritméticas, llamadas a métodos o llamadas a funciones:
price = 4.5
qty = 3
print(f"Cost: {price * qty}") # Cost: 13.5
print(f"Name: {name.upper()}") # Name: ADA
word = "Python"
print(f"{len(word)} letters") # 6 letters
Python evalúa cada expresión al ejecutar la línea. Una cadena guardada no permanece conectada a las variables usadas para construirla. Si qty cambia después de construir message, esa cadena conserva los caracteres que ya tiene.
Distingue el texto normal de los campos
Sin el prefijo, "Hello {name}" es texto normal y conserva sus llaves. La falta de f es una causa habitual de que un programa imprima el nombre de la variable en lugar de su valor. Con el prefijo, un nombre al que no se haya asignado un valor lanza NameError al evaluar la expresión.
Para mostrar una llave literal, duplícala:
x = 5
print(f"{{x}} = {x}") # {x} = 5
Las llaves duplicadas proporcionan el texto literal {x}. El par simple que rodea la última x proporciona su valor.
Facilita la lectura de las expresiones con comillas
Usa el otro tipo de comillas dentro de un campo:
print(f"Shout: {'hi'.upper()}") # Shout: HI
Este estilo funciona en todas las versiones de Python con cadenas formateadas, que se introdujeron en la versión 3.6. Python 3.12 y versiones posteriores también permiten reutilizar dentro del campo el tipo de comillas externas. Las secuencias de escape siguen funcionando en las cadenas formateadas: f"Name: {name}\nAge: {age}" imprime en dos líneas.
Para mostrar información rápidamente durante la depuración, Python 3.8 y versiones posteriores aceptan = después de una expresión. Con x = 5, f"{x=}" da "x=5"; con total = 12, f"{total = }" da "total = 12". Los espacios escritos alrededor de la expresión y del signo igual aparecen en la salida.
Interpreta estilos de formato anteriores
El código Python existente puede construir el mismo texto de otras maneras:
| Estilo | Ejemplo | Resultado |
|---|---|---|
| Cadena formateada | f"{name} is {age}" | "Ada is 36" |
| Método de cadena | "{} is {}".format(name, age) | "Ada is 36" |
| Formato con porcentaje | "%s is %d" % (name, age) | "Ada is 36" |
str.format() rellena los campos entre llaves con sus argumentos. Los campos numerados pueden reutilizar un argumento: "{0} {1} {0}".format("a", "b") da "a b a". En el formato con porcentaje, %s inserta texto y %d un número entero. Reconocer esos campos te ayuda a leer un programa aunque se escribiera antes de que las cadenas formateadas fueran habituales.
Puntos clave
- Una cadena formateada necesita el prefijo
fy llaves alrededor de cada expresión. - Los campos se evalúan al ejecutar la cadena formateada; el texto guardado no se actualiza después.
- Las llaves duplicadas muestran llaves literales.
str.format()y el formato con porcentaje son formas anteriores de insertar valores.
5.2 Da un formato legible a números, fechas y horas
Un especificador de formato controla cómo se muestra un valor. Coloca dos puntos después de la expresión y, a continuación, las instrucciones: f"{value:spec}". Dar formato devuelve texto y deja intacto el valor numérico original.
Establece las cifras decimales y comprende el redondeo
.Nf muestra exactamente N dígitos después del punto decimal. f"{3.14159:.2f}" da "3.14", f"{2/3:.3f}" da "0.667" y f"{5:.2f}" da "5.00". .0f no muestra punto decimal: f"{7.6:.0f}" da "8".
El redondeo usa el valor realmente almacenado. La mayoría de las fracciones decimales son aproximaciones binarias muy cercanas. El número de coma flotante 2.675 está ligeramente por debajo de ese decimal exacto, por lo que f"{2.675:.2f}" da "2.67". Los valores situados exactamente a mitad de camino se redondean hacia una cifra final par: 0.125 se muestra como "0.12", mientras que 0.375 se muestra como "0.38" con dos cifras decimales. f"{2.5:.0f}" da "2". Los programas que necesitan cálculos monetarios exactos suelen almacenar los centavos enteros como números enteros.
Añade agrupación y porcentajes
| Especificador | Resultado de ejemplo |
|---|---|
f"{1234567:,}" | "1,234,567" |
f"{1234567:_}" | "1_234_567" |
f"{1234567.891:,.2f}" | "1,234,567.89" |
f"{0.256:.1%}" | "25.6%" |
Una coma agrupa los miles; el punto introduce la precisión decimal. Para un importe en dólares, deja el signo del dólar fuera del campo: con amount = 1250.5, f"${amount:,.2f}" da "$1,250.50".
El tipo % multiplica por 100 y añade %. Usa una fracción como 0.256 para mostrar 25.6%. Si proporcionas 25.6, el porcentaje mostrado se multiplica de nuevo. Sin una precisión explícita, % muestra seis cifras decimales.
Da formato a números enteros y partes de fechas
d es para números enteros. f"{42:d}" funciona, pero f"{3.0:d}" lanza ValueError porque un número de coma flotante no es un número entero. Un cero inicial antes de una anchura añade relleno con ceros; un signo más solicita un signo visible:
print(f"{7:03d}") # 007
print(f"{5:+d}") # +5
print(f"{-5:+d}") # -5
Para el mes 7, el día 4 y el año 2026, f"{month:02d}/{day:02d}/{year}" construye "07/04/2026". Para la hora 9 y el minuto 5, f"{hour}:{minute:02d}" construye "9:05". El relleno con ceros evita que un minuto de un dígito aparezca como "9:5".
Combina las instrucciones en orden
El orden es relleno, alineación, signo, cero, anchura, agrupación, precisión y tipo. Puedes omitir las partes que no necesites. f"{12345.678:>12,.2f}" usa alineación a la derecha, anchura 12, agrupación con comas y dos decimales, lo que da " 12,345.68".
La precisión puede proceder de otra variable: con places = 3, f"{3.14159:.{places}f}" da "3.142". Los mismos especificadores funcionan en format(value, spec) y en los campos de str.format(). Conserva el número original para los cálculos; round(value, 2) devuelve un número redondeado cuando eso es lo que necesita el cálculo.
Puntos clave
- Los dos puntos introducen instrucciones de presentación; el valor almacenado no cambia.
- La precisión del formato de coma fija determina las cifras decimales, y el redondeo sigue el valor almacenado.
- Una coma agrupa los miles;
%multiplica una fracción por 100. drequiere un número entero; el relleno con ceros mantiene legibles las partes de fechas y horas.- Conserva los números para las operaciones aritméticas y dales formato al mostrarlos.
5.3 Alinea la salida en columnas
Una anchura de campo reserva un número mínimo de posiciones de caracteres para un valor. Combinar anchuras hace que las tablas breves y los recibos sean legibles en una terminal.
Elige la anchura y la alineación
Las cadenas se alinean a la izquierda de forma predeterminada y los números a la derecha. f"{'cat':6}" da "cat ", mientras que f"{42:6}" da " 42". Usa un carácter de alineación para elegirla explícitamente:
| Carácter | Significado | Ejemplo |
|---|---|---|
< | Izquierda | f"{'hi':<6}" da "hi " |
> | Derecha | f"{'hi':>6}" da " hi" |
^ | Centro | f"{'hi':^6}" da " hi " |
Cuando al centrar queda un número impar de espacios, la alineación de las cadenas formateadas coloca el espacio adicional a la derecha: f"{'hi':^7}" da " hi ".
La anchura es un mínimo. f"{'elephant':4}" sigue dando "elephant"; no recorta la palabra. Por tanto, una entrada larga puede desalinear las columnas posteriores.
Añade un carácter de relleno o limita el texto
Un carácter de relleno va inmediatamente antes de la alineación. f"{'hi':*^10}" da "****hi****", y f"{7:0>3}" da "007". El relleno necesita un carácter de alineación. f"{'':-^20}" rellena un campo vacío con veinte guiones.
La precisión de cadena limita el número de caracteres que se muestran:
place = "Washington"
print(f"{place:.4}") # Wash
print(f"|{place:10.4}|") # |Wash |
La precisión limita primero el texto mostrado a cuatro caracteres; después, la anchura lo rellena hasta diez. Usa una anchura y una precisión iguales cuando el texto deba permanecer dentro de una columna fija. El valor original de place sigue siendo "Washington".
Construye una fila de un recibo
item = "Apples"
qty = 3
price = 4.50
row = f"{item:<8}{qty:>4}{qty * price:>9.2f}"
print(row)
El resultado es "Apples 3 13.50". El campo del artículo tiene seis letras y dos espacios. El campo de cantidad añade tres espacios antes de 3. El campo de importe añade cuatro espacios antes de 13.50, que tiene cinco caracteres. Juntos, los campos ocupan 21 caracteres.
Reutiliza esas anchuras para el pan (1 a 2,25) y el café (2 a 11,00). Sus filas son "Bread 1 2.25" y "Coffee 2 22.00". Una fila de total puede combinar los dos primeros campos:
print(f"{'Total':<12}{37.75:>9.2f}")
# "Total 37.75"
El campo de importe empieza en la misma posición y tiene la misma precisión decimal, por lo que los importes quedan alineados.
Adapta la estructura a su presentación
Elige anchuras que dejen espacio para las entradas más largas y su separación, o acorta el texto de forma deliberada. Una variable puede proporcionar una anchura: con w = 10, f"{name:<{w}}" rellena name hasta diez caracteres.
Las columnas basadas en caracteres necesitan una fuente monoespaciada, como la que usa una terminal. Para añadir relleno fuera de una cadena formateada, ljust() y rjust() se comportan como < y >. center() y ^ centran el texto, pero pueden repartir de forma distinta un relleno impar: "hi".center(7) da " hi ", mientras que f"{'hi':^7}" da " hi ".
Puntos clave
- La anchura establece un mínimo; la alineación decide dónde va el relleno.
- El relleno precede a la alineación, y la precisión de cadena limita los caracteres mostrados.
- Usa las mismas anchuras de campo y la misma precisión decimal en todas las filas.
- Elige una presentación monoespaciada para las columnas basadas en caracteres.
center()y el centrado de las cadenas formateadas pueden colocar de forma distinta un relleno impar.
Ejemplos de Cadenas de caracteres en Python
1Descompón un código carácter a carácter
14 pasos
- 1IntroducciónLee una etiqueta de almacenamiento
Una etiqueta de almacenamiento contiene letras, un guion y dígitos:
"Box-482". Esto es una cadena, y cada carácter tiene un índice. Un programa puede necesitar la primera letra, el último dígito o toda la sección numérica (una rebanada).Construirás la etiqueta, dibujarás sus posiciones y seleccionarás sus partes. Sigue los caracteres exactos en cada paso; un espacio o un separador afecta a las posiciones igual que una letra.
- 2ExplicaciónDistingue la sintaxis del texto almacenado
Una cadena de caracteres es una secuencia ordenada de caracteres. Las comillas externas le indican a Python dónde empieza y termina un literal; no forman parte de su valor.
label = "Box-482" print(len(label)) # 7El guion es uno de los siete caracteres. Las comillas simples podrían delimitar el mismo valor. También puedes almacenar texto vacío con
"", que tiene longitud cero. - 3EjemploConstruye la etiqueta a partir de partes
Empieza con la palabra y un código numérico:
kind = "Box" number = 482 label = kind + "-" + str(number)str(number)produce"482"y después las dos concatenaciones construyen"Box-482". El guion aparece porque es una de las partes proporcionadas. Omitirstr()intentaría concatenar una cadena y un número entero, lo que lanzaTypeError. - 4DesafíoCuenta los caracteres de un valor con una secuencia de escape
Un aviso breve se almacena como
notice = "A\nB!". ¿Cuál es su longitud y cuántas líneas muestraprint(notice)?---reveal---
La longitud es
4:A, un salto de línea,By!. La impresión muestra dos líneas, conAen la primera yB!en la segunda. La secuencia de escape se procesa al leer el literal; la impresión revela el salto de línea que ya está en su valor. - 5AnalogíaAsigna un número a cada posición
Imagina la etiqueta como siete casillas numeradas en una fila. La numeración empieza en cero:
Character: B o x - 4 8 2 Index: 0 1 2 3 4 5 6label[0]da"B", ylabel[4]da"4". El resultado es una cadena de un carácter, aunque parezca un número. La posición7sería la octava casilla, que no existe en esta etiqueta. - 6ExplicaciónCuenta hacia atrás desde el último carácter
Los índices negativos usan el final como punto de referencia. Para
"Box-482",label[-1]es"2"ylabel[-3]es"4".El equivalente no negativo de
-3eslen(label) - 3, es decir,4. Ambos seleccionan el mismo carácter. No hay una posición de cero negativo al final:-0es simplemente0, por lo que sigue seleccionando el primer carácter. - 7DesafíoSelecciona un carácter sin ejecutar código
Para
code = "Tin-739", ¿cuál es el valor decode[-2]? ¿Seleccionaríacode[len(code)]el último carácter?---reveal---
code[-2]es"3", el carácter justo anterior al9final.code[len(code)]lanzaIndexError: una longitud de siete significa índices de cero a seis. La expresión para el último carácter escode[len(code) - 1], ocode[-1]. - 8ConsejoProtege la lectura de un carácter
Una entrada vacía no tiene ningún carácter en el índice cero. Coloca la comprobación de longitud antes de la lectura del carácter:
if len(label) > 0 and label[0] == "B": print("Begins with B")Cuando la primera comprobación es falsa,
andomite la segunda. Este orden es relevante: colocarlabel[0]primero ya fallaría con una entrada vacía antes de que Python pudiera llegar a la comprobación de longitud. - 9ExplicaciónSelecciona toda la sección numérica
Un segmento incluye su inicio y excluye su límite final:
label = "Box-482" number_text = label[4:7] print(number_text) # 482Las posiciones
4,5y6proporcionan los dígitos. El límite final7es la frontera situada después del último carácter. Como la selección llega hasta el final,label[4:]da el mismo resultado. No se produce ninguna conversión; el segmento sigue siendo texto. - 10EjemploHaz que los dos segmentos se encuentren
La sección izquierda termina en el límite donde empieza la sección numérica:
left = label[:4] # "Box-" right = label[4:] # "482" print(left + right) # Box-482El límite común
4hace que las partes se encuentren sin huecos ni solapamientos. Por eso,s[:k] + s[k:]reconstruye una cadena. Usarlabel[:3]dejaría el guion fuera del resultado reconstruido. - 11Idea claveEl límite de un segmento puede superar el final
Compara
label[99]conlabel[4:99]. El índice individual lanzaIndexError, pero el segmento da"482".Un segmento ajusta un límite situado más allá de la cadena a su extremo disponible. Por tanto,
label[99:]da texto vacío. Esto resulta útil para tomar hasta cierta cantidad de texto, pero también significa que un segmento incorrecto puede devolver menos caracteres de los esperados sin avisar. - 12EjemploInvierte solo los dígitos seleccionados
Primero extrae los dígitos y después invierte esa cadena nueva:
digits = label[4:] backward = digits[::-1] print(backward) # 284Un paso negativo recorre hacia atrás. Con ambos límites omitidos, el segmento visita todos los caracteres del último al primero. Un paso positivo de dos, en cambio, saltaría posiciones alternas. Un paso de cero no es válido y lanza
ValueError. - 13DesafíoConstruye una etiqueta modificada
Para
label = "Jar-916", ¿cuál es el valor delabel[:4] + label[4:][::-1]? Explica qué sección conserva su orden.---reveal---
El resultado es
"Jar-619". El primer segmento conserva"Jar-"intacto. El segundo selecciona primero"916"y después[::-1]invierte solo esos dígitos para obtener"619". La concatenación coloca los dos resultados juntos sin añadir otro separador. - 14RepasoDistingue las posiciones de los límites
Usa un índice para un carácter y un segmento para una sección. Las posiciones empiezan en cero; los índices negativos cuentan desde el final. Un segmento deja fuera su límite final, y su paso controla la dirección y la separación.
Sigue primero los caracteres almacenados y después evalúa cada selección antes de combinar los resultados.
2Construye un código con caracteres ocultos mediante un bucle
12 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónConserva los dígitos y oculta las letras
- 2ExplicaciónPrepara los resultados acumulados
- 3EjemploToma una decisión por cada carácter
- 4EjemploSigue las pasadas restantes
- 5DesafíoSigue la ejecución con otra entrada
- 6ConexiónAñade posiciones solo cuando sean necesarias
- 7ConsejoDeja espacio para un carácter siguiente
- 8Idea claveLa cadena anterior no se ha editado
- 9EjemploConserva otro nombre para el valor anterior
- 10EjemploSustituye una posición con segmentos
- 11DesafíoSigue el valor y su copia guardada
- 12RepasoSigue cada variable a lo largo del bucle
3Lee y valida un mensaje con etiquetas
16 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónProcesa una solicitud breve
- 2EjemploLimpia los espacios en blanco de los extremos
- 3ExplicaciónLlama a métodos y encadénalos
- 4DesafíoElige una operación para un final exacto
- 5ConexiónCompara texto con normalización de mayúsculas y minúsculas
- 6ExplicaciónPregunta si aparece, dónde o cuántas veces
- 7EjemploLocaliza el inicio del nombre
- 8EjemploBusca el final después del inicio
- 9ConsejoNo interpretes una posición como presencia
- 10DesafíoExtrae un campo entre marcadores
- 11EjemploExtrae el texto de los asientos
- 12ExplicaciónComprueba antes de convertir
- 13DesafíoAplica la misma regla de entrada
- 14Idea claveUna comparación de texto no compara cantidades
- 15DesafíoManeja un campo limpio y una búsqueda fallida
- 16RepasoUsa cada resultado para su función prevista
4Convierte un registro en campos y texto legible
12 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónLee un registro sencillo
- 2ExplicaciónDivide por un separador exacto
- 3EjemploComprueba los campos antes de leerlos
- 4EjemploCalcula con los valores convertidos
- 5DesafíoConserva un valor ausente
- 6Idea claveLa división por espacios en blanco elige partes distintas
- 7ConsejoDetente después del corte que necesitas
- 8EjemploUne las partes de presentación con un separador
- 9DesafíoPredice una unión con partes vacías
- 10ConexiónElige entre limpieza y reconstrucción exacta
- 11DesafíoCorrige la presentación de un registro
- 12RepasoSigue los tipos a lo largo del registro
5Da formato a un recibo breve
16 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónDa una estructura legible a un cálculo
- 2EjemploInserta el importe de la línea
- 3DesafíoObserva cuándo se evalúa la expresión
- 4ConsejoMantén visible la sintaxis de los campos
- 5ExplicaciónElige dos cifras decimales
- 6Idea claveRedondea el valor que realmente se almacena
- 7EjemploMuestra una tasa como porcentaje
- 8DesafíoCombina agrupación y decimales
- 9ConexiónRellena partes de fechas y horas
- 10ExplicaciónReserva los campos del recibo
- 11EjemploCuenta los espacios de una fila
- 12ConsejoLa anchura no acorta un artículo largo
- 13DesafíoInterpreta un campo centrado con relleno
- 14DesafíoConstruye una segunda fila del recibo
- 15ConexiónAdapta la fuente a la estructura
- 16RepasoMantén separados el cálculo y la presentación
Ejercicios de Cadenas de caracteres en Python
Set 1: Interpreta literales, índices y segmentos10 Preguntas de Práctica
Pregunta 1 de 10
len("x\ty!")?Mostrar respuestaOcultar respuesta
x, una tabulación, y y !. Las comillas externas y los dos símbolos escritos que se usan para \t no son caracteres adicionales del valor. Contar la secuencia de escape como una barra inversa más una letra daría cinco.Pregunta 2 de 10
"Tag: " + str(8 * 2)?Mostrar respuestaOcultar respuesta
16, y str() lo convierte en "16". Después, la concatenación lo añade tras "Tag: ". Unir los dígitos escritos como "82" requeriría operandos de cadena; aquí la expresión multiplica dos números enteros antes de convertir.Pregunta 3 de 10
r"D:\temp" después de los dos puntos?Mostrar respuestaOcultar respuesta
temp. En un literal normal, el \t inicial se convertiría en una tabulación. La sintaxis de cadena sin procesar no añade una segunda barra inversa a la cadena almacenada; la única barra inversa escrita sigue siendo un carácter.Pregunta 4 de 10
code = "R7K2", ¿cuál es el valor de code[-2]?Mostrar respuestaOcultar respuesta
-1 selecciona "2" y -2 selecciona "K". El valor es una cadena de un carácter. Contar dos caracteres desde la izquierda seleccionaría "7", pero el signo negativo hace que el final de la cadena sea el punto de referencia inicial.Pregunta 5 de 10
word = "orbit", ¿qué devuelve word[len(word) // 2]?Mostrar respuestaOcultar respuesta
2. Los índices 0, 1 y 2 seleccionan o, r y b, de modo que "b" es el carácter central. TypeError se produciría con un índice de coma flotante, pero aquí // produce un número entero.Pregunta 6 de 10
¿Qué ocurre cuando se ejecuta este código con line = ""?
if len(line) > 0 and line[0] == ";":
print("Skip")
Mostrar respuestaOcultar respuesta
and omite la lectura del carácter y el cuerpo no se ejecuta. La cadena vacía provocaría IndexError si se evaluara line[0]. Aquí, el orden de las comprobaciones evita que se use ese índice con una entrada vacía.Pregunta 7 de 10
"notebook"[2:5]?Mostrar respuestaOcultar respuesta
2, 3 y 4: t, e y b. El índice final 5 queda excluido, por lo que su o no aparece. Incluir ese carácter daría "tebo", lo que resulta de tratar el límite final como incluido en lugar de como la primera posición que queda fuera.Pregunta 8 de 10
"map"[1:50]?Mostrar respuestaOcultar respuesta
1 y continúa hasta el final porque el límite final excesivo se ajusta. Esto conserva a y p, lo que da "ap". Una lectura de un solo carácter como "map"[50] lanzaría IndexError, pero los límites de los segmentos pueden superar los caracteres disponibles.Pregunta 9 de 10
"0123456789"[1:8:3]?Mostrar respuestaOcultar respuesta
1 y avanza tres posiciones cada vez: 1, 4 y 7. La siguiente posición sería 10, más allá del límite final excluido 8. "1357" usa un paso de dos; el tercer argumento del segmento es la distancia entre las posiciones seleccionadas, no el número de caracteres deseados.Pregunta 10 de 10
s = "red-blue", ¿cuál es el valor de s[-4:][::-1] + s[:3]?Mostrar respuestaOcultar respuesta
"blue"; invertir ese segmento da "eulb". El prefijo s[:3] es "red", por lo que la concatenación da "eulbred". El guion del índice 3 no pertenece a ninguno de los segmentos seleccionados y no se inserta automáticamente al unir las cadenas.Set 2: Sigue la ejecución de bucles y los nuevos valores de cadena10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
for ch in "a b!":?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
¿Qué se imprime?
total = 0
for ch in "Route 68":
if ch.isdecimal():
total += int(ch)
print(total)
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
¿Qué se imprime?
for ch in "Cab 53A":
if ch.isdigit():
print(ch)
break
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
¿Qué se imprime?
for i, ch in enumerate("lamp"):
if i % 2 == 1:
print(ch, end="")
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
¿Qué valor se imprime?
s = "aaabb"
pairs = 0
for i in range(len(s) - 1):
if s[i] == s[i + 1]:
pairs += 1
print(pairs)
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
¿Qué texto se imprime?
s = "north"
i = len(s) - 1
result = ""
while i >= 0:
result += s[i]
i -= 2
print(result)
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
¿Qué contiene b después de este código?
a = "pine"
b = a
a = a.upper()
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
s = "stone", ¿qué produce s[:2] + "X" + s[3:]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
¿Qué par de valores se imprime?
word = "muse"
result = ""
for ch in word:
if ch in "aeiou":
result = ch.upper() + result
else:
result = ch + result
print(word, result)
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
¿Qué imprime este código?
s = " west "
s.strip()
s = s + "!"
print(len(s))
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 3: Limpia, busca y valida texto10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
" Go Home ".strip().lower()?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
"test.txt".rstrip(".txt")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
"A-a-a".replace("a", "x", 1).lower()?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
"cocoa".rfind("co")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
¿Qué se imprime?
s = "label"
p = s.find(":")
print(s[p:])
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
¿Qué texto se extrae?
s = "Item [K9] ready [Q2]"
a = s.find("[")
b = s.find("]", a)
result = s[a + 1:b]
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
"abababa".count("aba")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
s = raw.strip() y después s.isdecimal() and int(s) > 0. ¿Supera la entrada original " 08 " la comprobación y qué número entero representa?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
a = " Cedar " y b = "cedar", ¿qué par resulta de a == b y a.strip().casefold() == b.strip().casefold()?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
"24" < "7" e int("24") < int("7")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 4: Divide registros y reconstruye texto10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
len(" one\ttwo three ".split())?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
"A||C|".split("|")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
"red;blue".split("; ")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
¿Qué se imprime?
parts = "Mina;4;6".split(";")
total = int(parts[1]) + int(parts[2])
print(f"{parts[0]}:{total}")
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
"mode=fast=quiet".split("=", 1)[1]?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
"status".partition(":")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
" / ".join("ab")?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
"-".join("x::z:".split(":"))?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
result = " ".join(" bright\n blue sky ".split())?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
": ".join(map(str, [6, 11]))?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 5: Construye valores y columnas legibles10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
name = "Luca", ¿qué produce f"Hi, {name.upper()}!"?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
¿Qué texto se imprime?
n = 4
label = f"{{n}}={n + 2}"
n = 9
print(label)
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
f"{4826.5:,.2f}"?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
f"{0.0375:.1%}"?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
n = 0.125, ¿qué par resulta de f"{n:.2f}" y n == 0.125?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
month = 11, day = 6, year = 2028, hour = 7 y minute = 3, ¿qué produce f"{month:02d}/{day:02d}/{year} {hour}:{minute:02d}"?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
f"|{'owl':>5}|"?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
name = "seahorse", ¿cuáles son el contenido y la longitud de f"{name:6.4}"?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
item = "Tea", qty = 2 y price = 3.75, ¿cuál es el valor de f"{item:<5}{qty:>2}{qty * price:>7.2f}"?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
f"{'otter':3}"?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
¿Te atascas con una pregunta tuya? Ayuda con Tareas
Términos Clave
A
Acumulador
"" puede recoger solo los caracteres que no sean espacios para construir "abc" a partir de "a b c".Agrupación de cifras en miles
f"{7654321:,}" muestra "7,654,321" y separa cada grupo de tres dígitos.Alineación
< lo coloca a la izquierda, > a la derecha y ^ lo centra.f"{'hi':>5}" coloca tres espacios antes de la palabra; la alineación a la izquierda los coloca después.Anchura de campo
"cat" dos espacios finales, pero una anchura de dos sigue conservando la palabra completa.Aproximación binaria
2.675 es ligeramente inferior, por lo que darle formato con dos cifras decimales da "2.67".Asignación a un elemento
word[1] = "x" lanza TypeError para una cadena, incluso cuando el índice uno es una posición válida.B
break
break sale inmediatamente del bucle actual, permitiendo que una búsqueda de caracteres se detenga tras procesar su primer carácter coincidente."Zone 81" puede imprimir 8 y ejecutar break, dejando el 1 posterior sin procesar.C
Cadena de caracteres
str, que se usa para almacenar texto, como nombres, mensajes y códigos."Hello, Nora" almacena el saludo, su coma y su espacio como parte de un único valor de texto ordenado.Cadena formateada
f que evalúa expresiones en campos entre llaves e inserta sus valores en el texto resultante.count = 7, la cadena formateada f"Found {count}" construye "Found 7" sin una conversión explícita de número a texto.Campo de expresión
f"Total: {3 * 4}" calcula doce antes de insertar el resultado después de la etiqueta.Campo vacío
"a;;c" por ";" conserva un campo vacío en la segunda posición y mantiene un valor ausente del registro.Carácter de relleno
f"{'ok':*^6}" da "**ok**" y rellena las posiciones sin usar alrededor del texto.Caracteres de espacio en blanco
" \t" contiene solo caracteres de espacio en blanco, y limpiar sus extremos elimina ambos caracteres y deja texto vacío.Coincidencias sin solapamiento
count()."aaaa".count("aa") usan posiciones de caracteres distintas, por lo que el conteo es dos.Comparación con distinción entre mayúsculas y minúsculas
"Ready" == "ready" sea falsa hasta que ambos valores tengan un uso uniforme de mayúsculas y minúsculas.Comprobación de caracteres
isalpha() también rechazan las cadenas vacías."lake9".isalnum() es verdadera, mientras que el espacio de "lake 9" hace que esa versión no la supere.Comprobación de dígitos decimales
isdecimal(), acepta cadenas no vacías de caracteres de dígitos decimales y rechaza signos, puntos decimales y espacios."007", que se convierte en el número entero siete.Comprobación de pertenencia
in o not in para comprobar si aparece una subcadena y devuelve un booleano sin indicar su posición."ice" in "spice" es verdadera, mientras que "Ice", con mayúscula inicial, no coincide con el mismo texto.Concatenación
"rain" + "coat" da "raincoat"; añadir un espacio requiere una parte que lo contenga.Contador
"Bay 27" aumenta con 2 y 7 y termina con dos coincidencias después del bucle.Conversión con map()
map() aplica una función a cada elemento de entrada, permitiendo que str proporcione las partes de tipo cadena que requiere join().map() en ", ".join(map(str, [3, 8])) proporciona cadenas antes de unirlas como "3, 8".Conversión de campos
int() antes de sumarla."12" en un número entero antes de poder sumarlo numéricamente a cinco.Conversión entre caracteres y puntos de código
ord() para obtener el número Unicode de un carácter y chr() para obtener el carácter de ese número.ord("A") da 65, y la conversión inversa con chr(65) da "A".E
Eliminación de caracteres en los extremos
"..hello!!" con el conjunto ".!" conserva "hello" y deja intacto el texto interno.Encadenamiento de métodos
" OK ".strip().lower() devuelve primero "OK" y después convierte ese resultado en "ok".enumerate()
enumerate() proporciona cada elemento de una secuencia junto con su índice, permitiendo que un bucle use ambos sin una consulta independiente.enumerate("sun") recibe pares de índice y carácter que empiezan con 0, "s" y terminan con 2, "n".Error de desfase de una unidad
text[len(text)] lee más allá del final; restar uno da el índice del último carácter.Especificador de formato
f"{8.5:.2f}", el especificador de formato .2f selecciona dos cifras decimales y produce "8.50" para mostrarlo.Evaluación en cortocircuito
s.isdecimal() and int(s) > 0 omite la conversión cuando falla la comprobación de caracteres.F
find()
find() devuelve el índice inicial de la primera subcadena coincidente, o -1 si el texto solicitado no aparece."lemon".find("mo") devuelve dos, mientras que "lemon".find("xy") devuelve menos uno para indicar que no hay coincidencias.Formato de coma fija
f para mostrar un número con una cantidad elegida de cifras decimales, redondeando y añadiendo ceros finales cuando hace falta..3f muestra el número entero cinco como "5.000", con exactamente tres cifras decimales.Formato porcentual
% para multiplicar una fracción por 100 al mostrarla y añadir un signo de porcentaje, con una precisión decimal opcional..0% muestra 0.18 como "18%"; proporcionar dieciocho multiplicaría el valor una segunda vez.Fuente monoespaciada
Í
Índice
label = "desk", el índice 2 selecciona "s", ya que las posiciones empiezan con d en cero.Índice negativo
-1 es el último y -len(text) es el primero."cloud", el índice negativo -1 selecciona "d", mientras que -2 selecciona el carácter anterior, "u".I
IndexError
"cup"[3] lanza IndexError, ya que sus tres caracteres ocupan las posiciones de cero a dos.Inmutabilidad
name[0] = "B" falle, mientras que name = "B" + name[1:] construye texto nuevo correctamente.L
Límite del segmento
"garden"[:3], el límite de segmento tres es el final excluido, por lo que d queda fuera y el resultado es "gar".Lista
"oak,elm" por una coma, la lista contiene dos elementos y el índice uno selecciona la cadena "elm".Literal de cadena
"open" y 'open' usan comillas externas distintas, pero almacenan los mismos cuatro caracteres.Literal de cadena sin procesar
r que conserva las barras inversas como caracteres literales en lugar de procesar las secuencias de escape habituales.r"C:\new" conserva la barra inversa antes de new, evitando que ese par se convierta en un salto de línea.Llave literal
f"{{open}}" muestra { alrededor de open sin pedir a Python que evalúe ese nombre.M
Método de cadena
"hello".upper() devuelve "HELLO"; omitir los paréntesis no lo llama.N
Normalización de espacios en blanco
" ".join(text.split()) limpia los extremos y sustituye las secuencias internas de espacios en blanco por un solo espacio normal." ".join(text.split()) convierte " blue\n sky " en "blue sky", con un espaciado uniforme.Normalización de mayúsculas y minúsculas
"Straße" como "STRASSE" en "strasse", permitiendo que ambas formas se consideren iguales al compararlas.Número máximo de divisiones
split() o rsplit(), dejando el resto junto en una parte sin dividir."a=b=c" en "a" y "b=c" desde la izquierda y conserva los signos iguales posteriores.O
Orden lexicográfico
"19" antes de "3", porque sus primeros caracteres distintos deciden la comparación.P
Palíndromo
"radar" supera word == word[::-1]; mezclar mayúsculas y minúsculas requiere normalizarlas cuando deba ignorarse esa distinción.Partición
"color=blue" por "=" es ("color", "=", "blue") y conserva el separador en el centro.Paso del segmento
"abcdef"[::2] selecciona los índices cero, dos y cuatro, lo que produce "ace".Posición inicial de búsqueda
"cocoa".find("co", 1) omite la coincidencia en cero y encuentra la de dos.Precisión de cadena
f"{'sunshine':6.3}" muestra "sun" y tres espacios sin cambiar la palabra original.Punto de código Unicode
len() los cuenta."👍🏽" contiene dos puntos de código Unicode, por lo que su longitud de cadena en Python es dos pese a su apariencia.R
Reasignación
a contiene "red", la reasignación con a += "!" hace que a se refiera a "red!", mientras que otra variable puede seguir conteniendo "red".Recorrido de una cadena
for directo o un bucle while que usa un índice."go!" visita g, después o y después !, lo que permite tomar una decisión independiente para cada carácter.Redondeo al par
0.125 y 0.375 se muestren como "0.12" y "0.38" con dos cifras decimales.Relleno
"5".zfill(3) produce "005", mientras que "1234", que ya es más largo, permanece intacto con una anchura de tres.Relleno con ceros
f"{4:02d}" muestra "04", permitiendo que un minuto de un dígito ocupe un campo de dos dígitos.removeprefix()
removeprefix() elimina un inicio que coincida exactamente con el indicado y devuelve el texto original cuando ese inicio no aparece."pretest".removeprefix("pre") da "test", mientras que un prefijo ausente deja el texto intacto.removesuffix()
removesuffix() elimina un final que coincida exactamente con el indicado, conservando otros caracteres que la eliminación por conjunto podría quitar."report.txt".removesuffix(".txt") conserva "report", incluida la t final del nombre base.rfind()
rfind() devuelve el índice inicial de la última subcadena coincidente, usando las posiciones de la cadena completa aunque busque desde la derecha."a-b-c".rfind("-") devuelve tres y localiza el último guion con una posición contada desde la izquierda.S
Secuencia de escape
"up\ndown", la secuencia de escape \n almacena un salto de línea, por lo que la impresión coloca las palabras en dos líneas.Segmento
"window"[1:4] devuelve "ind", seleccionando las posiciones de uno a tres y excluyendo la posición cuatro.Separador
", " coincide con una coma seguida de un espacio, por lo que no divide la cadena "oak,elm".Separador vacío
join() para juntar partes sin caracteres adicionales entre ellas."".join(["a", "b", "c"]) da "abc" y conserva el orden de las partes.str.format()
str.format() rellena campos entre llaves de una cadena usando sus argumentos, con los campos seleccionados por orden o por un índice de argumento explícito."{1}, {0}".format("Ada", "Lovelace") usa str.format() para colocar el segundo argumento antes del primero.Subcadena
"light" es una subcadena de "daylight", pero "dyl" no lo es porque esas letras no son consecutivas.U
Unión de cadenas
["home", "nora"] con el separador "/" produce "home/nora", con una barra entre las partes.V
Valor de retorno
text.upper() es texto en mayúsculas; asignarlo a text lo conserva para usarlo después.Sobre esta unidad
Crea tus propios Materiales de Estudio
Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.