Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Aunque las cadenas en Python parecen ser sencillas, hay cierta complejidad en las
reglas de las cadenas que es importante comprender. El conocimiento de las reglas
ayuda a evitar que le sorprenda el comportamiento de las cadenas al modificar
valores o dar formato al texto.
En el ejemplo de este módulo, tiene un único hecho sobre la Luna que está
asignado a una variable y debe agregarle otro hecho (una oración). Parece que
agregar el segundo hecho podría modificar la variable, tal como en el ejemplo
siguiente:
PythonCopiar
>>> fact = "The Moon has no atmosphere."
>>> fact + "No sound can be heard on the Moon."
'The Moon has no atmosphere.No sound can be heard on the Moon.'
PythonCopiar
>>> fact
'The Moon has no atmosphere.'
Aquí el truco es que se debe usar un valor devuelto. Al agregar cadenas, Python no
modifica ninguna, sino que devuelve una cadena nueva como resultado. Para
mantener este resultado nuevo, asígnelo a una nueva variable:
PythonCopiar
>>> two_facts = fact + "No sound can be heard on the Moon."
>>> two_facts
'The Moon has no atmosphere.No sound can be heard on the Moon.'
Las operaciones en las cadenas siempre generan cadenas nuevas como resultado.
Puede incluir las cadenas de Python entre comillas simples, dobles o triples.
Aunque se pueden usar indistintamente, es mejor utilizar un tipo de forma
coherente dentro de un proyecto. Por ejemplo, en la cadena siguiente se usan
comillas dobles:
PythonCopiar
moon_radius = "The Moon has a radius of 1,080 miles"
PythonCopiar
'The "near side" is the part of the Moon that faces the Earth'
PythonCopiar
"We only see about 60% of the Moon's surface"
PythonCopiar
>>> 'We only see about 60% of the Moon's surface'
File "<stdin>", line 1
'We only see about 60% of the Moon's surface'
^
SyntaxError: invalid syntax
Cuando el texto tiene una combinación de comillas simples y dobles, puede usar
comillas triples para evitar problemas con el intérprete:
PythonCopiar
"""We only see about 60% of the Moon's surface, this is known as the "near
side"."""
Texto multilínea
Hay diferentes maneras de definir varias líneas de texto como una sola variable. Las
más comunes son las siguientes:
Los caracteres de nueva línea separan el texto en varias líneas al imprimir la salida:
PythonCopiar
>>> multiline = "Facts about the Moon:\n There is no atmosphere.\n There is no
sound."
>>> print(multiline)
Facts about the Moon:
There is no atmosphere.
There is no sound.
PythonCopiar
>>> multiline = """Facts about the Moon:
... There is no atmosphere.
... There is no sound."""
>>> print(multiline)
Facts about the Moon:
There is no atmosphere.
There is no sound
Los métodos de cadena son uno de los tipos de método más comunes en Python. A menudo
tendrá que manipular cadenas para extraer información o ajustarse a un formato concreto.
Python incluye varios métodos de cadena diseñados para realizar las transformaciones más
comunes y útiles.
Los métodos de cadena forman parte del tipo str. Esto significa que los métodos existen
como variables de cadena o directamente como parte de la cadena. Por ejemplo, el
método .title() se puede usar directamente con una cadena:
PythonCopiar
>>> "temperatures and facts about the moon".title()
'Temperatures And Facts About The Moon'
PythonCopiar
>>> heading = "temperatures and facts about the moon"
>>> heading.title()
'Temperatures And Facts About The Moon'
PythonCopiar
>>> temperatures = """Daylight: 260 F
... Nighttime: -280 F"""
>>> temperatures .split()
['Daylight:', '260', 'F', 'Nighttime:', '-280', 'F']
En este ejemplo, trabaja con varias líneas, por lo que el carácter de nueva línea (implícito)
se puede usar para dividir la cadena al final de cada línea, y crear líneas únicas:
PythonCopiar
>>> temperatures .split('\n')
['Daylight: 260 F', 'Nighttime: -280 F']
Este tipo de división resulta útil cuando se necesita un bucle para procesar o extraer
información, o bien cuando se cargan datos desde un archivo de texto.
Algunos métodos de cadena pueden buscar contenido antes del procesamiento, sin
necesidad de usar un bucle. Imagine que tiene dos oraciones que analizan las temperaturas
de varios planetas y lunas, pero solo le interesan las temperaturas relacionadas con la Luna.
Es decir, si las oraciones no se refieren a la Luna, no se deben procesar para extraer
información.
PythonCopiar
>>> "Moon" in "This text will describe facts and challenges with space travel"
False
>>> "Moon" in "This text will describe facts about the Moon"
True
Un enfoque para buscar la posición de una palabra específica en una cadena consiste en
usar el método .find():
PythonCopiar
>>> temperatures = """Saturn has a daytime temperature of -170 degrees Celsius,
... while Mars has -28 Celsius."""
>>> temperatures.find("Moon")
-1
PythonCopiar
>>> temperatures.find("Mars")
65
PythonCopiar
>>> temperatures.count("Mars")
1
>>> temperatures.count("Moon")
0
PythonCopiar
>>> "The Moon And The Earth".lower()
'the moon and the earth'
PythonCopiar
>>> "The Moon And The Earth".upper()
'THE MOON AND THE EARTH'
Sugerencia
Al buscar y comprobar contenido, un enfoque más sólido consiste es convertir en
minúsculas una cadena para que el uso de mayúsculas y minúsculas no impida una
coincidencia. Por ejemplo, si va a contar el número de veces que aparece la palabra the, el
método no contaría las veces en las que aparece The, aunque las dos sean la misma palabra.
Puede usar el método .lower() para cambiar todos los caracteres a minúsculas.
Hay ocasiones en las que procesará texto para extraer información con una presentación
irregular. Por ejemplo, la cadena siguiente es más fácil de procesar que un párrafo no
estructurado:
PythonCopiar
>>> temperatures = "Mars Average Temperature: -60 C"
Para extraer la temperatura media en Marte, puede hacerlo con los métodos siguientes:
PythonCopiar
>>> parts = temperatures.split(':')
>>> parts
['Mars average temperature', ' -60 C']
>>> parts[-1]
' -60 C'
El código anterior confía en que todo lo que hay después de los dos puntos (:) es una
temperatura. La cadena se divide en :, lo que genera una lista de dos elementos. El uso
de [-1] en la lista devuelve el último elemento que, en este ejemplo, es la temperatura.
Si el texto es irregular, no puede usar los mismos métodos de división para obtener el valor.
Debe recorrer en bucle los elementos y comprobar si los valores son de un tipo
determinado. Python tiene métodos que ayudan a comprobar el tipo de cadena:
PythonCopiar
>>> mars_temperature = "The highest temperature on Mars is about 30 C"
>>> for item in mars_temperature.split():
... if item.isnumeric():
... print(item)
...
30
Importante
Le sorprenderá saber que "-70".isnumeric() devolverá False. Esto se debe a que todos los
caracteres de la cadena tendrían que ser numéricos y el guión (-) no lo es. Si tiene que
comprobar números negativos en una cadena, el método .isnumeric() no funcionará.
Hay validaciones adicionales que puede aplicar en las cadenas para comprobar si hay
valores. En el caso de los números negativos, el guion se agrega como prefijo al número y
se puede detectar con el método .startswith():
PythonCopiar
>>> "-60".startswith('-')
True
PythonCopiar
>>> if "30 C".endswith("C"):
print("This temperature is in Celsius")
'This temperature is in Celsius'
Transformar texto
Hay otros métodos que ayudan en situaciones en las que el texto se debe transformar en
algo distinto. Hasta ahora, ha visto cadenas que pueden
usar C para Celsius y F para Fahrenheit. Puede usar el método .replace() para buscar y
reemplazar repeticiones de un carácter o grupo de caracteres:
PythonCopiar
>>> "Saturn has a daytime temperature of -170 degrees Celsius, while Mars has -
28 Celsius.".replace("Celsius", "C")
'Saturn has a daytime temperature of -170 degrees C, while Mars has -28 C.'
PythonCopiar
>>> text = "Temperatures on the Moon can vary wildly."
>>> "temperatures" in text
False
>>> "temperatures" in text.lower()
True
PythonCopiar
>>> moon_facts = ["The Moon is drifting away from the Earth.", "On average, the
Moon is moving about 4cm every year"]
>>> '\n'.join(moon_facts)
'The Moon is drifting away from the Earth.\nOn average, the Moon is moving about
4cm every year'
En este ejemplo, se usa el carácter de nueva línea '\n' para unir todos los elementos de la
lista.
En esta unidad, aprenderá varias maneras válidas de incluir valores de variable en el texto
mediante Python.
PythonCopiar
>>> mass_percentage = "1/6"
>>> print("On the Moon, you would weigh about %s of your weight on Earth" %
mass_percentage)
On the Moon, you would weigh about 1/6 of your weight on Earth
El uso de varios valores cambia la sintaxis, ya que se necesitan paréntesis para rodear las
variables que se pasan:
PythonCopiar
>>> print("""Both sides of the %s get the same amount of sunlight,
... but only one side is seen from %s because
... the %s rotates around its own axis when it orbits %s.""" % ("Moon", "Earth",
"Moon", "Earth"))
Both sides of the Moon get the same amount of sunlight,
but only one side is seen from Earth because
the Moon rotates around its own axis when it orbits Earth.
Sugerencia
Aunque este método sigue siendo una manera válida de dar formato a las cadenas, puede
provocar errores y reducir la claridad del código cuando se trabaja con varias variables.
Cualquiera de las otras dos opciones de formato descritas en esta unidad sería más
adecuada para este propósito.
El método format()
El método .format() usa llaves ({}) como marcadores de posición dentro de una cadena y
utiliza la asignación de variables para reemplazar texto.
PythonCopiar
>>> mass_percentage = "1/6"
>>> print("On the Moon, you would weigh about {} of your weight on
Earth".format(mass_percentage))
On the Moon, you would weigh about 1/6 of your weight on Earth
No es necesario asignar variables repetidas varias veces, lo que hace que sea menos
detallado porque es necesario asignar menos variables:
PythonCopiar
>>> print("""You are lighter on the {0}, because on the {0}
... you would weigh about {1} of your weight on Earth""".format("Moon",
mass_percentage))
You are lighter on the Moon, because on the Moon you would weigh about 1/6 of
your weight on Earth
PythonCopiar
>>> print("""You are lighter on the {moon}, because on the {moon}
... you would weigh about {mass} of your weight on Earth""".format(moon="Moon",
mass=mass_percentage))
You are lighter on the Moon, because on the Moon you would weigh about 1/6 of
your weight on Earth
Acerca de las cadenas f-strings
PythonCopiar
>>> print(f"On the Moon, you would weigh about {mass_percentage} of your weight
on Earth")
On the Moon, you would weigh about 1/6 of your weight on Earth
Además de que las f-strings son menos detalladas que cualquier otra opción de formato, es
posible usar expresiones entre llaves. Estas expresiones pueden ser funciones u operaciones
directas. Por ejemplo, si quiere representar el valor 1/6 como un porcentaje con una
posición decimal, puede usar directamente la función round():
PythonCopiar
>>> round(100/6, 1)
16.7
PythonCopiar
>>> print(f"On the Moon, you would weigh about {round(100/6, 1)}% of your weight
on Earth")
On the Moon, you would weigh about 16.7% of your weight on Earth
Para usar una expresión no es necesaria una llamada de función. Cualquiera de los métodos
de cadena también son válidos. Por ejemplo, la cadena podría aplicar un uso específico de
mayúsculas y minúsculas para crear un título:
PythonCopiar
>>> subject = "interesting facts about the moon"
>>> f"{subject.title()}"
'Interesting Facts About The Moon'