IWI-131 Programación¶
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.
nombre = input("Ingrese su nombre: ")
Ingrese su nombre: Juan
nombre
'Juan'
print("Mi nombre es",nombre)
Mi nombre es Juan
Strings vacíos¶
Los valores literales ''
y ""
representan strings vacíos, es decir, un texto que no contiene caracteres.
print("")
""
''
''
''
Estructura de un String¶
Un string no vacío está compuesto por caracteres.
"hola mundo!"
'hola mundo!'
Índice de un string¶
Los caracteres de un string se numeran de izquierda a derecha, comenzando en $0$.
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¶
Es posible acceder al caracter que se encuentra en la posición i-ésima, es decir, la que tiene el índice $i$, utilizando una notación con corchetes.
a = "hola mundo!"
#obtiene el caracter que esta en el indice 5 y lo muestra por pantalla
print(a[5])
m
#evalua el valor del índice 5 en la variable a
a[5]
'm'
También es posible enumerar los caracteres de un string, desde el final hacia la izquierda, usando índices negativos que comienzan en $-1$:
h | o | l | a | m | u | n | d | o | ! | |
-11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
a = "hola mundo!"
#obtiene el ultimo caracter y lo muestra por pantalla
print(a[-1])
!
#evalua el valor del índice -1 en la variable a
a[-1]
'!'
Substrings¶
Los corchetes también pueden utilizarse para obtener una parte de un string, también conocida como substring o rebanada.
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 |
a = "hola mundo!"
b = a[3:7]
print(b)
a mu
Cuando se omite el inicio
del rango, se entiende que el substring comienza en 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 |
a = "hola mundo!"
b = a[:6]
print(b)
hola m
Cuando se omite el fin
del rango, se entiende que el substring termina al final del 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 |
a = "hola mundo!"
b = a[2:]
print(b)
la mundo!
¿Qué ocurre en los siguientes casos?
a = "hola mundo!"
a[5:7]
'mu'
a[-3:-1]
'do'
a[2:-1]
'la mundo'
a[-1:4]
''
Operaciones elementales sobre Strings¶
Algunos operadores definidos anteriormente para números, también tienen una función al aplicarse sobre strings.
- Concatenación de strings (
+
) - Repetición de strings (
*
)
Algunos ejemplos:
"hola" + "mundo"
'holamundo'
x = 4
c = 4**2
mensaje = str(4) + "al cuadrado es" + str(c)
print(mensaje)
4al cuadrado es16
x = 4
c = 4 ** 2
mensaje = str(4) + " al cuadrado es " + str(c)
print(mensaje)
4 al cuadrado es 16
"waka"*2
'wakawaka'
"fizz"*3
'fizzfizzfizz'
"fizz" + "buzz" * 4
'fizzbuzzbuzzbuzzbuzz'
Otras operaciones para strings¶
- 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 valoresTrue
oFalse
. Se puede negar con el operador lógiconot
.
"pollo" in "repollos"
True
"pollo" in "gallinero"
False
"agua" not in "paraguas"
False
- La función
len(s)
entrega como resultado la cantidad de caracteres del strings
pasado como parámetro.
len("casa")
4
len("hola mundo!")
11
len("")
0
Comparaciones de strings¶
Los operadores de comparación se pueden utilizar sobre strings.
"a" > "z"
False
"avion" == "barco"
False
"Casa" < "casa"
True
¿Cómo se decide el orden de los caracteres?
El código ASCII¶
El código ASCII asocia un número decimal a cada caracter (letras, números y otros símbolos). Cuando guardamos un string en una variable, el computador almacena en su memoria el código ASCII de cada caracter que lo forma. El orden de los strings se decide por el orden de los códigos de los caracteres que lo componen.
Código ASCII | caracter | Código ASCII | caracter |
48 | "0" | 65 | "A" |
49 | "1" | 66 | "B" |
... | ... | ... | ... |
61 | "=" | 97 | "a" |
62 | ">" | 98 | "b" |
... | ... | ... | ... |
Considerando los Códigos ASCII, los caracteres tienen el siguiente orden creciente:
- Dígitos escritos como strings
- Algunos caracteres especiales
- Letras mayúsculas
- Letras minúsculas
#las minusculas son mayores que las minusculas. Vienen despues en el codigo ASCII
"a" > "A"
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.
#letras mayusculas son distintas de letras minusculas
"a" == "A"
False
De Caracter a Código ASCII y viceversa¶
Función ord(c)
: Retorna el código ASCII del caracter c
.
Función chr(n)
: Retorna un string con el caracter cuyo código ASCII es el entero n
.
# Obteniendo el Código ASCII del caracter "A".
ord("A")
65
# Obteniendo el caracter representado por el Código ASCII 65.
chr(65)
'A'
IMPORTANTE: No es posible alterar directamente un string. Se dice que es un tipo de dato inmutable.
Si se quiere cambiar el contenido de una variable de tipo string, se debe crear un nuevo string y asignarlo a la variable.
palabra = "Casa"
palabra[0] = "c"
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-40-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 un tipo de operación que se aplica a un dato implícito, que se escribe antes del nombre del método.
La característica que diferencia a los métodos de las funciones es la forma de llamarlos:
En una función aplicada a un string, como
len(s)
, se escribe el nombre de la función y el string va dentro de los paréntesis.En un método aplicado a un string, como
s.upper()
, se comienza con el string, seguido de un punto, seguido del nombre del método y dentro de los paréntesis se incluyen parámetros adicionales en caso de ser necesario.
pal = "Progra"
pal.lower()
'progra'
pal.upper()
'PROGRA'
s.upper()
y s.lower()
generan un nuevo string a partir del valor de s
.
NO MODIFICAN A s
.
print(pal)
Progra
Ciclo for
¶
Repite un bloque de instrucciones sobre cada uno de los elementos de una colección.
Los strings son colecciones sobre las que se puede aplicar un ciclo for
.
Cada iteración del for
se aplicará a uno de los elementos del string, a través de la variable de iteración.
Ejemplo:
s = "hola mundo!"
for caracter in s:
print("caracter = " + caracter)
caracter = h caracter = o caracter = l caracter = a caracter = caracter = m caracter = u caracter = n caracter = d caracter = o caracter = !
En cada iteración a la variable de iteración (en este caso caracter
), se le asignará en orden cada uno de los caracteres que componen el string 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, como un string.Los tipos iterables son los que se pueden recorrer elemento por elemento siguiendo un orden. Otros ejemplos de tipos iterables que también estudiaremos son las listas y las tuplas.
Recorrer string
utilizando while
¶
Vamos a repetir el ejemplo utilizando while
.
a = "hola mundo!"
i = 0
while i < len(a):
print("s = " + a[i])
i += 1
s = h s = o s = l s = a s = s = m s = u s = n s = d s = o s = !
Ejercicios¶
Ejercicio 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.
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: hola Ingrese una palabra: ¿cómo estás?
Ejercicio 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.
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: Oración De Ejemplo Ingrese una palabra: de La palabra 'de' esta contenida en 'Oración De Ejemplo'
Ejercicio 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.
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: Perro Palabra 2: Gato La palabra Perro tiene 1 letras mas que la palabra Gato
Ejercicio 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
def contar(letra, palabra):
contador = 0
for i in palabra:
if i == letra:
contador +=1
return contador
s = "paralelepipedo"
print(contar("a", s))
2
print(contar("p", s))
3