Hagamos un repaso de la primera clase¶
In [ ]:
Copied!
## Adivina adivinador....
import random
numero_aleatorio = random.randrange(5)
gane = False
print("Tenés 3 intentos para adivinar un entre 0 y 99")
intento = 1
while intento < 4 and not gane:
numero_ingresado = int(input('Ingresa tu número: '))
if numero_ingresado == numero_aleatorio:
print('Ganaste! y necesitaste {} intentos!!!'.format(intento))
gane = True
else:
print('Mmmm ... No.. ese número no es... Seguí intentando.')
intento += 1
if not gane:
print('\n Perdiste :(\n El número era: {}'.format(numero_aleatorio))
## Adivina adivinador....
import random
numero_aleatorio = random.randrange(5)
gane = False
print("Tenés 3 intentos para adivinar un entre 0 y 99")
intento = 1
while intento < 4 and not gane:
numero_ingresado = int(input('Ingresa tu número: '))
if numero_ingresado == numero_aleatorio:
print('Ganaste! y necesitaste {} intentos!!!'.format(intento))
gane = True
else:
print('Mmmm ... No.. ese número no es... Seguí intentando.')
intento += 1
if not gane:
print('\n Perdiste :(\n El número era: {}'.format(numero_aleatorio))
¿Qué tipos de datos vimos?¶
- Números: int y float
- Booleanos: bool (que mencinamos que eran números también)
- Cadenas de caracteres: str
La función type() nos permite saber de qué tipo es un determinado objeto referenciado por una variable.
In [ ]:
Copied!
x = 1
print(type(x))
x
x = 1
print(type(x))
x
También vimos que hay algunas conversiones de tipo implícitas y otras explícitas¶
In [ ]:
Copied!
num = 10
mitad = num / 2
type(mitad)
mitad
num = 10
mitad = num / 2
type(mitad)
mitad
In [ ]:
Copied!
num = 10
mitad = int(num / 2)
type(mitad)
num = 10
mitad = int(num / 2)
type(mitad)
Las cadenas de caracteres¶
- Secuencia de caracteres encerrados entre comillas simples ' ' o comillas dobles " ".
- También se pueden definir con """ """.
In [ ]:
Copied!
mensaje_de_error = "ATENCION: la opción ingresada no es correcta."
menu = """ Menú de opciones:
1.- Jugar
2.- Configurar el juego
3.- Salir
"""
print(menu)
print(mensaje_de_error)
mensaje_de_error = "ATENCION: la opción ingresada no es correcta."
menu = """ Menú de opciones:
1.- Jugar
2.- Configurar el juego
3.- Salir
"""
print(menu)
print(mensaje_de_error)
Operaciones con cadenas de caracteres¶
- Concatenación: +
- Repetición: *
- Longitud de la cadena: len()
In [ ]:
Copied!
cadena = "Python "
otra_cadena = "es lo más!"
print(cadena + otra_cadena)
print(cadena * 5)
print(len(cadena))
cadena = "Python "
otra_cadena = "es lo más!"
print(cadena + otra_cadena)
print(cadena * 5)
print(len(cadena))
Algo más sobre cadenas de caracteres¶
- Cada elemento de la cadena se accede mediante un índice entre []
In [ ]:
Copied!
cadena = "Python"
cadena[0]
cadena = "Python"
cadena[0]
- El índice puede ser negativo:
In [ ]:
Copied!
cadena[-2]
cadena[-2]
Subcadenas¶
In [ ]:
Copied!
cadena[1:3]
cadena[3: -1]
cadena[1:3]
cadena[3: -1]
- El operador : permite obtener subcadenas. Esto se denomina slicing.
- El formato es cadena[inicio:fin]
- NO incluye al elemento cuyo índice es fin.
- [:] devuelve toda la cadena.
- Si los índices son negativos, se recorre de derecha a izquierda.
Probemos esto:¶
In [ ]:
Copied!
cadena[1] = 'm'
cadena[1] = 'm'
- Las cadenas son INMUTABLES.
TypeError: 'str' object does not support item assignment
Tenemos que acostumbrarnos a leer los errores.¶
Algo más sobre cadenas de caracteres¶
- Ya mencionamos que en Python, todos son objetos.
- Si bien retornaremos a esto más adelante, podemos mencionar que los objetos tienen propiedades y métodos.
- Volviendo a las cadenas, algunos métodos que podemos utilizar son:
In [ ]:
Copied!
cadena = "Python es lo más!"
cadena.upper()
cadena.lower()
cadena.islower()
cadena.isupper()
cadena.count("s")
cadena.split(" ")
cadena = "Python es lo más!"
cadena.upper()
cadena.lower()
cadena.islower()
cadena.isupper()
cadena.count("s")
cadena.split(" ")
El operador in¶
- Este operador retorna True o False de acuerdo a si un elemento está en una colección o no.
- Las cadenas de caracteres son secuencias de caracteres por lo que puede utilizarse este operador.
In [ ]:
Copied!
palabra = input("Ingresá una palabra")
if "a" in palabra:
print("Hay letras a")
else:
print("No hay letras a ")
palabra = input("Ingresá una palabra")
if "a" in palabra:
print("Hay letras a")
else:
print("No hay letras a ")
In [ ]:
Copied!
import string
letras = string.ascii_letters
minusculas = string.ascii_lowercase
digitos = string.digits
digitos
import string
letras = string.ascii_letters
minusculas = string.ascii_lowercase
digitos = string.digits
digitos
Un desafío¶
- Escribir un programa que ingrese 4 palabras desde el teclado e imprima aquellas que contienen la letra "r".
- Pensar: ¿podemos usar la instrucción for tal cual la vimos la clase pasada para las 4 iteraciones?
- La sentencia for permite iterar sobre una secuencia.
for variable in secuencia:
instrucción
instrucción
...
instrucción
In [ ]:
Copied!
cadena = "0123"
for elem in cadena:
print(elem)
cadena = "0123"
for elem in cadena:
print(elem)
- Para nuestro problema, debemos generar una secuencia de 4 elementos: podrían ser de cualquier tipo, aunque, ¿cuál sería la mejor opción?
Alguien podría pensar en plantear esto:¶
In [ ]:
Copied!
for i in "1234":
cadena = input("Ingresá una palabra")
if "r" in cadena:
print(cadena)
for i in "1234":
cadena = input("Ingresá una palabra")
if "r" in cadena:
print(cadena)
Pero.. ¿sería lo correcto? ¿Qué pasa si queremos ingresar 200 palabras?
La función range()¶
Esta función devuelve una secuencia de números enteros.
Puede tener de 1 a 3 argumentos:
range(valor_inicial, valor_final, paso)
Es posible invocarla con uno, dos o los tres argumentos.
In [ ]:
Copied!
for i in range(3, 14, 3):
print(i)
for i in range(3, 14, 3):
print(i)
Entonces, una mejor forma sería:¶
In [ ]:
Copied!
for i in range(4):
cadena = input("Ingresá una palabra: ")
if "r" in cadena:
print(cadena)
for i in range(4):
cadena = input("Ingresá una palabra: ")
if "r" in cadena:
print(cadena)
¿Qué nos devuelve range()?¶
In [ ]:
Copied!
secuencia = range(3)
secuencia
secuencia = range(3)
secuencia
Buscar: ¿de qué tipo es secuencia?
Cadenas con formato¶
- Es posible definir cadenas con determinados formatos utilizando el método format.
- La forma general es:
cadena.format(agumentos)
- Observemos los siguientes ejemplos:
In [ ]:
Copied!
intento = 3
print('Hola {} !!! Ganaste! y necesitaste {} intentos!!!'.format("claudia", intento))
intento = 3
print('Hola {} !!! Ganaste! y necesitaste {} intentos!!!'.format("claudia", intento))
In [ ]:
Copied!
for x in range(5):
print("{0:2d} {1:3d} {2:4d}".format(x, x*x, x*x*x))
for x in range(5):
print("{0:2d} {1:3d} {2:4d}".format(x, x*x, x*x*x))
In [ ]:
Copied!
intento = 3
nombre = "claudia"
print(f'Hola {nombre} !!! Ganaste! y necesitaste {intento} intentos!!!')
x = 4
print(f"{x:2d} {x*x:3d} {x*x*x:4d}")
intento = 3
nombre = "claudia"
print(f'Hola {nombre} !!! Ganaste! y necesitaste {intento} intentos!!!')
x = 4
print(f"{x:2d} {x*x:3d} {x*x*x:4d}")
Algunas cosas interesantes¶
In [ ]:
Copied!
cad1 = "Cadena alineada a izquierda"
cad2 = "Cadena alineada a derecha"
cad3 = "Cadena centrada"
print(f"\n{cad1:<30}\n{cad2:>30}")
print(f"\n{cad3:^30}")
print(f"\n{cad3:*^30}")
cad1 = "Cadena alineada a izquierda"
cad2 = "Cadena alineada a derecha"
cad3 = "Cadena centrada"
print(f"\n{cad1:<30}\n{cad2:>30}")
print(f"\n{cad3:^30}")
print(f"\n{cad3:*^30}")