IWI131 Programación


Manejo de Strings



Departamento de Informática
Universidad Técnica Federico Santa María

Strings

Son el tipo de dato usado para representar texto en Python.

Usando strings para entradas y salidas

Anteriormente, los strings se utilizaron en entradas y salidas de datos.

In [1]:
nombre = input("Ingrese su nombre: ")
Ingrese su nombre: Felipe
In [2]:
nombre
Out[2]:
'Felipe'
In [3]:
print("Mi nombre es",nombre)
Mi nombre es Felipe

Strings vacíos

Los valores literales '' y "" representan strings vacíos, es decir, un texto que no contiene caracteres.

In [4]:
print("")

In [5]:
""
Out[5]:
''
In [6]:
''
Out[6]:
''

Estructura de un String

Un string (que no es el string vacío) se compone de varios elementos, llamados caracteres.

In [7]:
"hola mundo!"
Out[7]:
'hola mundo!'

Índice de un string

Es posible enumerar los caracteres de un string, desde cero para el primer caracter y aumentándo la enumeración en sentido izquierda-derecha.

h o l a m u n d o !
0 1 2 3 4 5 6 7 8 9 10

Acceder al caracter de un string mediante indexación

Cuando una variable es de tipo string, es posible acceder al caracter que se encuentra en en índice i-ésimo usando corchetes.

In [8]:
a = "hola mundo!"
#obtiene el caracter que esta en el indice 5 y lo muestra por pantalla
print(a[5])
m
In [9]:
#evalua el valor del índice 5 en la variable a
a[5]
Out[9]:
'm'

También es posible enumerar los caracteres de un string usando índices negativos:

h o l a m u n d o !
-11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
In [10]:
a = "hola mundo!"
#obtiene el ultimo caracter y lo muestra por pantalla
print(a[-1])
!
In [11]:
#evalua el valor del índice -1 en la variable a
a[-1]
Out[11]:
'!'

Substrings

Utilizando los corchetes es posible obtener una parte de un string (substring), es decir, algunos de sus caracteres.

s[inicio:fin] entrega un string con todos los caracteres desde el índice inicio, hasta el índice fin-1.

Por ejemplo, a[3:7], donde a = "hola mundo!" corresponde al substring 'a mu'

h o l a m u n d o !
3 4 5 6
In [12]:
a = "hola mundo!"
b = a[3:7]
print(b)
a mu

Omitiendo inicio, se asume que el substring parte desde el inicio del string original.

Ejemplo, a[:6], donde a = "hola mundo!" corresponde al substring 'hola m'.

h o l a m u n d o !
0 1 2 3 4 5
In [13]:
a = "hola mundo!"
b = a[:6]
print(b)
hola m

Omitiendo fin, se asume que el substring termina cuando termina el string original.

Ejemplo, a[2:], donde a = "hola mundo!" corresponde al substring 'la mundo!'.

h o l a m u n d o !
2 3 4 5 6 7 8 9 10
In [14]:
a = "hola mundo!"
b = a[2:]
print(b)
la mundo!

¿Qué ocurre en los siguientes casos?

In [15]:
a = "hola mundo!"
In [16]:
a[5:7]
Out[16]:
'mu'
In [17]:
a[-3:-1]
Out[17]:
'do'
In [18]:
a[2:-1]
Out[18]:
'la mundo'
In [19]:
a[-1:4]
Out[19]:
''

Operaciones elementales sobre Strings

Algunos operadores definidos anteriormente para números, pueden utilizarse sobre strings.

  • Concatenación de strings (+)
  • Repetición de strings (*)

Algunos ejemplos:

In [20]:
"hola" +  "mundo"
Out[20]:
'holamundo'
In [21]:
x = 4
c = 4**2
mensaje = str(4)+"al cuadrado es"+str(c)
print(mensaje)
4al cuadrado es16
In [22]:
x = 4
c = 4**2
mensaje = str(4)+" al cuadrado es "+str(c)
print(mensaje)
4 al cuadrado es 16
In [23]:
"waka"*2
Out[23]:
'wakawaka'
In [24]:
"fizz"*3
Out[24]:
'fizzfizzfizz'
In [25]:
"fizz"+"buzz"*4
Out[25]:
'fizzbuzzbuzzbuzzbuzz'

Otras operaciones para strings

  1. La instrucción in permite saber si un substring está contenido dentro de un string. Es similar a un operador de comparación, por lo que entrega valores True o False. Se puede negar con el operador lógico not.
In [26]:
"pollo" in "repollos"
Out[26]:
True
In [27]:
"pollo" in "gallinero"
Out[27]:
False
In [28]:
"agua" not in "paraguas"
Out[28]:
False
  1. La función len(s) entrega como resultado la cantidad de caracteres del string s pasado como parámetro.
In [29]:
len("casa")
Out[29]:
4
In [30]:
len("hola mundo!")
Out[30]:
11
In [31]:
len("")
Out[31]:
0

Comparaciones de strings

Los operadores de comparación se pueden utilizar sobre strings.

In [32]:
"a" > "z"
Out[32]:
False
In [33]:
"avion" == "barco"
Out[33]:
False
In [34]:
"Casa" < "casa"
Out[34]:
True

¿Cómo se decide el orden de los caracteres?

El código ASCII

El código ASCII asocia con un número decimal a los caracteres imprimibles (letras, números y símbolos) y se utilizan para decidir el ordenamiento.

decimal caracter decimal caracter
48 "0" 65 "A"
49 "1" 66 "B"
... ... ... ...
61 "=" 97 "a"
62 ">" 98 "b"
... ... ... ...

Los strings tienen su propio ordenamiento, que considera el siguiente orden creciente:

  • Dígitos escritos como strings
  • Algunos caracteres especiales
  • Letras mayúsculas
  • Letras minúsculas
In [35]:
#las minusculas son mayores que las minusculas. Vienen despues en el codigo ASCII
"a" > "A"
Out[35]:
True

Mayúsculas y Minúsculas

Ya se ha visto que un mismo caracter escrito en mayúsculas es distinto que el mismo caracter en minúsculas.

In [36]:
#letras mayusculas son distintas de letras minusculas
"a" == "A"
Out[36]:
False

IMPORTANTE: No es posible alterar directamente un string. Se dice que es un tipo de dato inmutable.

In [37]:
palabra = "Casa"
In [38]:
palabra[0] = "c"
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-38-43b21e3704dc> in <module>
----> 1 palabra[0] = "c"

TypeError: 'str' object does not support item assignment

Los métodos s.upper() y s.lower() permiten cambiar el string s a mayúsculas y minúsculas, respectivamente.

Un método es una función que opera directamente sobre una variable que es de cierto tipo de dato.

In [39]:
pal = "Progra"
In [40]:
pal.lower()
Out[40]:
'progra'
In [41]:
pal.upper()
Out[41]:
'PROGRA'

s.upper() y s.lower() generan un nuevo string a partir del valor de s. NO MODIFICAN A s.

In [42]:
print(pal)
Progra

Ciclo For

  • Repite sentencias una cantidad fija de veces.
  • Funciona sobre tipos de datos iterables

¿Qué significa iterable?

Un tipo de dato que se puede iterar es aquel que se puede recorrer sobre cada uno de sus "elementos" constituyentes en un ciclo.

Ejemplo: un string está compuesto por caracteres. Luego con un ciclo for se puede recorrer cada caracter de este string.

In [43]:
a = "hola mundo!"
for s in a:
    print("s = "+str(s))
s = h
s = o
s = l
s = a
s =
s = m
s = u
s = n
s = d
s = o
s = !

Sintaxis genérica de un Ciclo For

for variable in secuencia:
    #codigo
    a = operacion(variable)
  • Cada vez que se utiliza un ciclo for, se define una variable que va a tomar cada uno de los valores de secuencia.
  • secuencia debe ser un tipo de dato iterable.

Ejercicios

1. Escriba un programa que indique si una palabra existe dentro de una oración. Tanto la palabra, como la oración serán ingresadas como entrada de datos.

In [45]:
oracion = input("Ingrese una oracion: ")
palabra = input("Ingrese una palabra")

if palabra in oracion:
    print("La palabra '"+ str(palabra)+ "' esta contenida en '"+str(oracion)+"'")
Ingrese una oracion: la mar estaba serena
Ingrese una palabramar
La palabra 'mar' esta contenida en 'la mar estaba serena'

2. Modifique el programa anterior para se acepte encontrar palabras dentro de una oración, sin importar si están escritas en diferente combinación de mayúsculas/minúsculas.

In [46]:
oracion = input("Ingrese una oracion: ")
palabra = input("Ingrese una palabra")

if palabra.lower() in oracion.lower():
    print("La palabra '"+ str(palabra)+ "' esta contenida en '"+str(oracion)+"'")
Ingrese una oracion: La Mar Estaba Serena
Ingrese una palabraMAR
La palabra 'MAR' esta contenida en 'La Mar Estaba Serena'

3. Escriba un programa que pida al usuario dos palabras, y que indique cuál de ellas es la más larga y por cuántas letras lo es.

In [47]:
palabra1 = input("Palabra 1: ")
palabra2 = input("Palabra 2: ")

largo1 = len(palabra1)
largo2 = len(palabra2)

if largo1 > largo2:
    print("La palabra",palabra1,"tiene",largo1-largo2,"letras mas que la palabra",palabra2)
elif largo1 < largo2:
    print("La palabra",palabra2,"tiene",largo2-largo1,"letras mas que la palabra",palabra1)
else:
    print("La palabra",palabra1,"tiene el mismo largo que la palabra",palabra2)
Palabra 1: paralelepipedo
Palabra 2: sol
La palabra paralelepipedo tiene 11 letras mas que la palabra sol

4. Escriba la función contar(letra, palabra) que retorna cuántas veces aparece la letra en la palabra.

>>> contar(‘a’, ‘abracadabra’)
5
>>> contar(‘z’, ‘abracadabra’)
0
In [2]:
def contar(letra, palabra):
    contador = 0
    for i in palabra:
        if i == letra:
            contador +=1
    return contador
In [4]:
s = "paralelepipedo"
In [5]:
print(contar("a",s))
2
In [7]:
print(contar("p",s))
3
In [ ]: