Programacion Autodidacta
Programacion Autodidacta
1 Introducción a strings
Hasta el momento, hemos visto cómo realizar programas que usan números para hacer
operaciones matemáticas. Pero, ¿qué pasa si queremos hacer un programa que, por ejemplo, nos
salude? Algo así:
>>> Ingresa tu nombre: Valeria
>>> ¡Bienvenida, Valeria!
Hemos trabajado hasta ahora haciendo operaciones con números, pero los programas también
pueden necesitar procesar texto. En Python, el tipo de variable para guardar texto se llama string
(str).
Por ejemplo, Twitter permite escribir mensajes de hasta 140 caracteres. Podemos escribir un
pequeño programa que nos indique si un texto tiene más de 140 caracteres.
s = input(“Ingresa tu tweet”)
if len(s)>140:
print(“Este tweet es demasiado largo!”)
En el código anterior, la instrucción input ya no lleva int(…) ni float(…), pues efectivamente entrega
un string (por lo que no es necesario convertirlo a otro tipo de variable). Es decir, la variable s
guarda un objeto de tipo str, con el texto que el usuario haya ingresado (desde que comenzó a
escribir hasta que presionó <Enter>). Luego, ocupamos la función len, predefinida en Python, que
nos entrega el largo del string entregado como parámetro. Es decir, por ejemplo:
len(“hola”) entregará 4
len(“uno dos y tres”) entregará 14 (sí, los espacios y cualquier
otro carácter que uses, cuentan)
Queremos hacer un programa que cuente cuántos hashtags hay en un Tweet. Para lograr eso,
tendríamos que recorrer todo el texto, encontrando cada carácter “#” para contarlo. Lo que
necesitamos es, entonces, obtener el i-ésimo carácter de un string s. Eso se consigue utilizando el
operador s[i]. Los caracteres del string se ennumeran comenzando en 0, es decir, el primer
carácter del string está en la posición 0, el segundo en la posición 1, y así sucesivamente. Por
ejemplo, si s = “abracadabra”,
s[0] es “h”
s[1] es “o”
s[2] es “l”
s[3] es “a” (Nota que si N = 4, N-1 es 3)
s[4] lanzaría un error, dado que no hay carácter en la posición 4.
Volvamos, entonces, al ejemplo anterior: queríamos contar cuantos caracteres de tipo hashtag (#)
hay en un string. Entonces, para recorrer un string s desde su primer carácter hasta el último,
podemos escribir el siguiente código:
s = input("Ingresa tu tweet")
N = len(s)
i = 0
contador = 0 # para contar los caracteres "#"
while i<len(s): # no es <= porque llegariamos a que i = len(s) y
# con eso nos "salimos" del string s
if s[i] == "#":
contador += 1
i+=1
print("Hashtags = " + str(contador))
Ejemplo 6.2¶
Haz un programa que reciba un string y lo imprima caracter por caracter.
def imprimir_string(s):
# Con for
for c in s:
print(c)
def imprimir_string2(s):
# Ahora con for pero usando indices
for i in range(len(s)):
print(s[i])
def imprimir_string3(s):
count = 0
while count < len(s):
print(s[count])
count += 1
Ejemplo 6.3
En este ejemplo haremos la función char_at que recibe un string y un número. Se debe
retornar el caracter en la posición indicada por el número si esta es válida.
**IMPORTANTE: **Las posiciones de los caracteres en un string van del 0 hasta el
<número de caracteres> - 1.
No solo podemos obtener un solo carácter del string, podemos también obtener un trozo.
Para esto, usaremos el mismo operador anterior, pero indicando desde dónde y hasta
dónde queremos obtener. Entonces, para obtener un trozo, o slice, de un string s,
decimos s[desde:hasta]. Es importante notar que el valor de hasta no estará incluido en la
respuesta (por ejemplo, s[2:4] entregará los caracteres desde la posición 2 (incluida) hasta
la posición 4 (no incluida), es decir, los caracteres de las posiciones 2 y 3 solamente. Si s =
"hola",
s = input(“Ingresa tu tweet”)
for l in s:
print(l)
def imprimir_numeros_ascii(s):
for i in s:
print(ord(i))
s = input("Ingrese string")
imprimir_numeros_ascii(s)
s.upper(), s.lower()
Podemos empezar por solucionar el problema anterior: ¿cómo podríamos hacer, por
ejemplo, un diccionario en Python si es que no podemos hacer que “avión” y “AVIÓN”
sean la misma palabra, o si Python ordenaría “BARCO” como menor (es decir, antes en el
diccionario) que “velero”? La solución es usar métodos que permiten convertir
mayúsculas a minúsculas o viceversa. Estos métodos se llaman upper() y lower(), y se
aplican al string, pero no lo modifican, solo entregan una versión del string modificado.
Veamos un ejemplo:
s = "Bienvenidos al SHOW DE MAGIA!!!"
print(s.upper())
print(s.lower())
print(s)
s.find()
Siguiendo con el ejemplo de Twitter, podríamos querer encontrar un carácter dentro de
otro – no nos interesa, por ejemplo, saber cuántos hashtags hay, sino solo si hay o no.
Para esto, podemos usar find, que encuentra un string dentro de otro, entregando la
posición donde comienza el string encontrado. Por ejemplo,
s = input("Ingresa tu tweet")
pos_hashtag = s.find("#")
print(pos_hashtag)
Si el tweet no tuviera un hashtag, find devolvería el valor -1. En cambio, si hay un hashtag
dentro del tweet, find devolverá la posición del primer hashtag (un valor, entonces, entre
0 y N-1, si N es el largo del string).
Ahora, ¿qué pasa si queremos, por ejemplo, revisar si después de un hashtag viene el
nombre de algún usuario (indicado en Twitter con un “@”)? Necesitamos revisar si hay un
carácter “@”, pero sólo sirve si está después del hashtag “#ComunidadUC”. Para eso,
podemos entregar 1 o 2 parámetros adicionales a la función find: desde donde buscar, y
hasta donde buscar (Se puede especificar solamente desde, o desde y hasta). Por ejemplo,
s.find(“@”,3,8) busca el primer carácter “@” desde la posición 3 (incluida) hasta la
posición 8 (no incluida). Entonces, para el problema anterior, podríamos hacer lo
siguiente:
s = input("Ingresa tu tweet")
pos_hashtag = s.find("#")
pos_arroba = s.find("@", pos_hashtag + 1) # busco desde "#"
en adelante
print(pos_arroba)
s.count()
Como vimos antes, podemos contar cuántas veces aparece un carácter (o un string)
dentro de otro. Antes, contamos los hashtags (#) de un Tweet. También existe un método
llamado count que permite hacer esto.
s = input("Ingresa tu tweet")
num_hashtags = s.count("#")
print(num_hashtags)
Esto también sirve para contar cuántas veces aparece un string dentro de otro, por
ejemplo, si quisiera saber cuántas veces se está usando en particular el hashtag
#ComunidadUC, podemos hacerlo:
s = input("Ingresa tu tweet")
num_hashtags = s.count("#ComunidadUC")
print(num_hashtags)
La función count también permite especificar un rango desde y hasta, al igual que find.
s.replace()¶
Podríamos querer reemplazar un string por otro. Por ejemplo, ¿qué pasa si queremos
cambiar #ComunidadUC por #AvisoUC?
s = input("Ingresa tu tweet")
nuevo_tweet = s.replace("#ComunidadUC", "#AvisoUC")
print(nuevo_tweet)
Ejemplo 6.6¶
En este ejemplo haremos uso de funciones propias de los strings. Haga una función que
reciba un string y un caracter. Se deben contar todas las apariciones de ese caracter en el
string. Luego se deben quitar del string todas las apariciones del caracter.
Ejercicio 6.1
En la siguiente actividad se revisará automáticamente el resultado de tu programa. Debes crear
una función llamada contar_mayusculas y otra llamada contar_minusculas. Ambas reciben un
string y deben retornar el numero de caracteres en mayúsculas y minúsculas que tenía el string
respectivamente.
def contar_mayusculas(s):
# Seguir aqui
def contar_minusculas(s):
# Seguir aquí
Ejercicio 6.2
Haz una funcion llamada palindromo que reciba un string y retorne True si es un palíndromo y
False en caso contrario. Un string es palíndromo si se lee de la misma forma en sus dos sentidos.