20 KiB
Lectura aproximada: 20 min
- Día 4
Día 4
Cadenas
El texto es un tipo de dato de cadena. Cualquier dato escrito como texto es una cadena. Todo lo que esté entre comillas simples, dobles o triples se considera una cadena. Existen muchos métodos y funciones integradas para trabajar con cadenas. Use la función len() para obtener la longitud de una cadena.
Crear cadenas
letter = 'P' # Una cadena puede ser un carácter o un texto
print(letter) # P
print(len(letter)) # 1
greeting = 'Hello, World!' # Las cadenas se crean con comillas simples o dobles, "Hello, World!"
print(greeting) # Hello, World!
print(len(greeting)) # 13
sentence = "I hope you are enjoying 30 days of Python Challenge"
print(sentence)
Las cadenas multilínea se crean utilizando tres comillas simples (''') o tres comillas dobles ("""). A continuación un ejemplo:
multiline_string = '''I am a teacher and enjoy teaching.
I didn't find anything as rewarding as empowering people.
That is why I created 30 days of python.'''
print(multiline_string)
# Otra forma
multiline_string = """I am a teacher and enjoy teaching.
I didn't find anything as rewarding as empowering people.
That is why I created 30 days of python."""
print(multiline_string)
Concatenación de cadenas
Podemos concatenar cadenas. La unión de cadenas se llama concatenación. Vea el siguiente ejemplo:
first_name = 'Asabeneh'
last_name = 'Yetayeh'
space = ' '
full_name = first_name + space + last_name
print(full_name) # Asabeneh Yetayeh
# Uso de `len()` para obtener la longitud de una cadena
print(len(first_name)) # 8
print(len(last_name)) # 7
print(len(first_name) > len(last_name)) # True
print(len(full_name)) # 16
Secuencias de escape en cadenas
En Python y otros lenguajes una barra invertida (\) seguida de un carácter forma una secuencia de escape. Algunas secuencias comunes son:
- \n: nueva línea
- \t: tabulación (4 espacios)
- \\: barra invertida
- ' : comilla simple
- " : comilla doble
Ahora veamos ejemplos del uso de estas secuencias.
print('I hope everyone is enjoying the Python Challenge.\nAre you ?') # nueva línea
print('Days\tTopics\tExercises') # añade una tabulación
print('Day 1\t5\t5')
print('Day 2\t6\t20')
print('Day 3\t5\t23')
print('Day 4\t1\t35')
print('This is a backslash symbol (\\)') # imprime barra invertida
print('In every programming language it starts with \"Hello, World!\"') # comillas dobles dentro de comillas simples
# Salida
I hope every one is enjoying the Python Challenge.
Are you ?
Days Topics Exercises
Day 1 5 5
Day 2 6 20
Day 3 5 23
Day 4 1 35
This is a backslash symbol (\)
In every programming language it starts with "Hello, World!"
Formateo de cadenas
Formateo clásico (% operador)
En Python existen varias maneras de formatear cadenas. En esta sección veremos algunas de ellas. El operador '%' se usa para formatear una tupla de variables dentro de una cadena de formato, usando especificadores como '%s', '%d', '%f' y '%.nf'.
- %s - cadena (o cualquier objeto representable como cadena)
- %d - entero
- %f - punto flotante
- "%.nf" - punto flotante con precisión fija (n decimales)
# Solo cadenas
first_name = 'Asabeneh'
last_name = 'Yetayeh'
language = 'Python'
formated_string = 'I am %s %s. I teach %s' %(first_name, last_name, language)
print(formated_string)
# Cadenas y números
radius = 10
pi = 3.14
area = pi * radius ** 2
formated_string = 'The area of circle with a radius %d is %.2f.' %(radius, area) # 2 indica 2 decimales
python_libraries = ['Django', 'Flask', 'NumPy', 'Matplotlib','Pandas']
formated_string = 'The following are python libraries:%s' % (python_libraries)
print(formated_string) # imprime "The following are python libraries:['Django', 'Flask', 'NumPy', 'Matplotlib','Pandas']"
Formateo moderno (str.format)
Este método de formateo se introdujo en Python 3.
first_name = 'Asabeneh'
last_name = 'Yetayeh'
language = 'Python'
formated_string = 'I am {} {}. I teach {}'.format(first_name, last_name, language)
print(formated_string)
a = 4
b = 3
print('{} + {} = {}'.format(a, b, a + b))
print('{} - {} = {}'.format(a, b, a - b))
print('{} * {} = {}'.format(a, b, a * b))
print('{} / {} = {:.2f}'.format(a, b, a / b)) # limitar a dos decimales
print('{} % {} = {}'.format(a, b, a % b))
print('{} // {} = {}'.format(a, b, a // b))
print('{} ** {} = {}'.format(a, b, a ** b))
# Salida
4 + 3 = 7
4 - 3 = 1
4 * 3 = 12
4 / 3 = 1.33
4 % 3 = 1
4 // 3 = 1
4 ** 3 = 64
# Cadenas y números
radius = 10
pi = 3.14
area = pi * radius ** 2
formated_string = 'The area of a circle with a radius {} is {:.2f}.'.format(radius, area) # mantener dos decimales
print(formated_string)
Interpolación / f-Strings (Python 3.6+)
Otra forma moderna de formatear cadenas es la interpolación con f-strings. Las cadenas empiezan con f y se insertan expresiones entre llaves.
a = 4
b = 3
print(f'{a} + {b} = {a +b}')
print(f'{a} - {b} = {a - b}')
print(f'{a} * {b} = {a * b}')
print(f'{a} / {b} = {a / b:.2f}')
print(f'{a} % {b} = {a % b}')
print(f'{a} // {b} = {a // b}')
print(f'{a} ** {b} = {a ** b}')
Las cadenas en Python son secuencias de caracteres
Las cadenas en Python son secuencias de caracteres y comparten los mismos métodos de acceso que otras secuencias como listas y tuplas. La forma más sencilla de extraer caracteres individuales (o elementos de cualquier secuencia) es desempaquetarlos en variables.
Desempaquetar caracteres
language = 'Python'
a,b,c,d,e,f = language # desempaquetar caracteres y asignarlos a variables
print(a) # P
print(b) # y
print(c) # t
print(d) # h
print(e) # o
print(f) # n
Obtener caracteres por índice
En programación la indexación comienza en cero. Por tanto, la primera letra está en el índice 0 y la última en la longitud de la cadena menos uno.
language = 'Python'
first_letter = language[0]
print(first_letter) # P
second_letter = language[1]
print(second_letter) # y
last_index = len(language) - 1
last_letter = language[last_index]
print(last_letter) # n
Si queremos contar desde la derecha usamos índices negativos; -1 es el último índice.
language = 'Python'
last_letter = language[-1]
print(last_letter) # n
second_last = language[-2]
print(second_last) # o
Slicing de cadenas
En Python podemos obtener subcadenas mediante slicing.
language = 'Python'
first_three = language[0:3] # empieza en índice 0, hasta 3 pero sin incluir 3
print(first_three) #Pyt
last_three = language[3:6]
print(last_three) # hon
# Otra forma
last_three = language[-3:]
print(last_three) # hon
last_three = language[3:]
print(last_three) # hon
Invertir cadenas
Podemos invertir fácilmente una cadena.
greeting = 'Hello, World!'
print(greeting[::-1]) # !dlroW ,olleH
Saltar caracteres al hacer slicing
Al pasar un parámetro de paso en slicing podemos omitir caracteres al extraer subcadenas.
language = 'Python'
pto = language[0:6:2] #
print(pto) # Pto
Métodos de cadenas
Hay muchos métodos para manipular y formatear cadenas. A continuación vemos algunos ejemplos:
- capitalize(): convierte el primer carácter de la cadena a mayúscula
challenge = 'thirty days of python'
print(challenge.capitalize()) # 'Thirty days of python' (primera letra en mayúscula)
- count(): devuelve el número de ocurrencias de una subcadena:
count(subcadena, start=.., end=..).startyenddefinen el rango de conteo.
challenge = 'thirty days of python'
print(challenge.count('y')) # 3
print(challenge.count('y', 7, 14)) # 1, cuenta entre índices 7 y 14
print(challenge.count('th')) # 2
- endswith(): determina si la cadena termina con la subcadena dada; devuelve
TrueoFalse
challenge = 'thirty days of python'
print(challenge.endswith('on')) # True
print(challenge.endswith('tion')) # False (no termina con 'tion')
- expandtabs(): reemplaza tabulaciones por espacios; el tamaño por defecto es 8, acepta parámetro de tamaño.
challenge = 'thirty\tdays\tof\tpython'
print(challenge.expandtabs()) # 'thirty days of python'
print(challenge.expandtabs(10)) # 'thirty days of python' (tabulaciones expandidas a 10 espacios)
- find(): devuelve el índice de la primera aparición de una subcadena; si no se encuentra devuelve -1
challenge = 'thirty days of python'
print(challenge.find('y')) # 5
print(challenge.find('th')) # 0
- rfind(): devuelve el índice de la última aparición de una subcadena; si no se encuentra devuelve -1
challenge = 'thirty days of python'
print(challenge.rfind('y')) # 16
print(challenge.rfind('th')) # 17
- format(): formatea una cadena para una salida más legible Para más información sobre el formateo de cadenas consulte este enlace
first_name = 'Asabeneh'
last_name = 'Yetayeh'
age = 250
job = 'teacher'
country = 'Finland'
sentence = 'I am {} {}. I am a {}. I am {} years old. I live in {}.'.format(first_name, last_name, age, job, country)
print(sentence) # I am Asabeneh Yetayeh. I am 250 years old. I am a teacher. I live in Finland.
radius = 10
pi = 3.14
area = pi * radius ** 2
result = 'The area of a circle with radius {} is {}'.format(str(radius), str(area))
print(result) # The area of a circle with radius 10 is 314
- index(): devuelve el índice de la primera aparición de una subcadena; acepta parámetros de inicio y fin (por defecto 0 y longitud de la cadena). Si la subcadena no se encuentra, lanza
ValueError.
challenge = 'thirty days of python'
sub_string = 'da'
print(challenge.index(sub_string)) # 7
print(challenge.index(sub_string, 9)) # error
- rindex(): devuelve el índice de la última aparición de una subcadena; acepta parámetros de inicio y fin (por defecto 0 y longitud de la cadena).
challenge = 'thirty days of python'
sub_string = 'da'
print(challenge.rindex(sub_string)) # 8
print(challenge.rindex(sub_string, 9)) # error
- isalnum(): determina si todos los caracteres de la cadena son alfanuméricos
challenge = 'ThirtyDaysPython'
print(challenge.isalnum()) # True
challenge = '30DaysPython'
print(challenge.isalnum()) # True
challenge = 'thirty days of python'
print(challenge.isalnum()) # False, el espacio no es un carácter alfanumérico
challenge = 'thirty days of python 2019'
print(challenge.isalnum()) # False
- isalpha(): determina si todos los caracteres de la cadena son letras (a-z y A-Z)
challenge = 'thirty days of python'
print(challenge.isalpha()) # False, el espacio no es una letra
challenge = 'ThirtyDaysPython'
print(challenge.isalpha()) # True
num = '123'
print(num.isalpha()) # False
- isdecimal(): determina si todos los caracteres son decimales (0-9)
challenge = 'thirty days of python'
print(challenge.isdecimal()) # False
challenge = '123'
print(challenge.isdecimal()) # True
challenge = '\u00B2'
print(challenge.isdigit()) # False
challenge = '12 3'
print(challenge.isdecimal()) # False, contiene espacios
- isdigit(): determina si todos los caracteres son dígitos (0-9 y otros caracteres numéricos Unicode)
challenge = 'Thirty'
print(challenge.isdigit()) # False
challenge = '30'
print(challenge.isdigit()) # True
challenge = '\u00B2'
print(challenge.isdigit()) # True (caracteres numéricos Unicode)
- isnumeric(): determina si todos los caracteres son numéricos o están relacionados con números (similar a
isdigit()pero acepta más símbolos, p. ej. ½)
num = '10'
print(num.isnumeric()) # True
num = '\u00BD' # ½
print(num.isnumeric()) # True
num = '10.5'
print(num.isnumeric()) # False
- isidentifier(): comprueba si la cadena es un identificador válido (nombre de variable válido)
challenge = '30DaysOfPython'
print(challenge.isidentifier()) # False, porque empieza por un número
challenge = 'thirty_days_of_python'
print(challenge.isidentifier()) # True
- islower(): determina si todas las letras de la cadena están en minúsculas
challenge = 'thirty days of python'
print(challenge.islower()) # True
challenge = 'Thirty days of python'
print(challenge.islower()) # False
- isupper(): determina si todas las letras de la cadena están en mayúsculas
challenge = 'thirty days of python'
print(challenge.isupper()) # False
challenge = 'THIRTY DAYS OF PYTHON'
print(challenge.isupper()) # True
- join(): devuelve la cadena resultante tras unir los elementos
web_tech = ['HTML', 'CSS', 'JavaScript', 'React']
result = ' '.join(web_tech)
print(result) # 'HTML CSS JavaScript React' (devuelve la cadena unida)
web_tech = ['HTML', 'CSS', 'JavaScript', 'React']
result = '# '.join(web_tech)
print(result) # 'HTML# CSS# JavaScript# React'
- strip(): elimina los caracteres dados del inicio y del final de la cadena
challenge = 'thirty days of python'
print(challenge.strip('noth')) # 'irty days of py' (elimina los caracteres dados del inicio y final)
- replace(): reemplaza una subcadena por otra dada
challenge = 'thirty days of python'
print(challenge.replace('python', 'coding')) # 'thirty days of coding'
- split(): divide una cadena usando un separador dado o espacios
challenge = 'thirty days of python'
print(challenge.split()) # ['thirty', 'days', 'of', 'python']
challenge = 'thirty, days, of, python'
print(challenge.split(', ')) # ['thirty', 'days', 'of', 'python']
- title(): devuelve la cadena en formato título (Title Case)
challenge = 'thirty days of python'
print(challenge.title()) # Thirty Days Of Python
- swapcase(): convierte mayúsculas a minúsculas y minúsculas a mayúsculas
challenge = 'thirty days of python'
print(challenge.swapcase()) # THIRTY DAYS OF PYTHON
challenge = 'Thirty Days Of Python'
print(challenge.swapcase()) # tHIRTY dAYS oF pYTHON
- startswith(): determina si la cadena comienza con la subcadena especificada
challenge = 'thirty days of python'
print(challenge.startswith('thirty')) # True
challenge = '30 days of python'
print(challenge.startswith('thirty')) # False (no empieza con 'thirty')
🌕 Eres una persona extraordinaria con un enorme potencial. Acabas de completar el desafío del Día 4; llevas cuatro pasos en tu camino para convertirte en un gran profesional. Ahora realiza algunos ejercicios para entrenar tu mente y tus habilidades.
💻 Ejercicios - Día 4
- Une las cadenas 'Thirty', 'Days', 'Of', 'Python' en 'Thirty Days Of Python'.
- Une las cadenas 'Coding', 'For', 'All' en 'Coding For All'.
- Declara la variable
companyy asígnale el valor inicial "Coding For All". - Imprime la variable
companyusandoprint(). - Usa
len()yprint()para mostrar la longitud de la cadenacompany. - Usa el método
upper()para convertir todos los caracteres a mayúsculas. - Usa el método
lower()para convertir todos los caracteres a minúsculas. - Aplica
capitalize(),title()yswapcase()sobre la cadena 'Coding For All'. - Extrae mediante slicing la primera palabra de 'Coding For All'.
- Usa
index,findu otros métodos para comprobar si la cadena 'Coding For All' contiene la palabra 'Coding'. - Reemplaza la palabra 'Coding' por 'Python' en 'Coding For All'.
- Reemplaza 'Python for Everyone' por 'Python for All' (usa
replace()u otro método). - Separa la cadena 'Coding For All' usando espacios como separador.
- Divide la cadena 'Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon' por las comas.
- ¿Qué carácter está en el índice 0 de 'Coding For All'?
- ¿Cuál es el índice del último carácter de 'Coding For All'?
- ¿Qué carácter está en el índice 10 de 'Coding For All'?
- Crea una sigla (acrónimo) a partir de 'Python For Everyone'.
- Crea una sigla a partir de 'Coding For All'.
- Usando
index, determina la primera aparición de la letra 'C' en 'Coding For All'. - Usando
index, determina la primera aparición de la letra 'F' en 'Coding For All'. - Usa
rfindpara determinar la última aparición de 'l' en 'Coding For All People'. - Usa
indexofindpara encontrar la primera aparición de la palabra 'because' en: 'You cannot end a sentence with because because because is a conjunction' - Usa
rindexpara encontrar la última aparición de la palabra 'because' en: 'You cannot end a sentence with because because because is a conjunction'. - Elimina la frase 'because because because' de: 'You cannot end a sentence with because because because is a conjunction'.
- Encuentra la primera aparición de la palabra 'because' en: 'You cannot end a sentence with because because because is a conjunction'.
- Elimina la frase 'because because because' de la oración anterior.
- ¿La cadena 'Coding For All' empieza con la subcadena 'Coding'?
- ¿La cadena 'Coding For All' termina con la subcadena 'coding'?
- Elimina los espacios en blanco a la izquierda y derecha de la cadena ' Coding For All '.
- Usando
isidentifier(), ¿cuál de las siguientes devuelveTrue?- 30DaysOfPython
- thirty_days_of_python
- Dada la lista ['Django', 'Flask', 'Bottle', 'Pyramid', 'Falcon'], únela en una cadena separada por espacios.
- Usa la secuencia de escape de nueva línea para separar las siguientes oraciones:
I am enjoying this challenge. I just wonder what is next. - Usa la secuencia de tabulación para mostrar:
Name Age Country City Asabeneh 250 Finland Helsinki - Usa un método de formateo de cadenas para imprimir:
radius = 10
area = 3.14 * radius ** 2
# The area of a circle with radius 10 is 314 meters square.
- Usa un método de formateo de cadenas para imprimir:
8 + 6 = 14
8 - 6 = 2
8 * 6 = 48
8 / 6 = 1.33
8 % 6 = 2
8 // 6 = 1
8 ** 6 = 262144
🎉 ¡Felicidades! 🎉

