PYTHON: GUÍA 10 - STRINGS Prof.
Mariángeles Glavina
PHYTON: Cadenas de caracteres
Las cadenas (o strings) son un tipo de datos compuestos por secuencias de caracteres que representan texto. Estas cadenas
de texto o cadenas de caracteres son objetos de tipo str y se delimitan mediante el uso de comillas simples o dobles.
Por ejemplo "Hola mundo" es un string. Para trabajar con string tenemos métodos y funciones especiales.
Recordemos que las cadenas son tipos de datos iterables, es decir, sus elementos pueden ser recorridos con un ciclo for al
igual que los elementos de una lista o tupla.
Por ejemplo:
CADENA=input("ingrese una cadena: ")
for i in CADENA:
print(i, end="")
imprimirá en pantalla los caracteres de la cadena uno al lado del otro, ya que la variable I guardará en cada iteración, cada
carácter de la cadena
operador + y función str()
El operador + puede sumar números, puede concatenar listas, y además puede concatenar textos.
La función str() convierte a texto el dato al que se le aplique
9 error 45 45 45 45
Función len()
Al igual que en las listas, la función len() devuelve la longitud de la cadena, es decir, la cantidad de caracteres que tiene,
incluidos los espacios y los signos de puntuación.
4 5 0 15
Métodos de formato
Método: capitalize()
Bienvenido
Retorna: una copia de la cadena a mi
con la primera letra en mayúsculas.
aplicación
Método: lower() Retorna: una
josé pérez
copia de la cadena en minúsculas.
Método: upper()
JOSÉ PÉREZ
Retorna: una copia de la cadena en
mayúsculas.
Método: swapcase()
jOSÉ pÉREZ
Retorna: una copia de la cadena
convertidas las mayúsculas en
minúsculas y viceversa.
Método: title()
Mariposa
Retorna: una copia de la cadena Tecknicolor
convertida, poniendo en
mayúscula la primer letra de cada
palabra y en minúscula las demás
Métodos de alineación
Método: ===========Bienvenido a mi aplicación=========
cadena = "Bienvenido a mi aplicación" ===
center(longitud, print (cadena.center(50, "="))
"caracter de relleno")
cadena = "Bienvenido a mi aplicación" Bienvenido a mi aplicación
Retorna: una copia de print (cadena.center(50, " "))
la cadena centrada.
Método: cadena ="Bienvenido a mi aplicación" Bienvenido a mi aplicación====================
print (cadena.ljust(50, "=")) ===
ljust(longitud,
"caracter de relleno")
Retorna: una copia de
la cadena alineada a la
izquierda.
Método: =======================Bienvenido a mi
cadena ="Bienvenido a mi aplicación" aplicación
rjust(longitud, print (cadena.rjust(50, "="))
"caracter de relleno")
Bienvenido a mi
Retorna: una copia de cadena ="Bienvenido a mi aplicación" aplicación
la cadena alineada a la print (cadena.rjust(50, " "))
derecha.
Método: zfill(longitud)
numero_factura = 1575
Retorna: una copia de print (str(numero_factura).zfill(12)) 000000001575
la cadena rellena con
ceros a la izquierda
hasta alcanzar la
longitud final indicada.
Métodos de búsqueda
Método:
2
count("subcadena", 0
posicion_inicio, 1
posicion_fin)
7
Retorna: un entero
5
representando la
3
cantidad de
0
apariciones de
1
subcadena dentro de 9
cadena. 4
4
Método:
0
find("subcadena", -1
posicion_inicio, 4
posicion_fin)
1
Retorna: un entero
7
representando la
13
posición donde inicia
16
la subcadena dentro
44
de cadena. Si no la -1
encuentra, retorna -1. 1
2
Métodos de validación
Saber si una cadena
comienza con una subcadena True
determinada False
False
Método: False
startswith("subcadena", True
posicion_inicio, posicion_fin) False
True
Retorna: True o False
Saber si una cadena termina
con una subcadena True
determinada True
False
Método: False
endswith("subcadena", False
posicion_inicio, posicion_fin) True
False
Retorna: True o False
Saber si una cadena es False
alfanumérica (solo contiene
letras y/o números) False
Método: isalnum() True
Retorna: True o False
Saber si una cadena es
alfabética (contiene solo False
letras)
True
Método: isalpha()
False
Retorna: True o False
False
Saber si una cadena es cadena = "pepegrillo 75"
numérica (contiene solo print(cadena.isdigit()) False
números) cadena = "7584"
print(cadena.isdigit()) True
Método: isdigit() cadena = "75 84"
print(cadena.isdigit()) False
cadena = "75.84"
Retorna: True o False
print(cadena.isdigit()) False
Saber si una cadena contiene cadena = "pepe grillo"
solo minúsculas print(cadena.islower()) True
cadena = "Pepe Grillo"
Método: islower() print(cadena.islower()) False
cadena = "Pepegrillo"
print(cadena.islower()) False
Retorna: True o False
cadena = "pepegrillo75"
print(cadena.islower()) True
Saber si una cadena contiene cadena = "PEPE GRILLO"
solo mayúsculas print(cadena.isupper()) True
cadena = "Pepe Grillo"
Método: isupper() print(cadena.isupper()) False
cadena = "Pepegrillo"
print(cadena.isupper()) False
Retorna: True o False
cadena = "PEPEGRILLO"
print(cadena.isupper()) True
Saber si una cadena contiene cadena = "pepe grillo"
solo espacios en blanco print(cadena.isspace()) False
cadena = " "
Método: isspace() print(cadena.isspace()) True
Retorna: True o False
Saber si una cadena tiene
Formato De Título cadena = "Pepe Grillo"
print cadena.istitle() True
Método: istitle() cadena = "Pepe grillo"
print cadena.istitle() False
Retorna: True o False
Métodos de Sustitución
Dar formato a una cadena, sustituyendo texto dinámicamente
Método: format(*args, **kwargs) Retorna: la cadena formateada.
cadena = "bienvenido a mi aplicación {0}"
print(cadena.format("en Python")) bienvenido a mi aplicación en Python
cadena = "Importe bruto: ${0} + IVA: ${1} = Importe neto: {2}"
print(cadena.format(100, 21, 121))
Importe bruto: $100 + IVA: $21 = Importe neto: 121
cadena = "Importe bruto: ${bruto} + IVA: ${iva} = Importe neto: {neto}"
print(cadena.format(bruto=100, iva=21, neto=121))
Importe bruto: $100 + IVA: $21 = Importe neto: 121
print(cadena.format(bruto=100, iva=100 * 21 / 100, neto=100 * 21 / 100 + 100))
Importe bruto: $100 + IVA: $21 = Importe neto: 121
Reemplazar texto en una cadena
Método: replace("subcadena a buscar", "subcadena por la cual reemplazar")
Retorna: la cadena reemplazada.
buscar = "nombre apellido"
reemplazar_por = "Juan Pérez"
print("Estimado Sr. nombre apellido:".replace(buscar, reemplazar_por))
Estimado Sr. Juan Pérez:
Eliminar caracteres a la izquierda y derecha de una cadena
Método: strip('caracter') Retorna: la cadena con los caracteres especiales eliminados
cadena = " www.eugeniabahit.com "
print(cadena.strip())
www.eugeniabahit.com
nombre=",,,,,**,, Mariángeles Glavina ,."
print(nombre.strip(',* .'))
Mariángeles Glavina
Eliminar caracteres a la izquierda o a derecha de una cadena
Método: lstrip() o rstrip()
Retorna: la cadena sustituida con los caracteres indicados eliminados.
cadena = "www.eugeniabahit.com"
print(cadena.lstrip("w."))
eugeniabahit.com
cadena = " www.eugeniabahit.com"
print(cadena.lstrip())
www.eugeniabahit.com
cadena = "www.eugeniabahit.com "
print(cadena.rstrip())
www.eugeniabahit.com
Métodos de unión y división
Unir una cadena de forma iterativa
Método: join(iterable)
Retorna: la cadena unida con el iterable (la cadena es separada por cada uno de los elementos del
iterable).
formato_numero_factura = ("Nº 0000-0" , "-0000 (ID: " , ")")
numero = "275"
numero_factura = numero.join(formato_numero_factura)
print(numero_factura)
Nº 0000-0275-0000 (ID: 275)
Partir una cadena en tres partes, utilizando un separador
Método: partition("separador")
Retorna: una tupla de tres elementos donde el primero es el contenido de la cadena previo al
separador, el segundo, el separador mismo y el tercero, el contenido de la cadena posterior al
separador.
tupla = "http://www.eugeniabahit.com".partition("www.")
print(tupla)
('http://', 'www.', 'eugeniabahit.com')
Partir una cadena en varias partes, utilizando un separador
Método: split("separador")
Retorna: una lista con todos elementos encontrados al dividir la cadena por un separador.
palabras = "python, guia, curso, tutorial".split(", ")
print(palabras)
['python', 'guia', 'curso', 'tutorial']
Partir una cadena en en líneas
Método: splitlines()
Retorna: una lista donde cada elemento es una fracción de la cadena divida en líneas.
texto = """Linea 1
Linea 2
Linea 3
Linea 4
"""
Print(texto.splitlines())
['Linea 1', 'Linea 2', 'Linea 3', 'Linea 4']
texto = "Linea 1\nLinea 2\nLinea 3"
print(texto.splitlines())
['Linea 1', 'Linea 2', 'Linea 3']
Rebanando cadenas (Slicing)
Las cadenas de caracteres son como listas numeradas de elementos, en donde importa el orden.
Por ejemplo: “Python” es una cadena de 6 caracteres, a cada uno le corresponde un número que indica el lugar que ocupa
en la cadena , comenzando con 0 o también con números negativos
P⁞y⁞t⁞h⁞o⁞n
0 1 2 3 4 5
-6 -5 -4 -3 -2 -1
El slicing es una capacidad de las cadenas que devuelve un subconjunto o subcadena utilizando dos índices [inicio:fin]:
El primer índice indica donde empieza la subcadena (se incluye el carácter).
El segundo índice indica donde acaba la subcadena (se excluye el carácter).
Ejemplo:
palabra = "Python"
print( palabra[0:2] ) Py
print( palabra[2:6] ) thon
print( palabra[-4:-2] ) th
Si en el slicing no se indica un índice se toma por defecto el principio y el final:
Ejemplo
palabra = "Python"
print( palabra[:2] ) Py
print( palabra[2:] ) thon
print( palabra [ :-2 ] ) Pyth
print( palabra [-2: ]) on
print( palabra [ : ] ) Python
print ( palabra[0:1] + palabra[2:5] ) Ptho
print ( palabra [:2] + palabra [2:] ) Python
print ( palabra [-1::-1]) nohtyP
Inmutabilidad
Una propiedad de las cadenas es que no se puede modificar su contenido.
Si intentamos reasignar un carácter, no nos dejará:
Por ejemplo:
palabra = "Python "
palabra[0] = "N"
print(palabra)
Es un código que dará error
Sin embargo, utilizando slicing y concatenación podemos generar nuevas cadenas fácilmente:
palabra = "Python "
palabra = "N" + palabra[1:]
print(palabra) Nython
EJERCICIOS
9.A) Codificá un programa para que al ingresar una palabra cuente la cantidad de letras que posee la misma y las imprima
una debajo de otra
9.B) Ahora a la inversa, codificá un programa para que el usuario ingrese una palabra letra por letra (previamente le podés
preguntar al usuario cuántas letras va a ingresar o pedir que para finalizar ingrese un carácter especial), y el programa
deberá mostrar la palabra completa con la primer letra en mayúscula y las demás en minúscula
9.C) Se pide al usuario que ingrese una cadena de texto y luego otra. El programa debe informar cuál cadena es más larga o
decir si tienen la misma cantidad de caracteres
9.D) Se pide al usuario que escriba "cara" o "ceca". El programa debe "lanzar una moneda" e informar si el usuario acertó.
Previamente deberá informar al usuario un error si éste no escribió CARA-Cara-CaRa........ o CECA-Ceca-CeCa..... o
cualquiera de sus combinaciones.
9.E) Codificá un programa para que el usuario ingrese su DNI sin puntos y el programa agregue los puntos y lo muestre
9.F) Indique si se trata de un palíndromo (capicúa) Por ejemplo, anita lava la tina es un palíndromo (se lee igual de
izquierda a derecha que de derecha a izquierda).
9.G) Realiza un proyecto con funciones para que, ingresada una cadena, cada función imprima:
- F1: Imprima los dos primeros caracteres y los tres últimos caracteres.
- F2: solamente los tres primeros caracteres en mayúsculas,
- F3: los tres primeros caracteres en minúsculas y los demás en mayúsculas
- F4: Imprima dicha cadena cada dos caracteres. Ej.: recta debería imprimir rca
- F5: cada carácter reemplazado por asteriscos,
- F6: cuántas vocales posee
- F7: cada vocal reemplazada por un guión bajo
- F8: separe cada letra con guiones
- F9: Devuelva solamente las letras consonantes. Por ejemplo, si recibe “algoritmos” o “logaritmos” debe devolver
“lgrtms”.
- F10: Devuelva solamente las letras vocales. Por ejemplo, si recibe “sin consonantes” debe devolver “i ooae”.
- F11: Devuelve la cadena en forma inversa, por ejemplo si se ingresa la cadena CORAZON deberá retornar NOZAROC.
9.H) Realiza un proyecto con tres funciones, para que ingresada una cadena de palabras, se imprima:
- F1: cada palabra renglón por renglón
- F2: La primera letra de cada palabra. Por ejemplo, si recibe Universal Serial Bus debe devolver USB.
- F3: Las palabras que comiencen con la letra A. Por ejemplo, si recibe Antes de ayer debe devolver Antes ayer.
9.I) ¿Recordás en la guía 2, el ejercicio para calcular el dígito verificador del número de CUIL?
Esta vez el usuario ingresa M o F (por masculino o femenino) NO IMPORTA SI LO INGRESA CON MAYÚSCULA O MINÚSCULA,
pero no sea acepta otras letras que no sean M o F.
El usuario debe ingresar el DNI con el siguiente formato 00.000.000 (verificar que tenga 8 cifras y que los puntos estén en el
lugar correcto) o con el siguiente formato 0.000.000 (verificar que tenga 7 cifras y que los puntos estén en el lugar correcto.
Luego realizar el algoritmo para que el programa muestre completo el número de CUIL, con el siguiente formato:
xx-00000000-x
RECORDÁ EL ALGORTIMO:
El número de CUIL de una persona se forma por un 20 (si el género asignado en el DNI al nacer es “hombre”) o por un 27 (si
el género asignado en el DNI al nacer es “mujer”) seguido del número del DNI y para finalizar un número de una cifra,
llamado DÍGITO VERIFICADOR.
Por ejemplo:
el CUIL de Carlitos Tevez es 20 – 30577255 – 1
20 porque es hombre
30577255 porque es su DNI
1 es el dígito verificador Pero… ¿Cómo se calcula el dígito verificador de una cifra?
- Se procede a tomar el número de 10 dígitos compuesto por los 2 primeros más los 8 dígitos siguientes,
de derecha a izquierda, multiplicando cada dígito por los números que componen la serie numérica 2,3,4,5,6,7 (si se ha
aplicado la serie hasta el 7 y quedan dígitos por multiplicar, se comienza la serie nuevamente):
Por ejemplo, en el caso de Tevez, los 10 primeros dígitos son 20-30577255
Se realizan los productos empezando por el último número
5 x 2 = 10 5 x 3 = 15 2 x 4 = 8 7 x 5 = 35 7 x 6 = 42 5 x 7 = 35 0 x 2 = 0 3 x 3 = 9 0 x 4 = 0 2 x 5 = 10
- Luego se suman los resultados de estos productos, como se muestra a continuación
10 + 15 + 8 + 35 + 42 + 35 + 0 + 9 + 0 + 10 = 164
- Al número obtenido por la suma del producto de cada dígito por la serie ya mencionada, se le aplica módulo 11, o sea, se
divide por 11 y se determina el resto de la división.
164/11 tiene resto 10
- Ahora se hace 11 menos ese resto 11 – 10 = 1
Por lo tanto el dígito verificador del CUIL de Tévez es 1, como vimos en un principio
¡¡ATENCIÓN!! ESTE SISTEMA TIENE UNA FALLA, Y POR ESO ALGUNAS PERSONAS TIENEN SU CUIL CON UN 23, en lugar de 20
o 27.
POR EJEMPLO: ¿Cuál sería el dígito verificador del CUIL de Lio Messi, sabiendo que su DNI es 33016244?
Comprobamos en nuestro programa que el dígito verificador es 10,
pero 10 es un número de 2 cifras, o sea, no es un dígito (dígito: nro del 0
al 9). En ese caso, se reasigna el identificador de género 23, en lugar de
20 y se procede a calcular el nuevo dígito. (lo mismo para el género
femenino)
En este caso verificamos que el CUIL de Messi es 23-33016244-9.
Algo similar sucede cuando el dígito verificador da 11, en ese caso se
asigna como dígito al 0.
9.J) Crear un programa para validación de nombres de usuarios. Dicho módulo, deberá cumplir con los siguientes criterios
de aceptación:
• El nombre de usuario debe contener un mínimo de 6 caracteres y un máximo de 12.
• El nombre de usuario debe ser alfanumérico.
• Nombre de usuario con menos de 6 caracteres, retorna el mensaje "El nombre de usuario debe contener al menos 6
caracteres".
• Nombre de usuario con más de 12 caracteres, retorna el mensaje "El nombre de usuario no puede contener más de 12
caracteres".
• Nombre de usuario con caracteres distintos a los alfanuméricos, retorna el mensaje "El nombre de usuario puede
contener solo letras y números".
• Nombre de usuario válido, retorna True.
9.K) Crear un programa para validación de contraseñas. Dicho módulo, deberá cumplir con los siguientes criterios de
aceptación:
• La contraseña debe contener un mínimo de 8 caracteres.
• Una contraseña debe contener letras minúsculas, mayúsculas, números y al menos 1 carácter no alfanumérico.
• La contraseña no puede contener espacios en blanco.
• Contraseña válida, retorna True.
• Contraseña no válida, retorna el mensaje "La contraseña elegida no es segura".
9.L) Se ingresa “apellido, nombre” de una determinada cantidad de alumnos. El programa deberá mostrar una lista con los
apellidos y otra lista con los nombres
9.M) Dados los dos primeros párrafos del artículo Catedral de la Asunción en Jaén, desarrolla un programa en Python que
nos permita conocer la palabra con más letras en el texto.
"La Santa Iglesia Catedral de la Asunción de la Virgen es la catedral renacentista de Jaén, sede del obispado de Jaén, en
la comunidad autónoma de Andalucía, España. Se ubica en la Plaza de Santa María, frente al Palacio Municipal y el
Palacio Episcopal.
La catedral actual fue concebida en el siglo xvi para sustituir al anterior templo gótico del siglo xv. La construcción se
prolongó durante varios siglos, a pesar de lo cual la idea original permaneció intacta. Destacan la sala capitular y la
sacristía, que son la obra cumbre de Andrés de Vandelvira, y una de la obras más importantes del renacimiento español.
También es sobresaliente su fachada principal, una de las principales obras del barroco español, construida tras la
consagración del templo en 1660. Igualmente, destaca el coro neoclásico debido a su belleza y al gran número de sitiales
que lo convierten en uno de los más grandes de España. Una vez finalizadas las obras del edificio, las mismas
continuaron en los siglos siguientes principalmente en la decoración interior y de las capillas. Además, a consecuencia del
terremoto de Lisboa de 1755 fueron necesarias obras de consolidación en la fachada norte, así como la construcción de la
Iglesia del Sagrario. "
9.N) Dado el texto del ejercicio anterior, queremos cargar todas las palabras (sin caracteres especiales) en una lista, y
contar cuántas palabras diferentes tiene, (ojo, “que” y “Que” contarían como palabras repetidas, pero “qué” y “que”
cuentan como palabras diferentes)
9.O) Escribí un programa que lea una cadena y devuelva un diccionario con la cantidad de apariciones de cada palabra en la
cadena. Por ejemplo, si recibe “Qué lindo día que hace hoy” debe devolver: ‘que’: 2, ‘lindo’: 1, ‘día’: 1, ‘hace’: 1, ‘hoy’: 1
9.P) Tenemos guardado en un diccionario los códigos morse correspondientes a cada caracter. Escribí un programa que lea
una palabra y la muestre usando el código morse. codigo = {
'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.', 'F': '..-.',
'G': '--.', 'H': '....', 'I': '..', 'J': '.---', 'K': '-.-', 'L': '.-..',
'M': '--', 'N': '-.', 'O': '---', 'P': '.--.', 'Q': '--.-', 'R': '.-.',
'S': '...', 'T': '-', 'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-',
'Y': '-.--', 'Z': '--..', '1': '.----', '2': '..---', '3': '...--', '4': '....-',
'5': '.....', '6': '-....', '7': '--...', '8': '---..', '9': '----.', '0': '-----',
'.': '.-.-.-', ',': '--..--', ':': '---...', ';': '-.-.-.', '?': '..--..', '!': '-.-.--',
'"': '.-..-.', "'": '.----.', '+': '.-.-.', '-': '-....-', '/': '-..-.', '=': '-...-',
'_': '..--.-', '$': '...-..-', '@': '.--.-.', '&': '.-...', '(': '-.--.', ')': '-.--.-' }
9.Q) Usando el diccionario de las claves morses del ejercicio anterior ahora nos pide un código morse donde cada letra esta
separada por espacios y nos da la cadena correspondiente.
9.R) Creá un diccionario con datos de personas, en la que la clave es el DNI y los datos a guardar de cada persona es el
apellido y nombre, con el siguiente formato: “apellido, nombre/s”
- Preguntar si se desea cargarle datos a la tabla o continuar con el programa si la persona elige que no. (en la
consola)
- Si se desea ingresar datos: El programa debe verificar que la cadena apellido y nombre tenga solo una coma, que
no contenga números, sino debe informar de un error y volver a pedir hasta que sea ingresado correctamente. Si algún DNI
ya existe debe preguntar si desea modificar ese registro. El ingreso termina cuando el usuario así lo decida.
- Luego del ingreso, todos los datos del diccionario deberán ser cargados en otro diccionario, en donde la clave es el
DNI y el valor es una lista con dos lugares, en el primer lugar el NOMBRE/S y en el segundo lugar el APELLIDO.
9.S) PARA PENSAR: Implementa una función cuenta_subcadenas_ax(cadena) que devuelva el número de subcadenas
contenidas en el string cadena que comienzan por la letra A y terminan por la letra X.
Por ejemplo, dada la cadena de entrada "CAXAAYXZA", hay cuatro subcadenas que comienzan con "A" y terminan con "X",
que son: AX, AXAAYX, AAYX y AYX.
• La cadena de entrada estará formada únicamente por letras en mayúscula.
• La función debe devolver un número entero con el número de subcadenas encontradas.
>>> cuenta_subcadenas_ax('CAXAAYXZA') muestra 4
>>> cuenta_subcadenas_ax('AAXOXXA') muestra 6
>>> cuenta_subcadenas_ax('AXAXAXAXAX') muestra 15
Bibliografía:
• Bahit, E. (2012). ”Curso Python para principiantes.” Buenos Aires: www.eugeniabahit.com
• Downey, A., Elkner, J., Meyers, (2002) “Aprenda a Pensar Como un Programador”. Recuperado desde:
https://argentinaenpython.com/quiero-aprender-python/aprenda-a-pensar-como-un-programador-
conpython.pdf
• González Duque, R. (2016). “Python para todos” . Recuperado de: www.mundogeek.net
• Grimson, R. y otros (2020) “Curso de programación en Python” UNSAM, Buenos Aires, Recuperado de
https://github.com/python-
unsam/Programacion_en_Python_UNSAM/blob/master/Notas/04_Listas_y_Listas/02_IteradoresLista.md
• Sánchez Alberca, A. (2020). “Ejercicios de Python”. Recuperado
desde: http://aprendeconalf.es/python/ejercicios/
• Sintes Marco, B. (2020). “Introducción a la programación con Python - www.mclibre.org” Recuperado
desde: https://www.mclibre.org/consultar/python/