1.4. Cadenas#

1.4.1. Tipo texto: cadenas (string)#

Secuencia de

  • letras, caracteres especiales y de puntuación, espacios y dígitos (Símbolos UNICODE https://en.wikipedia.org/wiki/Unicode)

  • entre comillas, simples o dobles

  • El tipo de las cadenas es str.

saludo = 'Hola a todos'
saludo1 = "Hola a todos"
falso = "it's not true"
falso_escape = 'it\'s not true'
falso_otra_comilla_1 = 'it´s not true'
falso_otra_comilla_2 = 'it`s not true'
saludo, saludo1, falso, falso_escape, falso_otra_comilla_1, falso_otra_comilla_2
('Hola a todos',
 'Hola a todos',
 "it's not true",
 "it's not true",
 'it´s not true',
 'it`s not true')
otra = '¿es esto una cadena?'
otra
'¿es esto una cadena?'
type('hola')
str

Observación str también funciona como operador de conversión a cadena

str(4.5)
'4.5'

A su vez, int y float convierten cadenas que son números entre comillas en números:

int('402')
402
int('4.02')
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [8], in <cell line: 1>()
----> 1 int('4.02')

ValueError: invalid literal for int() with base 10: '4.02'
float('4.04')
4.04

1.4.2. Operadores para cadenas#

Enlaces

1.4.2.1. Concatenación de dos cadenas#

'hola' + 'Antonio' 
'holaAntonio'
'hola' + ' Antonio' 
'hola Antonio'
'hola' + '24'
'hola24'
'bienvenido'  +' ' + 'a' + ' ' + 'Python'
'bienvenido a Python'

1.4.2.2. Repetición de una cadena un número de veces determinado#

Concatenación múltiple

3 * 'hola'
'holaholahola'
3 * 'hola '
'hola hola hola '
'a ' * 3
'a a a '

1.4.2.3. Longitud de una cadena#

La función len

len('hola')
4

1.4.2.4. Pertenencia#

'o' in 'hola'
True
'hl' in 'hola'
False

Ejemplo

Dado el texto Hoy hace un día fantástico para disfrutar en los pinares de Valsaín, hacemos un programa que busque una palabra dada por el usuario en dicho texto

palabra = input('¿Qué palabra quieres buscar en el texto?: ')
texto = 'Hoy hace un día fantástico para disfrutar en los pinares de Valsaín'

if palabra in texto:
    print('')
    print(' Eureka, la palabra que has escrito está en el texto')
    print('')
else:
    print('')
    print(' Lo siento, la palabra que has escrito no está en el texto')
    print('')

print('Acabó la bifurcación')

1.4.3. Indexación de cadenas#

Las cadenas son secuencia de caracteres ordenados e indexados

'hola'[0]
'h'
'hola'[1]
'o'
'hola'[4]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Input In [23], in <cell line: 1>()
----> 1 'hola'[4]

IndexError: string index out of range
'Hoy hace un día estupendo'[1:10]
'oy hace u'

P

y

t

h

o

n

0

1

2

3

4

5

-6

-5

-4

-3

-2

-1

p = 'Python'
p[-1]
'n'
saludo = 'Hola Madrid'

H

o

l

a

_

M

a

d

r

i

d

0

1

2

3

4

5

6

7

8

9

10

-11

-10

-9

-8

-7

-6

-5

-4

-3

-2

-1

saludo[4]
' '
saludo[-7]
' '

1.4.3.1. Subcadenas: el operador de corte (slicing)#

saludo[1:5]
'ola '
saludo[:5]
'Hola '
saludo[4:]
' Madrid'
saludo[-5:]
'adrid'
# Letras en posición par o, equivalentemente, que tienen índice impar
saludo[::2]
'Hl ard'
# Letras en posición impar o, equivalentemente, que tienen índice par
saludo[1:8:2]
'oaMd'
saludo[::3]
'Haai'

1.4.4. La función print con cadenas#

numero = 1
print('Mi número favorito es el número ' + str(numero))
Mi número favorito es el número 1

La función print nos permite combinar cadenas con variables

print('Mi número favorito es el número: ', numero, '. El siguiente es: ', numero+1)
Mi número favorito es el número:  1 . El siguiente es:  2

1.4.5. Orden y comparación de caracteres#

Python usa Unicode

Para saber el código UNICODE de un carácter ejecutamos ord

ord('#')
35
ord('a')
97
ord(' ')
32

En particular, tenemos que:

  • Las letras están ordenadas alfabéticamente: ‘a’ < ‘b’ < … < ‘z’

  • Los números tienen el orden natural

  • Las letras son mayores que los números

  • Las letras y números son mayores que los símbolos

  • El orden de los simbolos está determinado por el código ASCI que les corresponde (esto es así para todos los caracteres).

'b' > 'e'
False
'b' > '4'
True
'p' > '%'
True
'q' < '#'
False
'#' > '&'
False

1.4.5.1. Comparación de cadenas#

La cadena vacía es menor que todas las otras cadenas:

'' > 'ab'
False

Las cadenas se comparan elemento a elemento comenzando por la izquierda. Una cadena es mayor que otra, si para cada posición (índice) el elemento de la primera cadena es mayor o igual que el de la segunda.

El orden alfabético es para letras sin acentos que no incluyan la ñ, siendo todas o bien mayúsculas o bien minúsculas

'escuela' > 'escolar'
True
'lia' > 'lio'
False
'entusiasmado' > 'entusiasmados'
False

Los restantes operadores de comparación ==, !=, <, >=, <= se definen como para los números:

'deseo' < 'deseos'
True
'cabrilla mediterránea' > 'cabrilla mediterranea'
True

En ese ejemplo vemos que las letras con tilde con mayores:

'á' > 'a'
True

Sin embargo, las mayúsculas son menores y observad el orden que tienen respecto a las acentuadas

'A' < 'a' < 'Á' < 'á' 
True

1.4.6. Ejemplos#

Ejemplo 1

Determinar el número de caracteres del texto La aparición de las hormigas es una muestra inequívoca del fin de la temporada de lluvias, contando los espacios en blanco.

len('La aparición de las hormigas es una muestra inequívoca del fin de la temporada de lluvias')
89

Ejemplo 2

Determinar el elemento con índice 11 de la cadena ‘a8&x2wdmaciehnttooslle@ñ’

'a8&x2wdmaciehnttooslle@ñ'[11]
'e'

Ejemplo 3

Escribir el trozo de la cadena ‘esperanzador’ que da como resultado ‘ranzad’

'esperanzador'[4:10]
'ranzad'

Ejemplo 4

Dibujar un cuadrado de 3x3 ceros

print('0 0 0')
print('0 0 0')
print('0 0 0')
0 0 0
0 0 0
0 0 0
print(8*'0 ')
print(8*'0 ')
print(8*'0 ')
print(8*'0 ')
print(8*'0 ')
print(8*'0 ')
print(8*'0 ')
print(8*'0 ')
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 

Ejemplo 5

Dibujar un cuadrado de 5x5 ceros donde falte el cero del centro, pero que conserve la forma de cuadrado.

print(5*'0 ')
print(5*'0 ')
print('0 0   0 0')
print(5*'0 ')
print(5*'0 ')
0 0 0 0 0 
0 0 0 0 0 
0 0   0 0
0 0 0 0 0 
0 0 0 0 0 

1.4.7. Ejercicios#

  1. Pide introducir la contraseña de cuatro caracteres (que hemos definido de antemano) y compara la introducida con la que había sido definida. Debe imprimir Contraseña aceptada en caso de coincidir. En caso de que no, debe imprimir Error

  2. Haz un programa que pida el número de DNI y calcule e imprima la letra correspondiente.

1.4.8. Cuestionario Moodle#

Cuestionario Cadenas