Este documento presenta una lección sobre cadenas (strings) en Python. Explica conceptos como acceso a caracteres, formato, alineación, reemplazo, búsqueda, división y unión de cadenas. También cubre temas como presentación de cadenas con formato, códigos de caracteres, relleno, principio y fin de cadenas, y excepciones. Finalmente, propone tres ejercicios prácticos sobre cadenas.
2. Contenido Clase 08
• Cadenas (Strings)
• Acceso a los caracteres de la cadena
• Formato de cadenas
• Alineando cadenas
• Reemplazando cadenas
• Buscando cadenas
• Dividir y unir cadenas
• Presentación de cadenas
• Código de un carácter
• Rellenar una cadena y contar subcadena
• Principio y fin de una cadena
• Excepciones
• Captura y tratamiento de excepciones
3. Cadenas (Strings)
• Los cadenas (strings) son un tipo de dato compuesto por una secuencia de
caracteres que representan un texto. Estas cadenas de texto son de tipo str y se
delimitan mediante el uso de comillas simples o dobles.
• Cada uno de los caracteres de una cadena (incluidos los espacios) tiene asignado
un índice.
• Las cadenas son inmutables.
Ejemplo: La cadena "Python"
4. Acceso a los caracteres de la cadena
• El acceso a los caracteres de una cadena son los mismos que para las listas.
Ejemplo:
cadena = "Esto es una cadena de texto ¡Oh!"
print(cadena[3:len(cadena):2])
print(cadena[::-1])
cadena=cadena+cadena[len(cadena)-4:]*3
print(cadena)
Salida:
oe n aead et O!
!hO¡ otxet ed anedac anu se otsE
Esto es una cadena de texto ¡Oh!¡Oh!¡Oh!¡Oh!
5. Formato de cadenas
Sea x una cadena:
• x.upper(): devuelve una copia de la cadena convirtiendo las letras minúsculas a mayúsculas.
• x.lower(): devuelve una copia de la cadena convirtiendo las letras mayúsculas a minúsculas.
• x.title(): devuelve una copia de la cadena usando la notación de título.
• x.capitalize(): devuelve una copia de la cadena convirtiendo en mayúscula solo la primera letra.
• x.swapcase(): devuelve una copia de la cadena convertidas las mayúsculas en minúsculas y viceversa.
Ejemplo:
cadena = "esTO es una CADena de teXto ¡oH!"
print(cadena.upper()) # ESTO ES UNA CADENA DE TEXTO ¡OH!
print(cadena.lower()) # esto es una cadena de texto ¡oh!
print(cadena.title()) # Esto Es Una Cadena De Texto ¡Oh!
print(cadena.capitalize()) # Esto es una cadena de texto ¡oh!
print(cadena.swapcase()) # ESto ES UNA cadENA DE TExTO ¡Oh!
6. Alineando cadenas
• {:<10} campo de 10 caracteres, alineando a la izquierda.
Se añaden espacios a la derecha hasta completar 10.
• {:>10} campo de 10 caracteres, alineando a la derecha.
Se añaden espacios a la izquierda hasta completar 10.
• {:^10} campo de 10 caracteres, alineando en el centro.
Se añaden espacios por la izquierda y derecha hasta
completar 5, de forma que el texto quede centrado.
• Puede colocar un carácter de relleno después de los dos
puntos.
Ejemplo:
for x in range(1,11):
print ("{3}{0:<10.2f}{3}{3}{1:.^10d}{3}{3}{2:>10d}{3}".format(x, x * x, x * x * x, "|"))
Ejemplo:
for x in range(1,11):
print ("{5}{0:<8}{5}{1:8}{5}{2:^8}{5}{3:>8}{5}{4:8}{5}".format(x,"Juan", "Rosa", "Lee",25,"|"))
7. Alineando cadenas
Sea x una cadena:
• x.center(campo,carácter de relleno): devuelve una copia de la cadena centrada.
• x.ljust(campo, carácter de relleno): devuelve una copia de la cadena alineada a la izquierda.
• x.rjust(campo, carácter de relleno): devuelve una copia de la cadena alineada a la derecha.
• El campo es el tamaño total que ocupa la cadena y el relleno.
• Si no coloca el carácter, asume que es el espacio en blanco.
Ejemplo:
cadena = "Lista de empleados"
print (cadena.center(50, "="))# ================Lista de empleados================
print (cadena.ljust(50, "=")) # Lista de empleados================================
print (cadena.rjust(50, "=")) # ================================Lista de empleados
print(cadena.center(50)) # Lista de empleados
8. Reemplazando cadenas
Sea x una cadena:
• x.lstrip(caracteres): devuelve una copia de la cadena a la cual se le han eliminado los caracteres del
principio. Si no se coloca nada elimina los espacios en blanco.
• x.rstrip(caracteres): devuelve una copia de la cadena a la cual se le han eliminado los caracteres del
final. Si no se coloca nada elimina los espacios en blanco.
• x.strip(caracteres): devuelve una copia de la cadena a la cual se le han eliminado los caracteres de
ambos lados. Si no se coloca nada elimina los espacios en blanco.
Ejemplo:
cadena1 = " .,,;.:Hola:) estimados, ... amigos,;,:),;"
cadena2= " Hola otra vez "
print ("x"+cadena1+"x") # x .,,;.:Hola:) estimados, ... amigos,;,:),;x
print("x"+cadena1.lstrip(";):,. ")+"x") # xHola:) estimados, ... amigos,;,:),;x
print("x"+cadena1.rstrip(";):,. ")+"x") # x .,,;.:Hola:) estimados, ... amigosx
print ("x"+cadena1.strip(";):,. ")+"x") # xHola:) estimados, ... amigosx
print ("x"+cadena2.strip()+"x") #xHola otra vezx
9. Reemplazando cadenas
Sea x una cadena:
• x.replace(subcadena1, subcadena2, ocurrencias): devuelve una copia de la
cadena a la cual se le ha reemplazado la subcadena1 por la subcadena2 el
número de ocurrencias especificado.
• Si la cadena1 no se encuentra en la cadena x, entonces no hace nada.
Ejemplo:
cadena = "Esto es una cadena de texto y tiene un concepto notorio"
print(cadena.replace("to", "tatu")) # Estatu es una cadena de textatu y tiene un conceptatu notaturio
print(cadena.replace("to", "tatu",2)) # Estatu es una cadena de textatu y tiene un concepto notorio
10. Buscando cadenas
Sea x una cadena:
• x.find(subcadena,inicio,fin): Busca una subcadena dentro de una cadena.
Ejemplo:
cadena = "No hay camino para la verdad, la verdad es el camino."
print(len(cadena)) # devuelve 53, la longitud de la cadena
print(cadena.index("v")) # devuelve 22, el índice de la primera "v"
print (cadena.find("ver")) # devuelve 22, o sea el índice de "v"
print (cadena.find("ver", 22)) # busca a partir de 22 y devuelve 22, o sea el índice de "v"
print (cadena.find("ver", 23)) # busca a partir de 23 y devuelve 33, o sea el siguiente índice de "v"
print (cadena.find("ver", 23,30)) #devuelve -1 porque no encontró "ver"
11. Ejercicio 1
• Escriba un programa que solicite una frase con espacios demás y reduzca estos espacios a
solo uno.
Ejemplo:
Ingrese una frase: Hola me llamo Benito y tengo 20 años .
Frase arreglada: Hola me llamo Benito y tengo 20 años .
12. Dividir y unir cadenas
Sea x una cadena:
• x.split(separador): devuelve una lista de las palabras de la cadena separadas acorde el parámetro
separador. Si este parámetro no se especifica aplica sobre los espacios en blanco.
• x.join: convierta una lista en una cadena de texto.
Ejemplo:
cadena1 = " Esto es una cadena de texto ¡Oh! "
cadena2="Esta/es/otra cadena/¡Oh!"
email = "diaz_cm@up.edu.pe"
print(cadena1.split()) # ['Esto', 'es', 'una', 'cadena', 'de', 'texto', '¡Oh! ']
print(cadena1.split(" ")) # ['Esto', '', '', '', '', '', 'es', '', '', '', '', '', 'una', '', '', '', '', '', 'cadena', '', '', '', '', '', 'de', '', '', '', '', '', 'texto', '', '', '', '', '', '', '¡Oh!']
lista=cadena2.split("/")
print(lista) # ['Esta', 'es', 'otra cadena', '¡Oh!']
print(email.split("@")) # ['diaz_cm', 'up.edu.pe']
print("-".join(lista)) # Esta-es-otra cadena-¡Oh!
13. Presentación de cadenas
• Una alternativa a la concatenación de cadenas es el uso del método format. Este método devuelve una copia de la cadena a la
que se le han sustituido las posiciones que contienen llaves ({}) por los argumentos del método. Esta sustitución se realiza por
defecto en el mismo orden de los argumentos.
Ejemplo:
nombre = input("Ingresa tu nombre: ")
edad = int(input("Ingresa tu edad: "))
nombreMascota = input("Ingresa el nombre de tu mascota: ")
print ("Tu nombre es {} y tienes {} años.".format(nombre.upper(), edad))
print ("Tu mascota se llama {} y tiene {} caracteres.".format(nombreMascota,len(nombreMascota)))
print ("Tu mascota se llama {2}. Tu eres {0} y tienes {1} años.".format(nombre, edad, nombreMascota))
Ejemplo:
pi=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
nombre= "Rodolfo"
print("{0} el número pi es {1:10.4f}".format(nombre,pi))
# 1 es el índice del segundo argumento de la función format o sea pi
# 10 es el tamaño del campo reservado para el número incluyendo el punto
# 4 es la cantidad de decimales redondeado del número
# f si el número es float, d si el número es entero
14. Presentación de cadenas
• Otra alternativa es utilizar las cadenas f (f-Strings), nos da la oportunidad de ejecutar funciones dentro de la cadena.
Ejemplo:
nombre = input("Ingresa tu nombre: ")
edad = int(input("Ingresa tu edad: "))
nombreMascota = input("Ingresa el nombre de tu mascota: ")
print (f"Tu nombre es {nombre.upper()} y tienes {edad} años.")
print(f"Tu mascota se llama {nombreMascota} y tiene {len(nombreMascota)} caracteres.")
print (f"Tu mascota se llama {nombreMascota}. Tu eres {nombre} y tienes {edad} años.")
Ejemplo:
pi=3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
nombre= "Rodolfo"
print(f"{nombre} el número pi es {pi:10.4f}")
Ejemplo:
b="|"
for x in range(1,11):
print (f"{b}{x:<10.2f}{b}{b}{x*x:.^10d}{b}{b}{x*x*x:>10d}{b}")
15. Código de un carácter
• Cada carácter tiene un código ANSI y se obtiene con la función ord().
• Y de forma similar, conociendo el código ANSI se puede obtener el carácter
mediante la función chr().
Ejemplo: Cambie el carácter por el que le sigue según ANSI.
cadena="Hola mundo"
for x in cadena:
xn=ord(x)+1
x=chr(xn)
print(x,end="")
16. Ejercicio 2
• En criptografía, el cifrado César, también conocido como cifrado por desplazamiento, código de César o
desplazamiento de César, es una de las técnicas de cifrado más simples y más usadas. Es un tipo de cifrado por
sustitución en el que una letra en el texto original es reemplazada por otra letra que se encuentra un número fijo
de posiciones más adelante en el alfabeto.
• Por ejemplo, con un desplazamiento de 3, la A sería sustituida por la D (situada 3 lugares a la derecha de la A), la
B sería reemplazada por la E, etc. Este método debe su nombre a Julio César, que lo usaba para comunicarse con
sus generales. (Fuente: Wikipedia)
• Escriba dos funciones:
1. Un codificador que solicite una texto en minúsculas, sin tildes, y un número de desplazamiento para realizar el
cifrado Cesar.
2. Un decodificador que solicite una texto codificado, el número de desplazamiento y recupere el texto original.
Nota 1: En ambas funciones el espacio se mantiene como tal, o sea no se cambia.
Nota 2: No puede escribir el alfabeto a mano, debe generarlo, excepto la ñ.
Ejemplo: Si el texto es "mar azul" y el número de desplazamiento es 3, el texto
encriptado es "odu dcxñ“.
17. Rellenar una cadena y contar subcadena
• zfill(n): Rellena un texto anteponiendo ceros. Donde n es el tamaño del campo.
Ejemplo:
numFactura = 1575
print (str(numFactura).zfill(8)) # 00001575
• count(subcadena,inicio,fin): Cuenta la cantidad de apariciones de una subcadena.
Ejemplo:
cadena = "Esto es una cadena de texto y tiene un concepto notorio"
print (cadena.count("to")) # 4
print (cadena.count("to",2)) # 4
print (cadena.count("to",3)) # 3
print (cadena.count("to",0,3)) # 0
print (cadena.count("to",0,4)) # 1
print (cadena.count("to",10,50)) # 2
18. Principio y fin de una cadena
• startswith(subcadena,inicio,fin): Comprueba si una cadena comienza con una subcadena
determinada.
cadena = "Esto es una cadena de texto y tiene un concepto notorio"
print (cadena.startswith("Es")) # True
print (cadena.startswith("texto")) # False
print(cadena.index("t",3)) # devuelve 22, o sea el índice de la "t" después de la primera "t "
print (cadena.startswith("texto", 22)) # True
• endswith(subcadena,inicio,fin): Comprueba si una cadena finaliza con una subcadena
determinada.
cadena = "Esto es una cadena de texto y tiene un concepto notorio"
print (cadena.endswith("rio")) # True
print (cadena.endswith("texto")) # False
print(cadena.index("to",3)) # devuelve 25, o sea el índice de la "to" después del primer "to"
print (cadena.endswith("texto",0,27)) # True
19. Ejercicio 3
• Se tiene una base de datos con el nombre, la edad y el DNI de una persona.
["Juan Perez-25-12345678", "Maria Ramos-39-87654321", "Ariel Lopez-19-
56432146", "Rosa Escalante-26-62759872", "Federico Bosh-66-39804576"]
Genere un código autogenerado para cada uno formado por:
1. Las 2 últimas letras del apellido paterno.
2. Las 2 últimas letras del nombre.
3. La suma de los dígitos de la edad en el formato 00, es decir que si la suma
es 7 debe mostrar 07.
4. El tercer dígito del DNI.
5. Vocales en minúsculas, diferentes en su nombre y en orden descendente.
20. Excepciones
• Las excepciones son errores detectados por Python durante la ejecución del
programa.
• Cuando el intérprete se encuentra con una situación excepcional, como el
intentar dividir un número entre 0 o el intentar acceder a un archivo que no
existe, este genera o lanza una excepción, informando al usuario que existe
algún problema.
• Si la excepción no se captura el flujo de ejecución se interrumpe y se muestra
la información asociada a la excepción en la consola de forma que el
programador pueda solucionar el problema.
21. Captura y tratamiento de excepciones
• Para capturar y tratar una excepción se utiliza la siguiente sintaxis:
#Las necesarias solo son try y except
try:
<Sentencias susceptibles de lanzar error>
except:
<Sentencias ejecutadas cuando ocurre el error>
else:
<Sentencias ejecutadas cuando no hay error>
finally:
<Sentencias que siempre se ejecutan>
22. Ejemplo
• ¿Que realiza este ejemplo?
try:
n=int(input("Ingrese un entero: "))
print("El número ingresado es: ",n)
except:
print("Ocurrio un error")
else:
print("No ocurrio un error")
finally:
print("Esto siempre pasa")
23. Ejercicio 4
• Escriba un programa que solicite la nota de un estudiante y lo valide para que
este en el rango de 0 a 20. Es decir, su programa debe estar preparado
cuando se ingrese cualquier cosa diferente a la nota, por ejemplo -5, -21,
17.5, hola, espacio en blanco, enter, etc. Y debe solicitar de nuevo hasta que
ingrese una nota valida.