0% encontró este documento útil (0 votos)
36 vistas8 páginas

Programacion Autodidacta

Enrique, duque de Sussex, ​ también llamado popularmente Harry, es el hijo menor del rey Carlos III del Reino Unido y de su primera esposa, Diana, princesa de Gales, por lo que es miembro de la familia real británica y príncipe del Reino Unido desde su nacimiento

Cargado por

maanjaque
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
36 vistas8 páginas

Programacion Autodidacta

Enrique, duque de Sussex, ​ también llamado popularmente Harry, es el hijo menor del rey Carlos III del Reino Unido y de su primera esposa, Diana, princesa de Gales, por lo que es miembro de la familia real británica y príncipe del Reino Unido desde su nacimiento

Cargado por

maanjaque
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 8

6.

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)

6.2 Slices o trozos de un string


En los mensajes de Twitter, los usuarios pueden incluir hashtags, o palabras que comienzan con el
símbolo #, por ejemplo #ComunidadUC en el Tweet de la figura 6.1:

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] será “a”


s[1] será “b”
s[2] será “r”
s[3] será “a”
s[4] será “c”
… y así sucesivamente.
¿En que posición está el último carácter de un string de largo N? Dado que los caracteres se
enumeran desde 0, el último carácter estará en la posición N-1. Por ejemplo, si s=”hola”, len(s) es
4, y:

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

s = input("Ingrese string: ")


imprimir_string(s)
print("###")
imprimir_string2(s)
print("###")
imprimir_string3(s)
print("###")

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.

# Notemos que n y m son variables locales dentro da la funcion


def char_at(s, i):
if i >= 0 and i < len(s):
return s[i]
else:
return ""

s = input("Ingrese string: ")


i = int(input("Ingrese indice: "))
print(char_at(s, i))

Programa que resuelve la pregunta (Ejemplo)

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[2:4] entregará “la”


s[0:2] entregará “ho”
s[0:4] entregará “hola”
Ejemplo 6.4
Haz una función que reciba un string y dos índices. Se debe retornar el string que va entre
las posiciones indicadas por los índices. Si las posiciones no son validas se debe avisar.

def substring(s, a, b):


if a > 0 and b < len(s) and a < b:
return s[a:b]
else:
print("Indices no validos")
return ""

s = input("Ingrese su string: ")


a = int(input("Indice a: "))
b = int(input("Indice b: "))
print(substring(s, a, b))

6.3 Uso del for con strings


Ya vimos cómo recorrer un string desde su comienzo (posición 0) hasta el final (posición
largo-1) usando while. Esto es algo que haremos tan frecuentemente, que hay una
manera más cómoda de hacer este mismo recorrido, recorriendo carácter por carácter.
Para esto, utilizamos la instrucción for (que en castellano sería algo como “para”). Con for,
automáticamente se recorre el string carácter por carácter. Por ejemplo:

s = input(“Ingresa tu tweet”)
for l in s:
print(l)

6.4 Cómo se ordenan las listas


Puedes comparar los caracteres en Python con los mismos operadores de comparación de
números (por ejemplo, < y >). Por ejemplo, si comparas números, 2 < 3 entregará True, y
50 > 51 entregará False. De la misma manera, "a" < "b" entrega True y "c" > "z" entrega
False, pues se usa el mismo orden del abecedario que usan los diccionarios (ver: Orden
Lexicográfico). Sin embargo, ¿qué pasa si comparas “a” con “A”? Quizás nos gustaría que
fueran iguales, pero no es así: el orden que tienen en realidad está dado por una tabla
(ver: Tabla ASCII) en la que cada letra equivale a un número.
Ejemplo 6.5¶
En este ejemplo haremos una función que para cada caracter en un string, imprima su
valor en la tabla ascii.

def imprimir_numeros_ascii(s):
for i in s:
print(ord(i))

s = input("Ingrese string")
imprimir_numeros_ascii(s)

6.5 Funciones y métodos pre-definidos de la clase string


Los strings en Python son objetos. Aunque veremos exactamente qué significa esto más
adelante, por ahora veremos que esto tiene consecuencias muy útiles: hay un largo listado
de métodos, o funciones, que se les pueden aplicar a los strings y que nos permiten
manipularlos muy fácilmente. Acá, te contaremos sobre algunos, el resto los puedes
encontrar en la documentación de Python o escribiendo, en la consola de Python,
help(str).

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)

Nota que s.upper() entrega el string s, todo en mayúsculas (“BIENVENIDOS AL SHOW


DE MAGIA!!!”), y que no hay problema con caracteres que no son letras, simplemente no
serán modificados. Lo mismo con s.lower(), que entrega “bienvenidos al show de
magia!!!”. Finalmente, nota que upper() y lower() NO modificaron al string s, que
se imprime al final igual que como estaba en el string original.

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)

La función replace también permite especificar un rango desde y hasta. A continuación,


veamos otro ejemplo:

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.

def contar_eliminar(s, c):


if len(c) == 1:
print(s.count(c))
return s.replace(c, "")
else:
print("c no es un caracter, pero las funciones son validas de
todos modos")
print(s.count(c))
return s.replace(c, "")

s = input("Ingrese string: ")


c = input("Ingrese caracter: ")
print(contar_eliminar(s, c))
6.6 Ejercicios¶
A continuación, te proponemos varios ejercicios para que los resuelvas en tu libro interactivo.

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.

También podría gustarte