Está en la página 1de 438

Python

Construcción de programas para


resolución de problemas de
ingeniería y procesamiento de
información

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 1


Introducción a la
programación en Python

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 2


¿Por qué aprender a programar?
• La programación es una herramienta poderosa que puedes usar para
resolver todo tipo de problemas
• ¿Qué puedes hacer?
• Construir una aplicación para el celular que te ayude a calcular cuánto
comiste
• Calcular cuanto dinero necesitas para comprar un auto
• Programar un dispositivo móvil que te recuerde que debes ponerte
bloqueador solar
• Crear una aplicación que te recuerde de llamar por celular a tu novi@

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 3


¿Por qué Python?
• Hay MUCHOS lenguajes de programación en el mundo
• Python es uno de los más fáciles de aprender
• Hay MUCHAS herramientas gratis que puedes usar para codificar o
aprender Python
• Hay muchas formas de programas en Python

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 4


Habiendo dicho eso…
• Una vez que aprendes a programar en un lenguaje de programación,
será más fácil aprender el siguiente, y el siguiente, y el siguiente…..

Perl Java
C#
Javascript
C++ ???
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 5
¿Se usa realmente Python?
• Industrial Light and Magic usa Python para manejar el procesamiento
de imágenes y efectos especiales
• ForecastWatch.com usa Python para generar/procesar los reportes de
predicción del tiempo
• Phillips lo usa para controlar la línea de montaje de semiconductores
Fishkill, NY.
• Etc
• etc

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 6


Pero dejemos clara una cosa
• Con este curso, no vas a aprender lo suficiente para empezar a
agregar efectos especiales a una película
• Lo que SÍ aprenderás es a resolver problemas del mundo real con tu
código

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 7


OJO!
• Hay varios sabores de Python en el mundo
• IronPython, IPython, CPython, PyPy, Jython, Canopy, Anaconda, ….
• Acá vamos a usar Python 3.5
• Entonces, si alguna vez encuentras algún código por ahí y no
funciona, NO ENTRES EN PÁNICO.
• Puede que solamente sea una diferencia en la versión de Python

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 8


¿Cómo se empieza?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 9


Primero, hay que instalar Python
• Los computadores de este laboratorio ya tienen instalado Python
• Si quieres instalarlo en tu computador, usa

https://www.continuum.io/downloads

• Instala Python 3.5, en 64 o 32 bits (de acuerdo a lo que requiera tu


computador)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 10


Anaconda
• Es una distribución que trae
todo lo que vamos a necesitar
en este curso (y más)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 11


Creando un proyecto

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 12


Ejecuta el editor de código
• Busca en tu computador la aplicación “Spyder”
• El “cómo buscarlo” va a depender de la versión
de Windows
• Un requerimiento de este curso es que tienes
que saber usar tu computador!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 13


Esto es Spyder

Acá vamos a
escribir nuestro
código

Acá van a aparecer


cosas interesantes

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 14


Cómo sé si todo está instalado
correctamente?
• Lo siguiente es algo tradicional entre
programadores
• Es bastante simple y directo
• Vamos a probar si todo se instaló
correctamente escribiendo un
programa de ejemplo en Python

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 15


Trabajo práctico
Creando tu programa HOLA MUNDO

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 16


Instrucciones
• Abre Spyder (ya lo hiciste)
• Ubica el lugar donde vas a escribir (ya lo tienes, frente a ti)
• Dentro de ese archivo, escribe lo siguiente:

# Este es mi primer programa en Python


# Creado por mi

# Usaremos la instrucción print para escribir algo por pantalla


print('Hola Mundo')

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 17


Guardamos el programa
• Presiona el ícono para
guardar
• Selecciona un lugar donde
guardar el archivo (escoge
una capeta de forma que
no se te pierda el archivo)
• Escribe un nombre que sea
relevante al programa que
escribiste (por ejemplo, en
este caso, holamundo.py)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 18


Fíjate
• La ubicación
cambió

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 19


“Ejecutando” el programa
• Ubica el triángulo verde
• Presiónalo

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 20


¿Pasó algo?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 21


¡Fíjate bien!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 22


Buenos hábitos de programación
• Agrega comentarios al código, de forma que te entiendas, y que el
resto entienda lo que hace tu código
• Lo que hace tu programa en general
• Lo que hacen las diferentes secciones del código
• Porqué elegiste que el programa funcione de cierta forma
• Cualquier cosa que te facilite la vida más adelante (imagina que guardas tu
código, y tienes que revisarlo 3 meses después)

# Este es mi primer programa en Python


# Creado por mi

# Usaremos la instrucción print para escribir algo por pantalla


print('Hola Mundo')
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 23
Colores!
• La IDE usa colores para que tu código sea más fácil de leer
• Los colores son configurables
• Explora!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 24


Felicitaciones
Ya has programado (por primera vez)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 25


Escribiendo

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 26


¿Por qué?
• Mucho de lo que haces en el computador es leer
• Pero para que puedas leer, el computador tiene que escribir
• Una de las cosas más simples (pero más importantes) es la necesidad
de mostrar (desplegar) texto

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 27


¿Cómo?
• En Python, usamos la
sentencia print para print('Perro que ladra no muerde')
escribir
print("Perro que ladra no muerde")

• Puedes usar comillas simples


o dobles (ubícalas en el
teclado!)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 28


¿Importan las comillas simples o dobles?

print('Bernardo O'Higgins nació en 1778')

• Sólo importan si el texto que estás escribiendo contiene una comilla


• Python necesita saber dónde empieza y dónde termina el texto que
quieres escribir

print("Bernardo O'Higgins nació en 1778")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 29


¿Puedo imprimir múltiples líneas?
• Puedes usar varias sentencias print

print('Perro que ladra no muerde')


print('A veces...')

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 30


Pero también…
• Puedes usar \n para forzar un salto de línea

print('Perro que ladra no muerde\nA veces...')

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 31


¡Python tiene un truco muy bueno!
• Comillas triples!

print("""Perro que ladra no muerde


A veces...""")

Todo el texto que


pongas entre
comillas triples se va
a mostrar TAL CUAL
como aparece en el
editor de texto

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 32


¿Cuál es mejor? … depende
print('Perro que ladra no muerde')
print('A veces...')

print('Perro que ladra no muerde\nA veces...')

print("""Perro que ladra no muerde


A veces...""")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 33


Trabajo práctico
Escribiendo texto

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 34


Ejecuta las tres versiones en forma separada
print('Perro que ladra no muerde')
print('A veces...')

print('Perro que ladra no muerde\nA veces...')

print("""Perro que ladra no muerde


A veces...""")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 35


OJO
• Generalmente, hay muchas formas de solucionar un mismo problema
• Muchas veces, no va a importar el CÓMO, sino que FUNCIONE

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 36


Trabajo práctico
Escribiendo texto (o morir en el intento)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 37


Hay veces en que las cosas no funcionan

print('Hola Mundo!!!')
print('Bernardo O'Higgins nació en 1778')
print("Bernardo O'Higgins nació en 1778')
print('Adios mundo cruel :(")

Corrígelos!
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 38
Un desafío
• Escribe un programa en El gato
cuando está ronco
Python que muestre el
imita al pato.
siguiente poema en la
El gato se vuelve loco
pantalla (tal como aparece cuando aparece un ratón
acá) y lo invita poco a poco
para ver televisión.

Mi gato
es cojín esponjado
junto a mi
lado.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 39


Desafío EXTRA
• Escribe un programa en El gato
cuando está ronco
Python que muestre el
imita al pato.
siguiente poema en la
El gato se vuelve loco
pantalla (tal como aparece cuando aparece un ratón
acá) y lo invita poco a poco
para ver televisión.

Mi gato
es cojín esponjado
junto a mi
lado.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 40


Desafío EXTRA2
• Escribe un programa en
Python que muestre el
siguiente texto (tal como
aparece acá)

_ _ _ _
_ _
| | | | | | | | (_) | |
| |_| | __ _ ___| |_ __ _ | | __ _ __ ___ ___| |_ __ _
| _ |/ _` / __| __/ _` | | |/ _` | \ \ / / / __| __/ _` |
| | | | (_| \__ \ || (_| | | | (_| | \ V /| \__ \ || (_| |
\_| |_/\__,_|___/\__\__,_| |_|\__,_| \_/ |_|___/\__\__,_|

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 41


Felicitaciones
Ahora sabes cómo comunicarle cosas al usuario!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 42


Variables
Entrada de datos

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 43


El computador está constantemente
preguntando
• Ubicación de sitios web que queremos visitar
• Mensajes que queremos enviar
• Números sobre los que queremos realizar cálculos
• Casi cualquier cosa útil que queramos hacer necesita interacción con
el computador

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 44


¿Cómo podemos preguntar información al
usuario?
nombre = input('Cual es tu nombre?')

• La función input permite especificar un mensaje a mostrar, y retorna


el valor ingresado por el usuario.
• Usaremos una variable para recordar el valor que el usuario ingresó
• La variable la hemos llamado nombre, pero puedes llamarla de
cualquier forma, siempre que su nombre no contenga espacios!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 45


¿Qué es una variable?
• Pensemos en una variable como una caja donde se puede almacenar
algo, y después volver para recuperarlo

nombre

Ramón

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 46


¿Y si necesito recordar muchas cosas?
• Entonces, creamos más variables

nombre ciudad colorFavorito

Ramón Gris
Buenos Aires

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 47


Trabajo práctico
Preguntando cosas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 48


Accedamos al valor que guardaste en una
variable
nombre = input('Cual es tu nombre?')

print(nombre)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 49


Modifiquemos el valor de las variables
nombre = input('Cual es tu nombre?')

print(nombre)

nombre = 'Juan Lorenzo Fernando Esteban'

print(nombre)

¡Haz que escriba


TU nombre!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 50


¿Qué nombre le debo poner a las
variables?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 51


Nombres de variables
• Reglas
• No deben contener espacios
• Diferencia entre mayúsculas y minúsculas
• primerNombre, primernombre, primerNOmbre son tres cosas distintas
• No puedes iniciar con un número (primerNombre ok!, 1nombre no ok!)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 52


Nombres de variables
• Buenas prácticas
• Nombres descriptivos, pero no demasiado largos
• cancionFavorita
• cancionFavoritaEnElCuarentaPrincipales
• Acostúmbrate a usar un esquema para escribir nombres largos
• camelCasing
• PascalCasing

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 53


¿Cuales nombres son buenos?
• Variable1
• Apellido Paterno
• Fecha
• 2Apellido
• DDN
• DiaDeNacimiento
• DIADENacimiento
• ElMesDeMiNacimientoCuandoYoNaci

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 54


Manipulando variables

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 55


Puedes combinar variables y strings con el
símbolo +
primerNombre = input('Cual es tu primer nombre?')
segundoNombre = input('Cual es tu segundo nombre?')

print("Hola" + primerNombre + segundoNombre)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 56


¿Qué es un string?
• Es una secuencia de caracteres
• En Python, podemos identificar un string ya que la secuencia está
deliminada por comillas (simples o dobles)

nombre = "Miguel Canalla"

• Una variable puede contener un string si es que fue asignada con


anterioridad a un string, o a otra variable que contenga un string

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 57


Vas a necesitar agregar espacios para que se
escriba con el formato correcto
primerNombre = input('Cual es tu primer nombre?')
segundoNombre = input('Cual es tu segundo nombre?')

print("Hola " + primerNombre + " " + segundoNombre)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 58


Trabajo práctico
Formateando la salida

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 59


Creemos algo interactivo
animal = input('Cual es tu animal favorito? ')
color = input('Cual es tu color favorito? ')
lugar = input('Nombre de un lugar que te guste: ')

print("El " + animal + " " + color + " fue a " + lugar)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 60


También podemos manipular el contenido de
la variable

mensaje = 'Hola Mundo!'

print(mensaje)
print(mensaje.lower())
print(mensaje.upper())
print(mensaje.swapcase())

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 61


OJO
• lower, upper, swapcase son funciones de Python
• Ya que estamos almacenando strings en las variables, podemos usar
cualquier función Python que opere sobre strings

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 62


¿Te fijaste?
• La IDE te quería ayudar, y te mostró una serie de posibilidades de
autocompletación a medida que fuiste escribiendo el texto

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 63


¿Qué hacen estas funciones?
mensaje = 'Hola mundo!'

print(mensaje.find('m'))
print(mensaje.count('o'))
print(mensaje.capitalize())
print(mensaje.replace('Hola', 'Chao'))

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 64


¡Nadie se memoriza esas funciones!
• ¿Cómo se encuentran cuando las necesitamos?
• Autocompletación
• Documentación
• Búsquedas en internet

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 65


Trabajo práctico
Formateando la salida

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 66


Cómo…
• Hagamos que el usuario ingrese una patente de vehículo, y
escribámosla por pantalla en letras mayúsculas, incluso si el usuario la
escribió toda en letras minúsculas.

patente = input("Por favor, ingrese su patente: ")


print(patente.upper())

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 67


Usar funciones y variables nos permiten
cometer nuevos errores
• Cada una de estas líneas es un error:

mensaje = Hola Mundo mensaje = "Hola Mundo"


12Mensaje = "hola" Mensaje = "hola"
el mensaje = "hola!!!!" elmensaje = "hola!!!!"
print(mensaje.upper) print(mensaje.upper())
print(memsaje.lower()) print(mensaje.lower())
print(mensaje.count()) print(mensaje.count("o"))

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 68


Escribe un programa que cuente una
historia
• Una historia personalizada
• Usa una historia de un libro (o inventa una). Haz que tu programa le
pregunte al usuario información que puedas reemplazar en la
historia, tal como nombres, lugares, o inserta adjetivos o verbos.
• Muestra la historia personalizada al usuario.
• Como bono, asegúrate de que cada palabra aparezca bien formateada
(mayúscula/minúscula), independiente de cómo el usuario ingresó la
información.
• Sube tu obra de arte a Educ@

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 69


Felicitaciones
Ahora puedes escribir programas que pueden
interactuar con el usuario

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 70


Almacenando números

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 71


Muchos de los problemas que vamos a
resolver involucran matemáticas
• Cuánta propina dejar en un restorán
• Calcular el total de una factura
• Cuánto voy a terminar pagando si compro algo a crédito
• Cuánta harina debo usar en una receta si quiero hacer el doble de
cantidad total de galletas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 72


Es importante poder almacenar y manipular
números

estatura = 185
print(estatura)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 73


Podemos realizar operaciones matemáticas
en los valores o en las variables

ancho = 20
alto = 5

area = ancho * alto

perimetro = 2 * ancho + 2 * alto

perimetro = 2 * (ancho + alto)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 74


Estas son las operaciones matemáticas más
comunes
Símbolo Operación Ejemplo
+ Suma 5 + 2
- Resta 5 – 2
* Multiplicación 5 * 2
/ División 5 / 2 (2.5)
** Exponente 5 ** 2 (25)
% Módulo 5 % 2 (1)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 75
El orden de evaluación es el mismo que en la
enseñanza media
( ) paréntesis
** exponente (2**3, 4**5, …)
* / multiplicación y división
+ - suma y resta

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 76


Trabajo práctico
Pidiéndole al usuario que ingrese números

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 77


¿Por qué obtenemos una respuesta incorrecta
cuando le pedimos al usuario ingresar su sueldo y
bonos?
salario = input("Ingresa tu salario, por favor: ")
bono = input("Ingresa el monto de tu bono, por favor: ")
SueldoMes = salario+bono
print(SueldoMes)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 78


Una pista: input devuelve strings
salario = '100'
bono = '150'
SueldoMes = salario+bono
print(SueldoMes)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 79


El programa piensa que salario y bono son strings
por los que en vez de sumarlos, los concatenó

salario = 100
bono = 150
SueldoMes = salario+bono
print(SueldoMes)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 80


• Necesitamos una manera de decirle a nuestro programa que
queremos que trate los valores como números en vez de string

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 81


Existen funciones para convertir desde un
tipo de dato hasta otro.

int(valor) convierte a un integer


long(valor) convierte a un long integer
float(valor) convierte a un numero flotante
(un número que puede tener decimales)
str(valor) convierte a string

¿Qué función debemos utilizar para corregir


nuestro código?
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 82
Si convertimos de string a float obtenemos el
resultado deseado:
salario = input("Ingresa tu salario, por favor: ")
bono = input("Ingresa el monto de tu bono, por favor: ")
#SueldoMes = salario+bono
SueldoMes = float(salario)+float(bono)
print(SueldoMes)

¿Qué crees que pasará si alguien escribe


“Juan es increíble” como su salario?
El código falla porque no puede convertir el string “Juan es
increíble” a un valor numérico. Aprenderemos cómo
manejar los errores más adelante
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 83
Trabajo práctico
Cambiando el tipo de dato

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 84


Tu desafío: crear un calculador de
préstamos
• Has que el usuario ingrese el costo del préstamo, la tasa de interés y
el número de años del préstamo.
• Calcula los pagos mensuales con la siguiente fórmula:

M = L[i(1+i)n]/[(1+i)n-1]

M = pago mensual
L = monto del préstamo
i = tasa de interés (recuerda que para 5%, i=0.05)
n = número de pagos
Sube tu solución a Educa
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 85
Geek Tip!
• A veces los comandos son largos como para caber en solo una línea.
• Puedes usar un “\” para indicar que un comando sigue en la línea
siguiente.
total = 5 + 6 + 8 \
+ 6 + 2

print(total)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 86


Felicitaciones
Ahora puedes resolver problemas matemáticos usando
código

Ver asignación de tutores


31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 87
Tomando decisiones con
código
Sentencia If

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 1


Todos los días nos enfrentamos a decisiones
• ¿Debo irme en micro, colectivo o en auto?
• ¿Debo cocinar en la casa o salir a comer?
• ¿Qué laptop debería comprar?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 2


La decisión depende de diferentes
condiciones
• ¿Debo irme en micro, colectivo o en auto?
• ¿Estoy atrasado?¿Cuál es el precio de la bencina?
• ¿Debo cocinar en la casa o salir a comer?
• ¿Hay comida en la casa?¿Tengo plata?
• ¿Qué laptop debería comprar?
• ¿Cuánta RAM necesito?¿Cuánta plata tengo?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 3


Si tu código resuelve problemas, tiene que
tomar decisiones también
• Si el usuario mantiene un balance en su cuenta sobre $1.000.000 no
se aplican las tarifas de transacción
• Si un usuario cancela una cita a menos de 24 horas de la cita, cobrar
la tarifa de cancelación
• Si el jugador anota un gol, sumar uno al marcador.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 4


Las sentencias if (si) permiten especificar código
que se ejecuta solo si una condición es verdadera
answer = input("¿Le gustaría el envío express?")
if answer == "si":
print("Eso será $1.000 extra")

¿Qué crees que significa el símbolo == ?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 5


Puedes usar diferentes símbolos para
comprobar diferentes condiciones

== es igual a if respuesta == "si":


!= no es igual a if respuesta != "no":
< es menor que if total < 100:
> es mayor que if total > 100:
<= es menor o igual que if total <= 100:
>= es mayor o igual que if total >= 100:

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 6


Las sentencias if (si) permiten especificar código
que se ejecuta solo si una condición es verdadera
answer = input("¿Le gustaría el envío express?")
if answer == "si":
print("Eso será $1.000 extra")
print("Ten un buen día")

¿Importa que el primer print esté indentado?


SÍ, el código indentado solo se ejecuta si la condición es verdadera

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 7


Trabajo práctico
Sentencias If y un cajero automático

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 8


# Esto representa el monto actual en la cuenta corriente
Imaginemos un cajero automático simple…
totalEnLaCuenta = 1000

print("Bienvenido al cajero automático")

print("Balance inicial:")
print(totalEnLaCuenta)

print("Vamos a tratar de retirar 5000")


monto = 5000

if monto > totalEnLaCuenta:


print("Lo siento, no puedes retirar tanto dinero")

if monto <= totalEnLaCuenta:


print("El retiro fue aceptado")

print("Balance final:")
print(totalEnLaCuenta)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 9
Si trato de sacar un monto mayor que el
balance inicial:

Bien!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 10


Si trato de sacar un monto menor o igual al
balance inicial
print("Vamos a tratar de retirar 100")
monto = 100

• Casi….
• Cómo hacemos que el balance
final se vea afectado por el
retiro?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 11


# Esto representa el monto actual en la cuenta corriente
totalEnLaCuenta = 1000

print("Bienvenido al cajero automático")

print("Balance inicial:")
print(totalEnLaCuenta)

print("Vamos a tratar de retirar 100")


monto = 100

if monto > totalEnLaCuenta:


print("Lo siento, no puedes retirar tanto dinero")

if monto <= totalEnLaCuenta:


print("El retiro fue aceptado")
totalEnLaCuenta = totalEnLaCuenta - monto

print("Balance final:")
print(totalEnLaCuenta)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 12
# Esto representa el monto actual en la cuenta corriente
totalEnLaCuenta = 1000
¿Qué pasa si te equivocas?
print("Bienvenido al cajero automático")
Esa línea se ejecuta
O sea, SIEMPRE se hará el
print("Balance inicial:") Laindependiente
forma correcta de
descuento.essique
el monto
esa
print(totalEnLaCuenta) era mayor oque
menor-igual que el
línea TIENE estar dentro
Esto no es lo que el programa
print("Vamos a tratar de retirar 100") totaldel
enIFla cuenta
debe hacer: es un error.
monto = 100

if monto > totalEnLaCuenta:


print("Lo siento, no puedes retirar tanto dinero")

if monto <= totalEnLaCuenta:


print("El retiro fue aceptado")
totalEnLaCuenta = totalEnLaCuenta
totalEnLaCuenta = totalEnLaCuenta -- monto
monto

print("Balance final:")
print(totalEnLaCuenta)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 13
Sentencias If del mundo real

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 14


Casi todas las sentencias if pueden ser
escritas de dos maneras
if respuesta == "si":
if not respuesta == "no":

if total < 100:


if not total >= 100:

¿Cuál prefieren?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 15


Escribiendo como lo harías tú
• Si el curso se completó -> enviar el certificado al estudiante
if CursoCompletado == "si":
• Si el total de la orden es menor a $50.000 -> agregar costo de envío
if total < 50000:

• Si el gato no ha sido vacunado -> llamar al dueño para una hora


if not vacunado == "si" :

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 16


¿Qué pasaría si en vez de escribir “si”
escribimos “SI” o “Sí”?
answer = input("¿Le gustaría el envío express?")
if answer == "si":
print("Eso será $1.000 extra")
print("Ten un buen día")

Uno de los desafíos de trabajar con cadenas de caracteres es que el


computador considera S y s como dos letras totalmente diferentes.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 17


¿Hay alguna forma de cambiar un string de
mayúsculas a minúsculas?
answer = input("¿Le gustaría el envío express?")
if answer.lower() == "si":
print("Eso será $1.000 extra")
print("Ten un buen día")

Pista: Hay funciones que se pueden llamar para mostrar variables string
Pista 2: lower()

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 18


¿Qué pasa si usamos sentencias if con
números?
depósito = 150
if depósito > 100:
print("Te llevas un microondas gratis")
print("Ten un buen día")

• ¿Qué aparece en la pantalla si el depósito es de 150?


• ¿y 50?
• ¿y exactamente 100?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 19


Trabajo práctico
Trabajando con valores numéricos y sentencias If

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 20


Siempre debemos probar >,< y las
condiciones de borde
depósito = 150
if depósito > 100:
print("Te llevas un microondas gratis")
print("Ten un buen día")

Entonces cuando nos enfrentemos a código como este, debemos probar:


• Un valor menor a 100
• Un valor mayor a 100
• Exactamente 100
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 21
Trabajo práctico
Preguntándole al usuario por un valor numérico
para usarlo en una sentencia If

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 22


¿Cómo podríamos hacer que el usuario
ingrese la cantidad a depositar?

depósito = input("¿Cuánto desea depositar? :")


if depósito > 100:
print("Te llevas un microondas gratis")
print("Ten un buen día")

¿Por qué falló el código?


¿Cómo podemos arreglarlo?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 23


¿Cómo podríamos hacer que el usuario
ingrese la cantidad a depositar?

depósito = input("¿Cuánto desea depositar? :")


if int(depósito) > 100:
print("Te llevas un microondas gratis")
print("Ten un buen día")

Otra forma de Hacerlo


depósito = int(input("¿Cuánto desea depositar? :"))
if depósito > 100:
print("Te llevas un microondas gratis")
print("Ten un buen día")
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 24
Ramificando

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 25


¿Qué pasaría si el regalo para compras de más de
100 es un microondas y de menos es un tazón?
depósito = input("¿Cuánto desea depositar? :")
if float(depósito) > 100:
print("Te llevas un microondas gratis")
else:
print("Disfruta tu tazón")
print("Ten un buen día")

El código en la sentencia else se ejecutará solo cuando la


condición NO sea verdadera
¿Qué aparecerá en la pantalla si ingresamos 50? 150? 100?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 26


Puedes usar variables booleanas para
recordar si una condición es verdadera o falsa
depósito = input("¿Cuánto desea depositar? :")
if float(depósito) > 100:
# Fijar la variable booleana MicroondrasGratis como verdadera
MicroondasGratis = True

# Si la variable MicroondasGratis es verdadera


# se ejecutará la sentencia print
if MicroondasGratis:
print("Disfruta tu microondas")

Asegúrate de revisar que pasa si la sentencia es verdadera o


falsa
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 27
¿Por qué el código falla cuando ingresamos
un valor menor a 100?
depósito = input("¿Cuánto desea depositar? :")
if float(depósito) > 100:
#Fijar la variable booleana MicroondrasGratis como verdadera
MicroondasGratis = True
#si la variable MicroondasGratis es verdadera
#Se ejecutará la sentencia print
if MicroondasGratis:
print("Disfruta tu microondas")

Nombre ‘MicroondasGratis’
no está definido
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 28
Siempre es una buena idea definir las
variables al inicio
#Definir la variable para corregir el error
MicroondasGratis=False

depósito = input("¿Cuánto desea depositar? :")


if float(depósito) > 100:
#Fijar la variable booleana MicroondrasGratis como verdadera
MicroondasGratis = True

# Si la variable MicroondasGratis es verdadera


# se ejecutará la sentencia print
if MicroondasGratis:
print("Disfruta tu microondas")
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 29
¿No estaremos complicando el código
utilizando una variable Booleana?
• Eso depende…
• ¿Qué pasa si escribiendo un programa, hay más de un lugar donde
debo revisar la misma condición? Podrías revisar la condición una vez
y recordar el resultado en una variable Booleana.
• ¿Qué pasa si la condición es muy complicada de resolver? Sería
mucho más fácil leer el código si solo usas una variable Booleana
(generalmente llamada flag/bandera) en tu sentencia If

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 30


Ahora hay nuevas maneras de equivocarse.
¿Pueden encontrar 3?
depósito = input("¿Cuánto desea depositar? :")
if float(depósito) > 100
print("Ganaste un microondas")
MicroondasGratis = true
else:
print("Disfruta tu tazón")
print("Ten un buen día")
depósito = input("¿Cuánto desea depositar? :")
if float(depósito) > 100:
print("Ganaste un microondas")
MicroondasGratis = True
else:
print("Disfruta tu tazón")
31/03/2021
print("Ten un buen día")
Profesor: Juan Alfredo Gallardo Verdugo 31
Tu desafío
• Calcula los costos de envío de un comprador
• Pídele al usuario que ingrese el monto total de su compra
• Si el total es bajo $50 agrega $10, de otra manera el envío es gratis
• Pregúntale el modo de pago: si es en efectivo, descuenta un 5% del
TOTAL de la compra. Si es con tarjeta de crédito, agrega un 5% al
TOTAL de la compra
• Respóndele al usuario con su total final incluyendo costos de envío.
• No olvides probar tu solución con
• Un valor mayor a 50, un valor menor a 50, 50
• Todos los tipos de modo de pago
• Y la combinaciones entre montos y modo de pago
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 32
Felicitaciones
Tu código puede reaccionar a diferentes
condiciones
Puedes resolver problemas que requiere tomar
decisiones

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 33


Tomando decisiones
complejas con código
Y/O, if anidados, elif

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 34


A veces son muchas las condiciones que
afectan el resultado de una decisión
• Si estás en Inglaterra, dices “hello”; si estás en Alemania dices “guten
tag”; si estás en Francia dices “bonjour”….
• Si te ganas la lotería, y el premio es más de 100 millones, te retiras y
vives la vida viajando
• Si es lunes, tienes que salir más temprano de la casa, porque siempre
hay congestión en la calle. En caso contrario, puedes salir 10 minutos
más tarde

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 35


Si, Entonces, En caso contrario

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 36


Si estás en Canadá, di “hello”; si estás en Alemania
“guten tag”; si estás en Francia “bonjour”
• Esta es una situación interesante, ya que solamente hay una
condición para verificar, pero esa condición puede tener varios
valores diferentes

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 37


“elif” permite verificar diferentes valores
pais = input("De donde eres?: ")

if pais == "CANADA":
print("hello")
elif pais == "ALEMANIA":
print("Guten Tag")
elif pais == "FRANCIA":
print("Bonjour") Nota que el “elif” no está identado!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 38


¿Qué pasa si alguien ingresa JAPÓN o CHILE?
pais = input("De donde eres?: ")

if pais == "CANADA":
print("hello")
elif pais == "ALEMANIA":
print("Guten Tag") Tenemos que agregar
elif pais == "FRANCIA": una cláusula “else”
print("Bonjour") para capturar
else: cualquier condición
print("Aloha/Ciao/Hola") que no hayamos
listado.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 39


Saludando en distintos idiomas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 40


Hagamos que funcione
pais = input("De donde eres?: ")
• ¿Qué pasa si ingreso
Canada, CANAda? if pais == "CANADA":
• O Alemania, ALEMania print("hello")
• etc elif pais == "ALEMANIA":
print("Guten Tag")
elif pais == "FRANCIA":
print("Bonjour")
else:
print("Aloha/Ciao/Hola")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 41


Hace un rato dijimos…

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 42


Apliquemos lo mismo ahora
pais = input("De donde eres?: ")
pais = pais.lower()
???
if pais == "CANADA":
print("hello")
elif pais == "ALEMANIA":
print("Guten Tag")
elif pais == "FRANCE":
print("Bonjour")
else:
print("Aloha/Ciao/Hola")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 43


Faltaba un pequeño detalle…
pais = input("De donde eres?: ")
pais = pais.lower()

if pais == "canada":
print("hello")
elif pais == "alemania":
print("Guten Tag")
elif pais == "francia":
print("Bonjour")
else:
print("Aloha/Ciao/Hola")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 44


¿Se te ocurre otra forma de lograr lo mismo?
pais = input("De donde eres?: ")
pais = pais.upper()

if pais == "CANADA":
print("hello")
elif pais == "ALEMANIA":
print("Guten Tag")
elif pais == "FRANCE":
print("Bonjour")
else:
print("Aloha/Ciao/Hola")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 45


Combinando condiciones

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 46


Si gano la lotería, y el premio es más de 100
millones, me retiro a una vida de lujos y viajes
• A veces, la decisión de necesitamos tomar depende de una
combinación de factores
• Si gano la lotería, pero solamente gano $5, no me puedo retirar
• Si la lotería entrega 100 millones, pero no gané, no me puedo retirar
• Solamente me puedo retirar si gano la lotería Y el premio fue más de
100 millones

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 47


Cuando usas AND estás diciendo
que todas las condiciones deben
ser verdaderas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 48


El And sólo se evalúa como True si ambas
condiciones son True
# Imagina que tenemos código más arriba que
# le puso estos valores a estas variables
ganeLoteria = True
ganePremioMayor = True

# hacemos print solamente si ambas condiciones


# son verdaderas
if ganeLoteria and ganePremioMayor:
print("ahora me puedo retirar al caribe")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 49


Estas son todas las posibles combinaciones
if primeraCondicion and segundaCondicion:

Primera Segunda La sentencia


condición es condición es completa es
True True True
True False False
False True False
False False False
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 50
A veces, queremos hacer cosas si cualquiera
de las condiciones es verdadera
• Si es sábado o domingo, puedo dormir hasta tarde
• Si está lloviendo o hace calor, no uso la bicicleta

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 51


Cuando usas OR estás diciendo
que quieres hacer algo si
cualquiera de las condiciones es
verdadera

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 52


El OR se evalúa como True si cualquiera de las
condiciones es True
# Imagina que tenemos código más arriba que
# le puso estos valores a estas variables
esSabado = True
esDomingo = False

# hacemos print si cualquiera condición es verdadera


if esSabado or esDomingo:
print("dormiré hasta las 11:30")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 53


Estas son todas las posibles combinaciones
if primeraCondicion or segundaCondicion:

Primera Segunda La sentencia


condición es condición es completa es
True True True
True False True
False True True
False False False
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 54
Puedes combinar múltiples AND y OR en una
misma sentencia IF
if mes == "Sep" or mes == "Abr" or mes == "Jun" or mes == "Nov":
print("Este mes tiene 30 dias")

if peliculaFavorita == "Star Wars" \


and libroFavorito == "El Señor de los Anillos" \
and ramoFavorito == "Programación":
print("Hagamos un grupo en Whatsapp")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 55


Puedes combinar AND/OR en una misma
sentencia
if pais == "CHILE" and mascota == "huemul" or mascota == "condor":
print("Te gusta el rodeo??")

Asegúrate de probar las siguientes combinaciones


• pais = CHILE, mascota = HUEMUL
• pais = CHILE, mascota = CONDOR
• pais = VIETNAM, mascota = HUEMUL Y qué pasa con este
• pais = VIETNAM, mascota = CONDOR caso?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 56


¿Te acuerdas haber aprendido el orden de las
operaciones matemáticas en la escuela?
• 8+5*2=?
• La multiplicación y la división se realizan antes de la suma y la resta
• 8 + 5 * 2 = 18

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 57


Hay un orden de evaluación para los AND/OR
• El AND se evalúa primero

if pais == "CHILE" and mascota == "huemul" or mascota == "condor":


print("Te gusta el rodeo??")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 58


En matemáticas, ¿cómo especificamos que
queremos sumar antes que multiplicar?
• Usando paréntesis!
• (8+5)*2 = 26

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 59


Podemos usar paréntesis para ejecutar el OR
antes que el AND
if pais == "CHILE" and \
(mascota == "huemul" or mascota == "condor"):
print("Te gusta el rodeo??")

• En caso de duda, agrega paréntesis siempre que combines OR y AND


• Pueden parecer redundantes, pero ayudarán a que el resto pueda
entender tu código

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 60


Sentencias anidadas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 61


A veces tenemos muchas condiciones, pero
usar solamente OR y AND no funciona
• Trata de pensar cómo escribir esto en código:
• Si es lunes, anda a ver si hay café recién hecho. Si no hay café fresco,
anda a la cafetería más cercana
• En esta situación, tienes que checkear una condición, y si es
verdadera, hay que checkear otra condición

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 62


Puedes meter un IF dentro de otro IF
esLunes = True
hayCafeFresco = False

if esLunes:
# el siguiente IF está anidado, así que solamante
# se ejecutará si el IF anterior es verdadero

if not hayCafeFresco:
print("voy a comprar café") Tienes que ser MUY
cuidadoso de cómo identaste
print("No me gustan los lunes") el código, ya que esto
determina cuál código va con
print("Ahora, empezamos a trabajar") cuál sentencia IF
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 63
Tu desafío: Calcula el total a cobrar al
hacer una compra de una tienda online
• Pregúntale al usuario cuál es el total de la compra, y desde qué país está
comprando
• Si el usuario es de Canadá, pregúntale su provincia
• Si el usuario no es de Canadá, no le cobres ningún impuesto
• Si la orden es de Canadá, cóbrale un impuesto de acuerdo a la provincia:
• Alberta: agrégale 5%
• Ontario, NewBrunswick, NovaScotia: agrégale 13%
• Otras provincias: agrega 6%
• Infórmale al usuario cual es el monto de la venta, el monto en impuestos, y
el monto total que debe pagar
• Despídete del usuario de acuerdo al país que indicó en el primer punto
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 64
Lo pensaste bien?
• ¿Qué necesitas probar para asegurarte que tu código funciona
correctamente?
• Alguien que no es de Canadá (sin impuesto)
• Alguien que es de Canadá, Alberta (impuesto de 5%)
• Alguien que es de Canadá, Ontario (impuesto de 13%)
• Alguien que es de Canadá, pero de una provincia diferente (impuesto de 6%)
• Acuérdate que pueden ingresar los nombres del país y provincia en
mayúsculas, minúsculas o en cualquier combinación

• Sube tu solución a Educa


31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 65
Desafío para la casa (1)
• Construye un programa que me pregunte un año, y me diga si dicho
año es bisiesto o no
• Puedes apoyarte en esto:
• https://es.wikipedia.org/wiki/Año_bisiesto

• Sube tu solución a Educa antes de la próxima clase

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 66


Desafío para la casa (2)
• Construye un programa que me pregunte una fecha (dia, mes y año) y
me diga el dia de la semana (lunes, martes, etc)
• Apóyate usando
• https://es.wikibooks.org/wiki/Algoritmia/Algoritmo_para_
calcular_el_día_de_la_semana

• Sube tu solución a Educa antes de la próxima clase

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 67


Felicitaciones
Puedes escribir código que resuelve problemas
que requieren tomar decisiones complejas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 68


Repitiendo cosas
Ciclos for

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 1


A veces necesitamos repetir una acción más
de una vez
• Servir una taza de café a cada invitado
• Lavar (y lavar y lavar) un plato hasta que esté limpio
• Hacer una tarjeta con el nombre de cada invitado a un evento

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 2


En el código, usamos ciclos para repetir una
tarea
• Vamos a hacer algo entretenido hoy
• Vamos a dibujar!
• Usaremos ciclos para dibujar algunos objetos

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 3


Hola tortuga

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 4


¿Sabías que con Python se puede dibujar?

import turtle

turtle.forward(100)
turtle.exitonclick()

Haz click en el dibujo para cerrar


la ventana
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 5
turtle es una biblioteca que te permite
dibujar
import turtle

turtle.color('green')
turtle.forward(100)
turtle.right(45)
turtle.color("blue")
turtle.forward(50)
turtle.right(45)
turtle.color("pink")
turtle.forward(100)

turtle.exitonclick()
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 6
Trabajo práctico

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 7


Algunas cosas que la tortuga puede hacer

Comando Acción
right(x) Rota a la derecha x grados
left(x) Rota a la izquierda x grados
color('x') Cambia el color del lápiz a x
forward(x) Mueve hacia adelante x unidades
backward(x) Mueve hacia atrás x unidades

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 8


A dibujar!
• Dibuja la figura que
aparece a la derecha

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 9


import turtle

turtle.color('green')
turtle.forward(100)
turtle.right(90)
turtle.forward(100) turtle.color('black')
turtle.right(90) turtle.color('blue')
turtle.forward(100) turtle.left(45)
turtle.forward(100) turtle.forward(100)
turtle.right(90) turtle.left(90)
turtle.forward(100) turtle.left(30)
turtle.forward(100) turtle.forward(80)
turtle.left(90)
turtle.forward(100) turtle.right(120)
turtle.left(90) turtle.forward(80)
turtle.forward(100) turtle.right(120)
turtle.forward(80)
turtle.right(15+90+45)
turtle.forward(120)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo turtle.exitonclick()


10
Ciclos for

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 11


¿Cómo podemos hacer que la tortuga dibuje
un cuadrado?
import turtle

turtle.color('green') Básicamente
turtle.forward(100) estamos
turtle.right(90) repitiendo estas
turtle.forward(100) dos líneas cuatro
turtle.right(90) veces!
turtle.forward(100)
turtle.right(90)
turtle.forward(100)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 12


Los ciclos permiten que
DEBES identar el
repitamos la misma
línea de código tantas
código que veces como queramos
quieres repetir!
import turtle

turtle.color('black')

for paso in range(4):


turtle.forward(100)
turtle.right(90)
Número de
turtle.exitonclick() veces que se
ejecutará el
código en el ciclo
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 13
Cuando cambias el rango, cambias el número
de veces que se ejecuta el código
import turtle

turtle.color('black')

for paso in range(3):


turtle.forward(100)
turtle.right(90)
Número de
turtle.exitonclick() veces que se
ejecutará el
código en el ciclo
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 14
Sólo el código identado se repite!
import turtle

turtle.color('black')

for paso in range(4):


turtle.forward(100)
turtle.right(90)

turtle.color('red')
turtle.forward(200)

turtle.exitonclick()

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 15


A dibujar!
• Dibuja la figura que
aparece a la derecha
• Pero esta vez, usando
ciclos!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 16


Ahora, podemos equivocarnos más!
• Encuentra los tres errores de este código!

imprt turtle import turtle

turtle.color('green') turtle.color('green')

for s in range(4) for s in range(4):


turtle.forward(100) turtle.forward(100)
turtle.right(90) turtle.right(90)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 17


Ciclos anidados

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 18


Podemos hacer cosas entretenidas si
ponemos un ciclo dentro de otro!
import turtle

for paso in range(4):


turtle.forward(100)
turtle.right(90)

for otropaso in range(4):


turtle.forward(50)
turtle.right(90)

turtle.exitonclick()

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 19


Just for fun

import turtle

for paso in range(5):


turtle.forward(100)
turtle.right(360 / 5)

for otropaso in range(5):


turtle.forward(50)
turtle.right(360 / 5)

turtle.exitonclick()

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 20


Usando variables dentro de los
ciclos

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 21


Podemos usar una variable para decidir el
número de lados del polígono
import turtle

numLados = 6

for paso in range(numLados):


turtle.forward(100)
turtle.right(360 / numLados)

for otropaso in range(numLados):


turtle.forward(50)
turtle.right(360 / numLados)

turtle.exitonclick()
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 22
¿Cuál es la ventaja de usar una variable en
vez de escribir el número directamente?
import turtle

numLados = 6

for paso in range(numLados):


turtle.forward(100)
turtle.right(360 / numLados)

for otropaso in range(numLados):


turtle.forward(50)
turtle.right(360 / numLados)

turtle.exitonclick()
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 23
Si queremos hacer un cambio, sólo hay que
actualizar una línea de código!
import turtle

numLados = 6

for paso in range(numLados):


turtle.forward(100)
turtle.right(360 / numLados)

for otropaso in range(numLados): De esta forma, es menos


turtle.forward(50) posible que cometamos un
turtle.right(360 / numLados) error al olvidar cambiar uno
de los valores
turtle.exitonclick()
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 24
Practica cambiando el número de lados!
import turtle

numLados = 6

for paso in range(numLados):


turtle.forward(100)
turtle.right(360 / numLados)

for otropaso in range(numLados):


turtle.forward(50)
turtle.right(360 / numLados)

turtle.exitonclick()
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 25
Usando el valor del ciclo

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 26


Puedes ver el valor del ciclo dentro del ciclo
for paso in range(4):
print(paso)

Efectivamente, estos ciclos


parten contando en CERO.

Esto es bastante común al


programar… ACOSTÚMBRATE!
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 27
Si necesitas empezar a contar desde 1,
puedes especificar el valor de inicio y término
for paso in range(1, 4):
print(paso)

Ojo, que en este caso, el


ciclo solamente se ejecutó
TRES veces!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 28


También le puedes decir al ciclo que se salte
valores
for paso in range(1, 10, 2):
print(paso)

¿Qué significa ese 2?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 29


Python es tan flexible que incluso le puedes
decir qué valores quieres en el ciclo

for paso in [1, 2, 3, 4, 6]:


print(paso)

Esto requiere usar [ ] en vez


de ( ) y no se usa la palabra
“range”

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 30


Incluso, no es necesario usar siempre
números!
import turtle

for paso in [ 'red', 'blue', 'green', 'black' ]:


turtle.color(paso)
turtle.forward(100)
turtle.right(90)

turtle.exitonclick()

¿Qué crees que hace este código?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 31


Incluso se pueden mezclar un poco las cosas
import turtle

for paso in [ 'red', 'blue', 'green', 'black', 100 ]:


turtle.color(paso)
turtle.forward(100)
turtle.right(90)

turtle.exitonclick()

Asegúrate que código


puede manejar las
diferencias
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 32
El color no se puede especificar con un
número, pero print acepta strings y números

for paso in [ 'red', 'blue', 'green', 'black', 100 ]:


print(paso)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 33


¿Lo puedes lograr?
• Haz que la tortuga dibuje un octágono
• Desafío extra: pregúntale al usuario y que te diga cuántos lados va a
tener la figura, y que el programa la dibuje
• Desafío extra-extra: agrega un ciclo anidado, para que se dibuje una
versión más pequeña de sí mismo adentro del objeto grande

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 34


Felicitaciones
Ahora puedes manejar problemas que
requieran repetir la misma tarea una y otra vez
una cantidad fija de veces

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 35


Repitiendo cosas hasta que
finalizan
El ciclo while

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 1


A veces tenemos que repetir algo más de una
vez
• Servirle café a cada invitado
• Lavar los platos hasta que están todos limpios
• Hacer una tarjeta con el nombre de cada invitado a un evento

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 2


Hacer un ciclo una cantidad
desconocida de veces

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 3


El ciclo for nos permite ejecutar código una
cantidad fija de tiempo
• Si sabemos que son 20 invitados, podemos imprimir 20 tarjetas

for paso in range(20):


print(paso)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 4


¿Qué pasa si no sabemos exactamente
cuántas veces hay que repetir el ciclo?
• Lavar los platos hasta que estén todos limpios
• Seguir adivinando hasta dar con la respuesta adecuada
• Leer todos los valores en un archivo (o base de datos)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 5


El ciclo while teTienes
permite
que ejecutar código hasta
declarar la
que una condición particular
variable antes de sea True
que la puedas usar
en el ciclo
respuesta = "0"
Ejecuta el código en el
while respuesta != "4": ciclo una y otra vez
respuesta = input("¿Cuánto es 2 + 2? ") mientras la variable
“respuesta” no sea
print("Sí señor! 2 + 2 es 4") igual a 4

Solamente el código
identado participa del
ciclo. Esta línea sólo se
ejecuta una vez que se
sale del ciclo
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 6
Demostración
Ciclo while en acción

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 7


¿Puedes adivinar qué hace este código?
import turtle

contador = 0

while contador < 4: ¡SÍ!


turtle.forward(100) Dibujará un cuadrado
turtle.right(90)

contador = contador + 1

turtle.exitonclick()

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 8


Podemos usar ciclos while en vez de ciclos for
import turtle import turtle

for paso in range(4): contador = 0


turtle.forward(100)
turtle.right(90) while contador < 4:
turtle.forward(100)
turtle.exitonclick() turtle.right(90)

contador = contador + 1
Ambos códigos
turtle.exitonclick()
generan el mismo
resultado
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 9
¿Cuántas líneas dibujará este ciclo?
import turtle

contador = 0

while contador <= 4: Cuenta bien! Dibujará 5 líneas!


turtle.forward(100) No 4!
turtle.right(90)

contador = contador + 1

turtle.exitonclick()

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 10


¿Cuántas líneas dibujará este ciclo?
import turtle

contador = 1

while contador < 4: Cuenta bien! Dibujará 3 líneas!


turtle.forward(100) No 4!
turtle.right(90)

contador = contador + 1

turtle.exitonclick()

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 11


Problemas con los ciclos

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 12


¿Cuántas líneas dibujará este ciclo?
¡Pregunta capciosa!
import turtle
¡Este ciclo se ejecutará para
siempre!
contador = 0
Fíjate que el valor de contador
while contador < 3: nunca se actualiza. ¿Cómo el
turtle.forward(100) contador va a ser mayor o igual
turtle.right(90)
a 3 alguna vez?
Este es lo que se llama un ciclo
turtle.exitonclick() infinito, y a veces obtenemos
uno por error.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 13


Cómo salir de un ciclo infinito (Spyder)

Haz click en la
consola, y
presiona
CONTROL-C
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 14
Es más fácil cometer un error con un ciclo
while que con un ciclo for
• Usa ciclos for siempre que puedas
• Pero no siempre vas a poder!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 15


No le tengas miedo al ciclo while
• Hay problemas en que el ciclo while es la única solución
• Muchas veces se usan para leer datos (lee mientras existan datos para
leer)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 16


Tu desafío
• Crear un programa de dibujo
• Haz que el usuario ingrese un color de lápiz, longitud de línea y un
ángulo
• Usa la tortuga para dibujar una línea basado en las especificaciones
que indicó el usuario
• Deja que el usuario especifique nuevas líneas para dibujar, hasta que
se ingrese una longitud de línea 0 (cero)
• Cuando el usuario especifica una longitud de línea cero, detente

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 17


Felicitaciones
Ahora puedes manejar problemas que
requieran repetir la misma tarea y finalizar
cuando se cumpla una condición específica

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 18


Recordando listas
listas y listas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 19


A veces es necesario recordar listas de valores
• Hay que recordar los nombres de todos los que vendrán a una fiesta
• Quiero recordar las notas que obtuve en los ramos
• Quiero recordar las instrucciones para llegar a la casa

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 20


Múltiples valores

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 21


Las listas te permiten almacenar múltiples
valores

invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

puntajes = [ 10, 34, 78, 91 ]

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 22


Puedes crear listas vacías, y agregar valores
después

invitados = [] Esta es una lista


vacía, llamada
“invitados”
puntajes = []

Esta es una lista


vacía, llamada
“puntajes”

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 23


Puedes referenciar cualquier valor de la lista
especificando su posición
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

# Escribe el primer invitado


# El primer valor está en la posición 0
print(invitados[0])

puntajes = [ 10, 34, 78, 91 ]

# Escribe el cuarto puntaje


print(puntajes[3])

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 24


OJO
• A la posición de un elemento en la lista le llamamos ÍNDICE

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 25


Incluso puedes contar hacia atrás
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

# Escribe el último elemento de la lista


print(invitados[-1])

# Escribe el penúltimo elemento en la lista


print(invitados[-2])

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 26


Actualizando listas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 27


Puedes cambiar los valores en una lista
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

print("El primer valor es " + invitados[0])

# cambiemos el primer valor a Josefindo


invitados[0] = 'Josefindo'

print("Ahora el primer valor es " + invitados[0])

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 28


Puedes agregar nuevos valores a la lista
usando append()
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

# agregamos un nuevo valor al final de la lista


invitados.append("Diego")

print("El último valor es " + invitados[-1])

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 29


Puedes remover valores de la lista usando
remove()
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

# eliminamos a José
invitados.remove("José")

print("El primer valor es " + invitados[0])

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 30


Puedes usar el comando del para borrar un
item
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

# borramos el primer elemento de la lista


del invitados[0]

print("El primer valor es " + invitados[0])

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 31


Demostración
Creando y poblando una lista

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 32


invitados = []
continuar = "S"
¿Qué hace este código?
while continuar == "S":
nombre = input("Ingresa el nombre de un invitado: ")
invitados.append(nombre)

continuar = ""
while continuar != "S" and continuar != "N":
continuar = input("¿Deseas agregar más invitados? (S/N): ")

print("Cantidad de invitados")
print(len(invitados))

print("El primer invitado fue " + invitados[0])


print("El último invitado fue " + invitados[-1])

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 33


Encontrando valores

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 34


La función index() busca dentro de la lista y
retorna el índice de la posición donde se encontró
el valor
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

# esto va a escribir el índice en la lista


# donde se encuentra el nombre Francisca

print(invitados.index("Francisca"))

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 35


¿Y qué pasa si el elemento que buscamos no
está en la lista?
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

# esto va a escribir el índice en la lista


# donde se encuentra el nombre Francisca

print(invitados.index("Francisco"))

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 36


¿Cómo lo podemos corregir?
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

# esto va a escribir el índice en la lista


# donde se encuentra el nombre Francisca
if "Francisco" in invitados:
print(invitados.index("Francisco"))
else:
print("Francisco no está en la lista")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 37


Demostración
Buscando en una lista

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 38


¿Qué hace este código?
invitados = ["Juan", "Miguel", "María", "Ximena"]

nombre = ""
while nombre != "FIN":
nombre = input("Ingrese un nombre (escriba FIN para salir): ")
if nombre != "FIN":
if nombre in invitados:
print(nombre + " fue invitado a la fiesta")
else:
print(nombre + " no fue invitado")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 39


Mostrando valores

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 40


Usemos un ciclo!
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia' ]

# creemos un ciclo que se ejecute cuatro veces,


# ya que tenemos cuatro valores

for i in range(4):
# recuerda que el valor de "i" va aumentado en 1
# a medida que el ciclo se ejecuta
print(invitados[i])

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 41


¿Qué pasa cuando no sé cuántos
elementos hay en la lista?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 42


Usa len() para saber cuántos elementos hay
en la lista
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia', "Pedro" ]

print(len(invitados))

invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia', "Pedro" ]

num = len(invitados)
print(num)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 43


Usa len() para saber cuántos elementos hay
en la lista
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia', "Pedro" ]

# Obtenemos la cantidad de elementos en la lista


num = len(invitados)

# Creamos un ciclo que se ejecute una vez por cada elemento


for i in range(num):
print(invitados[i])

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 44


Hay una forma AUN más fácil

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 45


Le puedes decir al ciclo for que se vaya por la
lista
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia', "Pedro" ]

# creamos un ciclo especificando el nombre de la variable


# que mantendrá cada elemento mientras el ciclo va por
# la lista
for invitado in invitados:
# la variable contendrá el valor!
print(invitado)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 46


¿Quieres ordenar tu lista?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 47


Puedes ordenarla usando la función sort()
invitados = [ 'José', 'Miguel', 'Francisca', 'Ignacia', "Pedro" ]

# Ordenamos los nombres en forma alfabética


invitados.sort()

for invitado in invitados:


print(invitado)

Recuerda que acá no te estamos


enseñando TODO!
Busca en internet cómo se puede
ordenar de otras formas, por ejemplo,
31/03/2021 en orden inverso Profesor: Juan Alfredo Gallardo Verdugo 48
Tu desafío… de a poco se pone más
difícil
• Pregúntale al usuario los nombres de todos los asistentes a una fiesta
• Después, escribe en la pantalla la lista de asistentes, ordenada
alfabéticamente
• Esto requerirá poner junto todo lo que se ha revisado hasta ahora

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 49


Dividamos el problema en pasos
1. Pregunta los nombres de los asistentes
2. Pone esos valores en una lista
3. Ordena la lista
4. Escribe la lista en la pantalla

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 50


1. Pregunta los nombres de los
asistentes
• ¿Qué comando usamos para preguntarle un valor al usuario?
• La función input
• ¿Qué tipo de variable necesitamos para almacenar TODOS los
nombres?
• Una lista
• ¿Cómo le preguntamos al usuario más de un nombre?
• Usamos un ciclo
• ¿Cómo evitamos ingresar nombres duplicados?
• Preguntamos si el nombre ya está en la lista antes de agregarlo

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 51


¿Debemos usar un ciclo for o un ciclo
while?
• ¿Sabes cuántos nombres ingresará el usuario?
• No. Esto significa que no sabemos cuántas veces hay que ejecutar el ciclo, por
lo que no podemos usar un ciclo for, así que se debe usar un ciclo while
• ¿Cómo sabrá el ciclo cuándo detener su ejecución?
• Podemos hacer que el usuario ingrese una palabra especial cuando termine
de hacer el ingreso (y recordar informarle de eso al usuario)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 52


2. Pone esos valores en una lista
• Crea una lista vacía
• Cada vez que el usuario ingresa un nombre nuevo, agrégalo a la lista
• Pero antes, pregunta si el nombre realmente no está en la lista

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 53


3. Ordena la lista
• Una vez que todos los valores están en la lista, usa la función sort()
para ordenar la lista alfabéticamente.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 54


4. Escribe la lista en la pantalla
• Usa un ciclo for para recorrer todos los valores en la lista
• Para cada valor, escríbelo en la pantalla

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 55


• Ya puedes recordar listas con diferentes valores
• Puedes buscar en la lista un valor específico
• Puedes ordenar la lista
• Puedes leer a través de todos los valores de la
lista
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 56
Desafío para la casa
• Usted debe realizar el ejercicio planteado en el documento
“Aerolínea” que se subirá a la plataforma.
• Una vez terminado debe subirlo a la plataforma educa en el trabajo
designado para ello.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 57


Y siguen las listas
Listas de listas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 1


Hasta ahora, tenemos listas así
unaLista = [ 10, 20, 30, 40 ] Así las escribimos en Python

10 20 30 40 Así las imaginamos

Y matemáticamente son
10 20 30 40 matrices de una dimensión

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 2


Compliquémonos la vida
Matrices (o sea, dos dimensiones)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 3


Sabemos hacer esto
lista = [ 10, 200, 30 ]

print(lista)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 4


También sabemos hacer esto
lista = [ 10, 200, 30 ]

print(lista)

lista[2] = -2

print(lista)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 5


Reemplazamos el
¿Qué hace este código? tercer elemento de la
lista, y en su lugar
lista = [ 10, 200, 30 ] pusimos…

print(lista) ¡OTRA lista!

lista[2] = [1,2,3]

print(lista) Fíjate en la cantidad


de corchetes “[]”

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 6


¿Qué hace este código?
Fíjate en la cantidad
lista = [ 10, 200, 30 ]
de corchetes “[]”
print(lista)
¡No te pierdas!
lista[0] = [0,1,2]
lista[1] = [3,4,5]
lista[2] = [6,7,8]

print(lista)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 7


¿Podemos escribir esto de una forma mejor?
lista = [ [0, 1, 2], [3, 4, 5], [6, 7, 8] ]

print(lista)
Básicamente, estamos
creando una lista de
listas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 8


Talvez te resulte más cómodo escribirlo así
lista = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8]
]

print(lista)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 9


Para obtener un elemento individual, usamos
el índice
lista = [ 10, 200, 30 ]
print(lista[2])

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 10


¿Y en este caso?
lista = [ [0, 1, 2], [3, 4, 5], [6, 7, 8] ]

print(lista[1])

Tal como
esperábamos, el
segundo elemento de
la lista, es una lista

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 11


¿Y podré acceder a los elementos de esa
lista?
lista = [ [0, 1, 2], [3, 4, 5], [6, 7, 8] ]

print(lista[1][2])

En este caso, el
elemento ya no es
una lista, sino que un
número entero

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 12


Usando matrices en el mundo real

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 13


Rotación
• ¿Cómo calcular las coordenadas finales de un vector, después de
rotarlo un ángulo θ?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 14


Forma matricial
𝑽′ = 𝑹 𝑽

• V: El vector original
• R: La matriz de rotación
• V’: El vector final (la posición final, después de rotar el vector V)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 15


¿Qué es R?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 16


La forma matricial es

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 17


Veamos algo de código
Las funciones
import math matemáticas están
guardadas en esta
x = float(input("Ingrese x: ")) “biblioteca”
y = float(input("Ingrese y: "))
T = float(input("Ingrese T: "))

# Construyamos la matriz de rotación


R = [ [ math.cos(T), -math.sin(T) ], [ math.sin(T), math.cos(T) ] ]

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 18


¿Biblioteca?
• Es un conjunto de funciones listas para usar
• Permiten realizar tareas frecuentes, o hacernos la vida más fácil
• Así nos evitamos tener que escribir todo
• Por ejemplo, calcular el coseno de un ángulo
• Hasta ahora, hemos usado dos bibliotecas
• turtle
• math

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 19


Más código (vector V)
import math

x = float(input("Ingrese x: "))
y = float(input("Ingrese y: "))
T = float(input("Ingrese T: "))

# Construyamos la matriz de rotación


R = [ [ math.cos(T), -math.sin(T) ], [ math.sin(T), math.cos(T) ] ]

# Ahora, el vector de posición


V = [ x, y ]

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 20


Calculemos V’
import math

x = float(input("Ingrese x: "))
y = float(input("Ingrese y: "))
T = float(input("Ingrese T: "))

R = [ [ math.cos(T), -math.sin(T) ], [ math.sin(T), math.cos(T) ] ]


V = [ x, y ]

# Ahora, el vector rotado


V2 = [R[0][0] * V[0] + R[0][1] * V[1], R[1][0] * V[0] + R[1][1] * V[1]]

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 21


¡Probemos!
import math Si el vector (10,10) lo
roto 45 grados, ¿qué
x = float(input("Ingrese x: ")) valores debería
y = float(input("Ingrese y: ")) obtener?
T = float(input("Ingrese T: "))

R = [ [ math.cos(T), -math.sin(T) ], [ math.sin(T), math.cos(T) ] ]


V = [ x, y ]
V2 = [ R[0][0]*V[0] + R[0][1]*V[1], R[1][0]*V[0] + R[1][1]*V[1] ]

print(V2)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 22


¿Dónde está el error?
• Si hubieras revisado la página con la documentación
• https://docs.python.org/3.5/library/math.html
• Hubieras leído:

Ambas funciones
esperan que el valor
venga en radianes (y
no en grados)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 23


¿Cómo lo puedes arreglar?
Una opción es decirle
import math al usuario que ingrese
los ángulos en
x = float(input("Ingrese x: ")) radianes
y = float(input("Ingrese y: "))
T
T =
= float(input("Ingrese
float(input("Ingrese T: "))radianes): "))
T (en

R = [ [ math.cos(T), -math.sin(T) ], [ math.sin(T), math.cos(T) ] ]


V = [ x, y ]
V2 = [ R[0][0]*V[0] + R[0][1]*V[1], R[1][0]*V[0] + R[1][1]*V[1] ]

print(V2)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 24


¿Y si hacemos algo mejor?
import math

x = float(input("Ingrese x: ")) ¿Qué podemos hacer


y = float(input("Ingrese y: ")) para convertir de
Tg = float(input("Ingrese T (en grados): ")) grados a radianes?

........
Tr = math.radians(Tg)

R = [ [ math.cos(Tr), -math.sin(Tr) ], [ math.sin(Tr), math.cos(Tr) ] ]


V = [ x, y ]
V2 = [ R[0][0]*V[0] + R[0][1]*V[1], R[1][0]*V[0] + R[1][1]*V[1] ]

print(V2)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 25
Desafío rápido
• A partir del ejemplo anterior, modifica lo siguiente
• Cuando el usuario ingrese las coordenadas x,y del vector, indícale el
cuadrante del vector
• Una vez calculado el vector rotado, indícale al usuario en qué
cuadrante quedó el vector
• Para este ejemplo, considera que si la posición queda justo sobre
alguno de los ejes, debes escribir “eje X positivo”, “eje X negativo”,
“eje Y positivo”, o “eje Y negativo”

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 26


Usando matrices

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 27


Simplifiquemos la rotación
import math
import numpy as np

x = float(input("Ingrese x: ")) ¡Vamos a usar otra


y = float(input("Ingrese y: ")) biblioteca!
Tg = float(input("Ingrese T: "))

Tr = math.radians(Tg)

R = [ [ math.cos(Tr), -math.sin(Tr)
Esto significa: ], [ math.sin(Tr), math.cos(Tr)
V = [ x, y ] “numpy, multiplica la
V2
V2 = [ R[0][0]*V[0]
= np.dot(R, + R[0][1]*V[1],
V) matriz R con la matriz R[1][0]*V[0] + R[1][1]*V[1] ]
V”
print(V2)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 28
Matrices en el mundo real
Una empresa local

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 29


Una empresa local
• Tú y un compañero van a vender sándwiches durante la hora de
almuerzo
• Tienen planeado vender 3 tipos:
• S1: Pan, mermelada, mantequilla
• S2: Pan, jamón, queso
• S3: Pan, queso, tomate
• Cada día, tienen planeado vender cierta cantidad:

4 5 3 Tú
A=
3 3 6 Compañero

2
31/03/2021 1 Juan Alfredo 3Gallardo Verdugo
Profesor: 30
Una empresa local (cont)
• Cada tipo sándwich se hace mezclando los ingredientes
• La matriz B muestra lo que se necesita para hacer cada sándwich
• Número de piezas de pan (P)
• Cucharadas de mermelada (M), mantequilla (A)
• Rebanadas de jamón (J), queso (Q) y tomate (T)

2 4 4 0 0 0 1
B= 2 0 0 3 2 0 2
2 0 0 0 4 2 3
P MA J Q T

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 31


Una empresa local (cont)
• Para determinar la cantidad de cada tipo de ingrediente que tú y tu
compañero necesitan, basta realizar la siguiente operación:

𝑪=𝑨·𝑩

• ¿De qué tamaño es esa matriz?


• A es de 2x3
• B es de 3x6 24 16 16 15 22 6 Tú
• C será de? C=
24 12 12 9 30 12 Compañero

P M A J Q T

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 32


Realicemos la multiplicación
import numpy as np

A = [
[4, 5, 3],
[3, 3, 6]
]

B = [
[2, 4, 4, 0, 0, 0],
[2, 0, 0, 3, 2, 0],
[2, 0, 0, 0, 4, 2]
]

C = np.dot(A, B)
print(C)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 33
Mejoremos el mensaje de salida
import numpy as np

A = [ [4, 5, 3], [3, 3, 6] ]


B = [ [2, 4, 4, 0, 0, 0], [2, 0, 0, 3, 2, 0], [2, 0, 0, 0, 4, 2] ]

C = np.dot(A, B)

ingredientes = [ "P", "M", "A", "J", "Q", "T" ]


nombres = [ "TU", "COMPA" ]

for n in range(2):
print(nombres[n] + ": ")
for i in range(6):
print(" " + ingredientes[i] + ": " + str(C[n][i]))
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 34
Desafío corto
• Modifica el ejemplo anterior, de forma que el usuario pueda ingresar
desde el teclado la cantidad de sándwiches que tú y tu compañero
quieren vender
• Recuerda que son 3 los tipos de sándwich

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 35


Más usos de las matrices

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 36


Otros usos de las matrices
• Además de simplemente multiplicarlas, las matrices tienen otros usos
• Un sistema de m ecuaciones lineales con n incógnitas se puede
escribir así:

• X son las incógnitas, A son los coeficientes, y B son los términos


constantes
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 37
Sistema de ecuaciones matricial
• El sistema anterior es equivalente a la ecuación matricial:
𝐴·𝑥 =𝑏

• Donde

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 38


Resolviendo sistemas de
ecuaciones con Python y Numpy

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 39


Resolviendo sistemas de ecuaciones
• Resolvamos el sistema de ecuaciones:

3*x0 + x1 = 9
x0 + 2*x1 = 8

A = [ [3, 1], [1, 2] ]


B = [ 9, 8 ]

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 40


¡Que Python trabaje!
import numpy as np
Este es el vector
a = [ [3, 1], [1, 2]] solución (o sea, los
b = [ 9, 8 ] valores de x0 y x1)

x = np.linalg.solve(a, b)
print(x)

Además de multiplicar
matrices, con numpy
podemos resolver
sistemas de
ecuaciones
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 41
Comprobemos si es correcto
import numpy as np

a = [ [3, 1], [1, 2]]


b = [ 9, 8 ]

x = np.linalg.solve(a, b)
print(x)

# Si multiplicamos X con A, debemos obtener B


z = np.dot(a, x)
print(z)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 42


Felicitaciones
Ahora puedes resolver sistemas de ecuaciones
para solucionar problemas de ingeniería

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 43


Desafío
• Una placa metálica está sujeta a diferentes temperaturas en sus 4
lados:
20

25
20

30

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 44


Desafío (cont)
• Se desea calcular la temperatura al interior de la placa, una vez que se
ha alcanzado el equilibrio térmico
• Para hacer esto, se usará una propiedad física llamada la Propiedad
del Valor Medio:
• Si la placa ha alcanzado el equilibrio término y P es un punto en una grilla
sobre la placa, la temperatura de P es el promedio de la temperatura de los 4
puntos más cercanos a P

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 45


Desafío (cont)
• Aplicando la Propiedad del Valor
Medio
20
20 + 25 + 𝑥2 + 𝑥3
X1 X2 𝑥1 =
4
25 20 20 + 20 + 𝑥1 + 𝑥4
X3 X4 𝑥2 =
4
25 + 30 + 𝑥1 + 𝑥4
𝑥3 =
4
30 20 + 30 + 𝑥2 + 𝑥3
𝑥4 =
4
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 46
Desafío (cont)
• Resuelve el problema usando numpy, e indica la temperatura en los
cuatro puntos interiores de la placa
• Modifica tu programa para que el usuario pueda ingresar la
temperatura de los cuatro bordes de la placa, e incrementa la
cantidad de puntos en la grilla de 4 a 9.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 47


Desafío para la casa
• Análisis en estado estacionario de un sistema de reactores
• Revisa el documento que se subirá a Educa
• Debe entregar el informe y subir la solución a Educa antes de la
próxima clase

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 48


Recapitulando

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 1


Contando cosas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 2


Contando cosas
• Imagina que YA tienes una lista con elementos
• Y quieres saber cuántos elementos hay en la lista (y que cumplen
cierta condición)
• Por ejemplo, que sean mayores que 30

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 3


¿Qué tienes que hacer?
• En general, trata siempre de dividir los problemas en 3 partes:

• Leer los datos


• Procesar los datos
• Escribir el resultado

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 4


Paso1: Leer los datos
• En este caso, que los datos ya están

lista = [ 30, 12, 4, 99, 33 ]

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 5


Paso2: Procesar los datos
• En este caso, “procesar” significa que hay que hacer algo que permita
discriminar los números que son mayores de 30
• ¡Esto incluye que hay que “visitar” todos los números!
• Pero, ¿qué haces cuando detectas un número que cumpla la
condición?
• ¡Lo cuentas! (imagina que haces marcas en una libreta)
• ¿Y si encuentras un número que no cumple la condición?
• Haces “nada”: simplemente continúa con el siguiente número de la lista
• Ojo, que hay veces en que si el elemento no cumple la condición,
igual hay que realizar acciones!
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 6
Paso3: Escribir el resultado
• En este caso, debes informarle al usuario la cantidad de elementos
que cumplen la condición

print(...algo...)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 7


Contando

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 8


Visitando la lista
Estás visitando todos los
# -*- coding: utf-8 -*- elementos de la lista, uno por
uno.
lista = [ 30, 12, 4, 99, 33 ]
¿Qué tienes que hacer para ver si
# ¿Cómo visito todos los elementos de laellista?
elemento que estás visitando
# Forma1: cumple la condición?
n = len(lista)
for i in range(n):
print(lista[i])

print("...algo...")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 9


Discriminando elementos
# -*- coding: utf-8 -*- Solamente estás
imprimiendo por
lista = [ 30, 12, 4, 99, 33 ] pantalla los que
cumplen la condición
# ¿Cómo visito todos los elementos de la lista?
# Forma1:
n = len(lista)
for i in range(n):
if lista[i] > 30:
print(lista[i])

print("...algo...")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 10


Falta poco
• Recuerda que el problema # -*- coding: utf-8 -*-
original no era escribir los
elementos mayores que 30 lista = [ 30, 12, 4, 99, 33 ]
• Lo que se pide es escribir la
n = len(lista)
CANTIDAD de elementos mayores
for i in range(n):
de 30 if lista[i] > 30:
• ¿Qué se necesita? print(lista[i])

print("...algo...")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 11


Casi casi..
# -*- coding: utf-8 -*-

lista = [ 30, 12, 4, 99, 33 ]


contador = 0

# ¿Cómo visito todos los elementos de la lista?


# Forma1:
n = len(lista)
for i in range(n):
if lista[i] > 30:
print(lista[i])
contador = contador + 1

print(contador)
print("...algo...")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 12


Esto se llama un contador
• Inicializar una variable con valor 0
• Revisar un conjunto de datos
• Determinar si el elemento analizado cumple la condición
• Si es que la cumple, incrementar la variable en 1
• Al terminar el ciclo, usar el valor de la variable

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 13


También lo puedes escribir más resumido
# -*- coding: utf-8 -*- Veamos cómo cambian de valor
las variables

lista = [ 30, 12, 4, 99, 33 ] contador x

contador = 0

for x in lista:
if x > 30:
contador = contador + 1 Escribe acá el valor de
cada variable, a
print(contador) medida que vas
“ejecutando” el
código en tu cabeza
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 14
¿Para qué sirve la línea “coding”?
# -*- coding: utf-8 -*-

• Con esta línea le decimos a Python que el código que estamos


escribiendo puede tener acentos y letras típicas del idioma español
• Si no la incluimos, es probable que considere a las “ñ”, acentos y
demases como letras no válidas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 15


Acumulando valores

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 16


Acumulando valores
• Imagina que tienes una lista de valores
• Ahora, en vez de saber cuántos son, quieres el valor final al sumar
dichos elementos

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 17


Dividamos el problema
• Como siempre

• Leer los datos


• Procesar los datos
• Escribir el resultado

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 18


Parte1: Obtener los datos
• En este caso, ya tienes los datos

lista = [ 30, 12, 4, 99, 33 ]

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 19


Parte2: Procesar los datos
• ¿Qué significa procesar los datos en este caso?
• De alguna forma tendrás que “visitar” cada elemento
• Recuerda que el problema es saber la suma total de todos los
elementos
• O sea, la suma “acumulada”

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 20


Parte3: Informar al usuario
• En este punto, basta un print para que el usuario sepa la suma total

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 21


Acumulando

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 22


Ya sabes cómo visitar todos los elementos
# -*- coding: utf-8 -*-

lista = [ 30, 12, 4, 99, 33 ]

for x in lista:
print(x)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 23


Y sabes que “algo” hay que informar al
usuario
# -*- coding: utf-8 -*-

lista = [ 30, 12, 4, 99, 33 ]


¿Qué vas a hacer con
for x in lista:
el X?
print(x)

print("algo")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 24


Casi casi
# -*- coding: utf-8 -*-
30+12+4+99+33 = 178
lista = [ 30, 12, 4, 99, 33 ]
???
suma = 0

for x in lista:
print(x)
suma = suma + 1

print("algo")
print(suma)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 25


Veamos cómo cambian de valor
las variables

¿Ahora si? suma x

En vez de acumular 1 en cada


# -*- coding: utf-8 -*-
iteración del for, acumulamos
el valor de X
lista = [ 30, 12, 4, 99, 33 ]
suma = 0

for x in lista:
suma = suma + x

print(suma)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 26


Una cosa poca
• ¿Sabes lo que es el promedio?
• Es simplemente la suma de los valores, dividido por la cantidad de
valores
• Por ejemplo: Goles marcados por partido
• Partido1: 3
• Partido2: 2
• Partido3: 5
• Promedio: 3.3
• Modifica el ejemplo anterior para que muestre la cantidad, la suma y
el promedio de los elementos de la lista

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 27


Una cosa mediana
• La varianza de una secuencia de números es

• es el promedio de los valores de la secuencia

• Calcula y muestra la varianza de la lista, además de la cantidad, suma


y promedio de los elementos
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 28
Un desafío mejor
• Hasta ahora, el ejemplo siempre venía con datos fijos, estáticos
• Modifica lo que tienes hasta ahora para que la lista de elementos se
pueda ingresar desde el teclado
• Hazlo de la siguiente forma:
• Primero pregúntale al usuario la cantidad de elementos que quiere
escribir (llamemos n a este número)
• Después, pregúntale al usuario que n veces ingrese un número. Cada
vez que el usuario ingrese un número, guárdalo en la lista.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 29


Usando listas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 30


Hasta ahora..
• La mayoría de los problemas ha usado una cantidad “conocida” de
datos
• O sea, la lista de elementos se conocía
• (El desafío de la sesión pasada fue uno de los primeros problemas
donde no se conocía a priori el tamaño de la lista)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 31


En el mundo real…
• Generalmente, no sabrás con cuántos datos vas a trabajar
• Pero de igual forma, el algoritmo que escribas debe funcionar
• Esto significa que todo programa que construyas debería poder
funcionar con
• 1 dato
• 2 datos
• 34 datos
• 43411 datos
• etc

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 32


Un ejemplo
• Imagina que tienes una carpeta llena de datos de las temperaturas en
distintas ciudades del país
• Y tu jefe te pide que le digas cuál es la ciudad que tiene más
mediciones
• (En este caso, a tu jefe no le importa la fecha de las mediciones, ni la
temperatura medida. Simplemente quiere saber la ciudad que tiene
más temperaturas tomadas)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 33


Tratemos de resolverlo
• Se puede crear un programa que te permita ingresar los datos que
están en las carpetas y que finalmente te diga la ciudad con más
mediciones
• Obviamente, esto lo puedes hacer usando una hoja de papel y un
lápiz, pero continuemos, hasta llegar a hacer cosas que no se pueden
hacer con papel y lápiz

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 34


Divide el problema
• Leer los datos
• Procesarlos
• Entregar el resultado

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 35


Paso1: Leer los datos
• En este caso, ¿qué tienes que hacer?
• Pregúntale al usuario los nombres de las ciudades
• Cada vez que saques una hoja de la carpeta, le dices al programa el
nombre de la ciudad
• ¿Hasta cuándo?
• Indícale una palabra clave que tiene que ingresar para detener el ciclo
de lectura, cuando se hayan acabado las ciudades de la carpeta
• Y, ¿qué haces con cada ciudad leída?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 36


Paso2: Procesar
• Esta es la parte interesante
• Una vez que el usuario ha ingresado una ciudad, ¿qué vas a hacer?
• Recuerda que el objetivo es determinar la ciudad que tiene más
mediciones
• O sea, de alguna forma, cada vez que el usuario ingresa una ciudad,
hay que sumarle 1, pero a ESA ciudad (imagina que haces una marca
en una libreta)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 37


Paso2: Para pensar
• Recuerda el concepto de contador
• Hasta ahora teníamos UN contador general
• Pero en este problema, fíjate que un solo contador general no nos
sirve
• Necesitamos algo equivalente, pero que nos permita contar la
cantidad de veces que cada ciudad ha sido “nombrada” por el usuario

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 38


Paso2: Propuesta
• Vamos por parte
• Crea una lista
• Cada vez que el usuario ingrese una ciudad, revisa si la ciudad está en
la lista
• Si es que no está, agrégala al final
• Si es que está, no hagas nada

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 39


Solamente se agrega el
Propuesta inicial nombre de la ciudad si es que
no está en la lista.

# -*- coding: utf-8 -*- Prueba “ejecutando” el


programa ingresando las
ciudades = [] ciudades OVALLE,
COQUIMBO, OVALLE,
nombre = input("Ingresa ciudad (FIN para terminar):
LASERENA,") COQUIMBO
while nombre != "FIN":
if not nombre in ciudades:
ciudades.append(nombre)
nombre = input("Ingresa ciudad (FIN para terminar): ")

print(len(ciudades))

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 40


¿Qué falta?
• Hasta ahora solamente tienes los nombres de las ciudades
• Pero no estás contando la cantidad de veces que una ciudad ha sido
nombrada
• ¿Qué falta?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 41


¿Qué tienes?
• Una lista con los nombres de las ciudades

ciudades

• ¿Y dónde vas a guardar la cantidad de veces que cada ciudad fue


nombrada?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 42


Propuesta
ciudades

contador

• Crea una nueva lista


• Esta lista funcionará en conjunto con la lista de ciudades
• Si la ciudad XYZ está en la posición Q de la lista de ciudades, entonces,
en la posición Q en la lista de contadores estará la cantidad de veces
que la ciudad XYZ ha sido nombrada

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 43


# -*- coding: utf-8 -*-

Lo que tienes hasta ahora


ciudades = []
contadores = []

nombre = input("Ingresa ciudad (FIN para terminar): ")


while nombre != "FIN":
if not nombre in ciudades:
ciudades.append(nombre) Si la ciudad ya estaba en la
contadores.append(0) lista, aumenta SU contador
else:
pos = ciudades.index(nombre)
contadores[pos] = contadores[pos] + 1

nombre = input("Ingresa ciudad (FIN para terminar): ")

print(ciudades)
print(contadores)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 44
¿Funciona?
A es nombrada 4 veces, y B 2
veces, pero el print no dice lo
mismo

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 45


# -*- coding: utf-8 -*-

Corrigiendo
ciudades = []
contadores = []

nombre = input("Ingresa ciudad (FIN para terminar): ")


while nombre != "FIN":
if not nombre in ciudades:
ciudades.append(nombre) ¿Por qué?
contadores.append(0)
contadores.append(1)
else:
pos = ciudades.index(nombre)
contadores[pos] = contadores[pos] + 1

nombre = input("Ingresa ciudad (FIN para terminar): ")

print(ciudades)
print(contadores)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 46
Versión corregida

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 47


¿Y cuál era el problema inicial?
• Aun no solucionas el problema
• Recuerda que tu jefe no te pidió la lista de ciudades
• ¡Tu jefe te pidió el nombre de la ciudad con más mediciones!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 48


¿Qué tienes?
• Tienes una lista con el nombre de las ciudades que estaban en la
carpeta
• Tienes otra lista, con la cantidad de mediciones de temperatura de
cada ciudad
• ¿Cómo puedes saber cuál es la ciudad que tuvo más mediciones?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 49


Buscando el número mayor

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 50


Buscando el número mayor
• Imagina que tienes una lista de números
• Y quieres saber cuál es el número mayor de dicha lista
• ¿Cómo lo harías en el mundo real?

23 12 7 33 6

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 51


Algoritmo propuesto
1. Como estás buscando el número mayor, escribe un número muy
muy bajo en tu libreta
2. Fíjate en el primer número de la lista
3. Revisa si el número es mayor que el número que tienes en la libreta
4. Si es que es mayor, borra el número en la libreta, y escribe en su
lugar el número que estás revisando
5. Muévete al siguiente número de la lista, y vuelve al punto 3.
6. Si es que ya no quedan números en la lista, mira el número que
tienes anotado en la libreta: ¡es el número mayor!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 52


Algoritmo en código
lista = [23, 12, 7, 33, 6]
libreta = -9999
mayor = -9999

for x in lista:
if x > mayor:
libreta:
libreta
mayor = =x x

print(libreta)
print(mayor)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 53


¿Y si quieres encontrar el menor?
• ¡Encuentra las diferencias!
lista = [23, 12, 7, 33, 6]
menor = 9999

for x in lista:
if x < menor:
menor = x

print(menor)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 54


Otra versión para buscar el mayor
lista = [23, 12, 7, 33, 6]
n = len(lista)

mayor = -9999

for i in range(n): En este caso, se referencia a


if lista[i] > mayor: cada elemento de la lista por
mayor = lista[i] su índice

print(mayor)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 55


# -*- coding: utf-8 -*-
# Completa el problema!
Desafío
ciudades = []
contadores = []

• Completa
nombre el problemaciudad
= input("Ingresa inicial (FIN para terminar): ")
while• Después
nombre != "FIN":ingresado las ciudades, busca la que tiene más
de haber
ifmediciones
not nombredein ciudades: e informa al usuario.
temperatura,
ciudades.append(nombre)
contadores.append(0)
else:
pos = ciudades.index(nombre)
contadores[pos] = contadores[pos] + 1

nombre = input("Ingresa ciudad (FIN para terminar): ")

print(ciudades)
print(contadores)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 56
Desafío 2
• Al ver lo bien que trabajaste el problema anterior, tu jefe ahora
cambió de opinión
• Ahora quiere que le muestres el listado de ciudades con la
temperatura máxima registrada en esa ciudad
• Considera lo siguiente:
• Ahora vas a tener que ingresar dos valores: el nombre de la ciudad, y la
temperatura
• Por ahora, tu jefe solamente quiere la temperatura máxima, así que ¡puedes
reusar la lista para guardar la temperatura máxima!
• Obviamente, cámbiale el nombre a la variable (en vez de “contador”)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 57


Desafío Extra
• Tu jefe no se decide nunca
• Ahora quiere que a partir de los datos, le entregues una lista que diga
• El nombre de la ciudad
• La cantidad de temperaturas registradas para esa ciudad
• El promedio de las temperaturas de la ciudad
• La varianza de los valores de temperatura de la ciudad
• La temperatura menor y la temperatura mayor de la ciudad
• Además, quiere que EXPLÍCITAMENTE le digas el nombre de la ciudad con
menor y la ciudad con mayor PROMEDIO de temperatura
• Considera que cuando tienes una lista, los elementos que puedes
meter dentro de esa lista, ¡son otras listas!
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 58
Desafío para la casa
• Accidentabilidad en la empresa minera UCN-DRILLING
• Revisa el documento que se subirá a Educa
• Debe subir la solución a Educa antes de la próxima clase

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 59


Más problemas
Problemas cada vez más reales

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 1


Recordemos el problema anterior
• Imagina que YA tienes una lista con elementos
• Y quieres saber cuántos elementos hay en la lista (y que cumplen
cierta condición)
• Por ejemplo, que sean mayores que 30

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 2


Recordemos un problema anterior
ciudades

contador

• A veces vas a necesitar almacenar datos, pero organizando las listas


de una forma especial:
• El dato en la posición X de una lista corresponde al dato en la otra
lista, en la misma posición X

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 3


¿Qué te parece este problema?
• Tú y tus amigos son fanáticos de los viajes
• Han visitado muchos países, en diferentes años
• ¿Puedes crear un programa donde uno de tus amigos pueda ingresar
todos los países y los años de las visitas, y te diga cuál es el país
favorito? (o sea, el más visitado)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 4


Analiza el problema
• Necesitas preguntar el nombre de los países
• ¿Qué debes hacer con el nombre de cada país?
• Una propuesta:

países

contador

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 5


Dividir para conquistar
1. Primero, pregunta el nombre de tu amigo
2. Crea un ciclo que le pregunte al usuario el país y el año en que lo
visitó
3. ¿Qué tienes que hacer con el país ingresado?
1. Búscalo en la lista de países
2. Si el país no está en la lista, agrégalo al final, y en la lista de contadores,
agrega también un 1 para indicar que se ha visitado el país UNA vez
3. Si es que está en la lista, tienes que incrementar el contador de visitas del
país
4. Al terminar el ciclo de lectura busca el contador mayor, y escribe
todos los países que fueron visitados esa cantidad de veces (OJO, tal
como en el ejemplo, puede que haya más de un país que sea el
favorito)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 6
Desafío
• ¡Escribe el programa!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 7


Precaución
• A veces sucede que para que el programa funcione, NO es necesario
usar todos los datos que nos entregan (por ejemplo, el año de la visita
en el caso anterior)
• Tienes que analizar bien el problema para determinar si algún dato es
innecesario para el correcto funcionamiento del programa

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 8


Cómo una palabra puede cambiar
un problema

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 9


Alcance del problema
• El problema anterior era bien definido en términos de qué se tenía
que lograr
• Pero a veces pasa que cambiar una sola palabra del enunciado
cambia el sentido de lo que tienes que hacer

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 10


¿Qué te parece este problema?
• Tú y tus amigos son fanáticos de los viajes
• Han visitado muchos países, en diferentes años
• ¿Puedes crear un programa donde uno de tus amigos puedan
ingresar todos los países y los años de las visitas, y te diga cuál es el
país favorito? (o sea, el más visitado)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 11


Desafío
• ¡Escribe el programa!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 12


Cómo una palabra puede seguir
cambiando un problema

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 13


¿Qué te parece este problema?
• Tú y tus amigos son fanáticos de los viajes
• Han visitado muchos países, en diferentes años
• ¿Puedes crear un programa donde tus amigos puedan ingresar todos
los países y los años de las visitas, y te diga cuál es el país favorito (o
sea, el más visitado) y quienes de tus amigos lo visitaron?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 14


Consideraciones
• Fíjate que en este caso, ya no te sirve solamente almacenar el país o
el nombre de tu amigo
• De alguna forma DEBES almacenar ambos datos (para después
poder recordarlos e informar el resultado final)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 15


Propuesta
países

nombres

En la intersección se
almacenará el dato
que corresponde al
nombre y país

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 16


¿Cómo se hace eso en Python?
• Ya sabes que cuando se tienen una lista, una de las cosas que se
puede poner dentro de la lista es otra lista:

lista = [ [1,2,3], [4,5,6] ]

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 17


Imagínatelo así

lista = [ , ]

[4,5,6]
[1,2,3]
• Parece una matriz de 3 filas y 2 columnas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 18


¿Cómo funcionaría en el problema?
# una lista inicialmente vacía
paises = [ ]

nombres = [ ] países

nombres

Una lista de
listas donde
almacenarás los
datos
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 19
¿Qué debes hacer cuando lees un país?

países
Debes descubrir si el
país ya está en la lista.

nombres
Si es que ya está, no
hagas nada.

Si es que no está,
agrégalo al final.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 20


Pero, ¿qué pasa con la matriz?
países
nombres

Antes de comenzar a
leer, vamos a crear
suficiente espacio
para almacenar todos
los datos que
necesitemos

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 21


Algo equivalente pasa con los nombres
países

nombres

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 22


Paso a paso
El ejemplo anterior

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 23


Un ejemplo
• Comienza con las listas de países y nombres vacías, y la matriz de
contadores suficientemente grande para almacenar todos los datos.
Esta matriz está llena de ceros.
países
nombres

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 24
Un ejemplo (cont) ¿Existe Francia?

• El programa lee Miguel, Francia, 2010 No, así que lo


agregas al final de
¿Existe Miguel? la lista
países
No, así que lo
F
agregas al final
Miguel visitó
de la lista
nombres

M 0
1 0 0 0 0 0 Francia, así que
0 0 0 0 0 0 corresponde dejar
(La lista está
registrado el
actualmente 0 0 0 0 0 0
hecho
vacía, así que al
0 0 0 0 0 0
agregarlo al final,
queda en primer 0 0 0 0 0 0
lugar)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 25
Un ejemplo (cont) ¿Existe China?

• El programa lee Miguel, China, 2011 No, así que lo


agregas al final de
la lista
países
F Ch
Miguel visitó
¿Existe Miguel?
nombres

M 0
1 01 0 0 0 0 China, así que
0 0 0 0 0 0 corresponde dejar
Si, así no
registrado el
agregas nada 0 0 0 0 0 0
hecho
0 0 0 0 0 0

0 0 0 0 0 0
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 26
Un ejemplo (cont)
¿Existe Francia?

• El programa lee Javiera, Francia, 2011 Si. No tienes nada


que hacer

países
F Ch
¿Existe Javiera? Javiera visitó
nombres

M 0
1 01 0 0 0 0 Francia, así que
No, así que la J 0
1 0 0 0 0 0 corresponde dejar
agregas al final registrado el
0 0 0 0 0 0
de la lista hecho
0 0 0 0 0 0

0 0 0 0 0 0
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 27
Un ejemplo (cont)
• El programa lee Miguel, China, 2012
¿Existe China?

países
F Ch
nombres

M 0
1 012 0 0 0 0 Si Lo correcto
pensaste es
que
¿Existe Miguel? Miguel visitó en
J 0
1 0 0 0 0 0 INCREMENTAR
siempre había que
China,
uno¡de nuevo!
elun
contador
poner UNO,
0 0 0 0 0 0
de ¡estabas
visitas de esa
0 0 0 0 0 0 persona en ese
equivocado!
país
0 0 0 0 0 0
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 28
Un ejemplo (cont)
• El programa lee Felipe, China, 2012
¿Existe China?

países
F Ch
nombres

M 0
1 012 0 0 0 0
¿Existe Felipe?
J 0
1 0 0 0 0 0 Felipe en China
F 0 01 0 0 0 0

0 0 0 0 0 0

0 0 0 0 0 0
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 29
Un ejemplo (cont) países
F Ch

• Finalizó el ingreso de datos

nombres
M 0
1 012 0 0 0 0
• ¿Cuál es el país más visitado? 0 0 0 0 0 0
J 1
• Tienes que sumar hacia F 0 01 0 0 0 0
abajo, por columna
0 0 0 0 0 0
• Te conviene crear una lista,
para ir guardando la suma 0 0 0 0 0 0

por país Una vez que tengas


0
2 30 0 0 0 0
las suma por cada
país, puedes
determinar el ¡El
mayor mayor!
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 30
Un ejemplo (cont) países
F Ch

• Ya sabes cuál país fue el más

nombres
M 0
1 012 0 0 0 0
visitado
J 0
1 0 0 0 0 0
• Ahora, necesitas recorrer esa
lista, e informar los nombres F 0 01 0 0 0 0

de las personas que visitaron 0 0 0 0 0 0


dicho país 0 0 0 0 0 0

0
2 30 0 0 0 0
Un CERO
significa que la
persona NO
visitó ese país
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 31
Desafío
• ¡Escribe el programa!
• ¿Cómo se puede crear una matriz de un tamaño específico y llena de
ceros? # -*- coding: utf-8 -*-

import numpy as np

nombres = []
paises = []

# Esto crea una matriz de 7 filas y 5 columnas


contadores = np.zeros([7, 5])

31/03/2021 # Acá vienen el resto


Profesor: Juan Alfredode tu
Gallardo programa
Verdugo 32
Otros usos de las matrices

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 33


Matriz de Adyacencia
• Algo muy útil que se puede almacenar dentro de una matriz son las
distancias entre lugares
• En este caso, el valor almacenado en la intersección representa la
distancia entre las ciudades de la fila y columna
ciudades

ciudades
Distancia entre
las ciudades
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 34
Desafío
• Construye un programa que
te permita ingresar la
distancia entre ciudades, y
después consultar dichas
distancias

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 35


Cosas a considerar
• Mira bien el ejemplo: La distancia entre XYZ y ABC es la misma que
entre ABC y XYZ
• No debe haber diferencia entre calama y CALAMA
• Si se trata de obtener la distancia entre ciudades no-adyacentes, el
programa lo debe indicar

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 36


Desafío para la casa
T1
• Repite el problema de la temperatura
en la placa metálica
• Pero ahora, el programa le debe
preguntar al usuario la cantidad de
T4 T2 puntos en el borde de la placa (por
ejemplo, en la placa de la izquierda
hay 3 puntos en cada borde)
• Restringe la cantidad de puntos a
números impares
T3
• Informa al usuario la temperatura del
Debes subir la solución a Educa antes de la punto central de la placa
próxima clase
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 37
Archivos
Problemas cada vez más reales

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 1


Siempre es útil poder leer desde archivos
• Leer la lista de ingredientes a comprar en el supermercado para saber
qué tienes que comprar
• Revisar el número de invitados para saber si tienes suficientes cosas
para comer
• Buscar un número de teléfono para que puedas llamarl@

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 2


Los programas muchas veces tienen que leer
información almacenada en archivos
• Cuando cierras el visor de e-books, lee la página donde quedaste la
última vez que lo apagaste
• Cuando inicias un juego, lee el nivel en el que quedaste para que
puedas continuar desde ahí (y no desde el inicio)
• Hay miles de archivos OpenData que puedes usar para analizar
información interesante en tus programas. ¿Quieres saber qué fauna
muestran en los museos en Tasmania?
https://en.wikipedia.org/wiki/Open_data

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 3


¿Cómo se lee desde un archivo con código?
• El primer paso es “abrir” el archivo que quieres leer
• Usa la función open para abrir un archivo
arch = open(nombreArchivo, modoAcceso)

• Debes especificar
• El nombre del archivo
• El modo de acceso al archivo

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 4


¿Qué es el nombre del archivo?
• El nombre del archivo es el
nombre visible del archivo,
incluyendo su extensión:
• datos.txt
• montos.txt
• Etc
• El archivo será creado en la
misma carpeta que tu
programa

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 5


¿Qué es el modo de acceso?
• El modo de acceso especifica qué vas a hacer con el archivo una vez
que lo abres
• Puedes especificar lo siguiente:

Modo de Acción
acceso
r Leer el archivo
w Escribir al archivo (potencialmente sobre escribiendo las cosas que ya
están ahí)
a Agregar al final del archivo existente
b Abrir un archivo binario

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 6


Ubicación del archivo
• Normalmente, los archivos se leen desde el mismo lugar donde está
el archivo .py que contiene el código de mi programa.

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 7


¿Dónde estoy?
• En Spyder puedes ubicar
rápidamente la carpeta
donde estás trabajando

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 8


¿Cómo leemos los contenidos de un archivo?
• Una forma es usando la función read
contenido = arch.read()

• La función read retornará el contenido COMPLETO del archivo en la


variable indicada

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 9


Leyendo un archivo completo

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 10


Por ejemplo
• Usando el block de notas, crea un archivo de texto en el mismo lugar
donde está tu archivo .py
• Guárdalo con el nombre mascotas.txt

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 11


Escribe el siguiente código

arch = open("mascotas.txt", "r")

texto = arch.read()

print("Lo leido:")
print(texto)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 12


Leyendo de otra forma

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 13


Si prefieres, puedes leer una línea a la vez
• Usa la función readline
unaLinea = arch.readline()

• La función readline retornará el contenido de una línea desde el


archivo
• Recuerda lo siguiente de memoria: readline siempre lee la SIGUIENTE
línea

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 14


Demostración
Leer un archivo

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 15


Por ejemplo
• Usando el mismo archivo de texto:

arch = open("mascotas.txt", "r")

unaLinea = arch.readline()

print("Lo leido:")
print(unaLinea)

El programa
leyó
EXACTAMENTE
una línea
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 16
¿Y si quiero leer todas las líneas?
• Nótese que al momento de abrir el archivo, no sé cuántas líneas tiene
el archivo
• ¿Qué instrucción nos permite repetir algo, sin saber cuántas veces se
repetirá el ciclo?
• El ciclo WHILE
• La documentación de readline() dice:

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 17


Entonces
• Usando el mismo archivo de texto:

arch = open("mascotas.txt", "r")

unaLinea = arch.readline() El programa


while unaLinea != "": leyó todas las
print("Lo leido:") líneas
print(unaLinea)
unaLinea = arch.readline()

print("Esto es el fin!")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 18


Procesando lo leido

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 19


Procesando
• Fíjate en lo que leíste desde el archivo
• Cada línea tiene dos “campos”
• Un tipo de mascota
• Y un valor (talvez es la cantidad de
segundos que duerme cada día)
• ¿Cómo podemos separar esos dos
valores?

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 20


Separando
• Fíjate en el siguiente código:

linea = "abc,def,jk,l,np"

partes = linea.split(",")

print(partes)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 21


Split
• En Python, podemos usar la función split para dividir un string
• Esto nos retornará una lista con los elementos divididos
• Dicha lista la puedes manipular como cualquier otra lista
linea = "abc,def,jk,l,np"

partes = linea.split(",")

print(partes)

for p in partes:
print(p)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 22
Split mascotas
arch
arch ==open("mascotas.txt",
open("mascotas.txt","r") "r")

unaLinea = arch.readline()
unaLinea = arch.readline()
while unaLinea != "":
while unaLinea
print("Lo != "":
leido:")
print("Lo leido:")
print(unaLinea)
print(unaLinea)
partes = unaLinea.split(",")
unaLinea = arch.readline()
mascota = partes[0]
print("Esto
segundos = es el fin!")
partes[1].strip()

print(mascota + " duerme " + segundos + " segundos")

unaLinea = arch.readline()

print("Esto es el fin!")
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 23
Mini desafío
• Modifica el código anterior para que no imprima todo el texto
• Que solamente imprima el tipo de mascota, y la cantidad de
MINUTOS que duerme al día
• (Talvez tengas que convertir un string a entero!)
• ¡5 minutos!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 24


Procesando datos desde archivos

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 25


Un archivo con datos
• Tengo un archivo que detalla la cantidad de
segundos que duerme una mascota
• Pero ahora el archivo contiene todas las mascotas
de la ciudad

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 26


Respondiendo preguntas acerca de los datos
• ¿Cuántas mascotas distintas están nombradas en el archivo
con datos?
• Un algoritmo posible:

1. Inicializa una lista vacía


2. Lee una línea del archivo
• Si se terminó el archivo, salta al punto 7
3. Separa la mascota
4. Busca la mascota en la lista
5. Si no está en la lista, agrégala al final
6. Vuelve al punto 2
7. Cuenta cuántos elementos hay en la lista

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 27


Mini desafío
• Implementa el algoritmo anterior

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 28


¡Ya sabes leer datos
desde archivos!

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 29


Funciones

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 30


Repetición
• Uno de los problemas al escribir código es que frecuentemente tienes
que hacer lo mismo una y otra vez
• Las mismas líneas de código
• Las mismas operaciones
• Etc etc etc

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 31


¿Qué es una función?
• Función
• (Sustantivo) Una sección de código reusable que tiene un nombre y que hace
algo

• No sé si te has dado cuenta, pero ya has usado funciones!


• print
• sort
• open
• etc

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 32


¿Por qué crear funciones?
• Reutilización de código
• Estás haciendo lo mismo una y otra vez
• Simplificar el código
• Las funciones tienen nombre que explican lo que hacen
• Romper bloques complejos de código
• Facilidad para hacer cambios
• Es más fácil cambiar el código en un solo lugar, que en cambiarlo en muchas
partes (y además, te puedes equivocar)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 33


¿Cómo se crea una función?
• Usa la palabra def
• Abreviación de definir
• Tienes que darle un nombre a la función
• También puedes tener parámetros (los explicaremos después)
• Escribe el código en el cuerpo de la función

def escribirMensaje():
print("Hola Mundo")
return

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 34


¿Cómo se llama a la función?
• Llamar significa invocar
• Corresponde a hacer que la función se ejecute, o sea, que entre en
funcionamiento
• Para hacer esto, simplemente usamos el nombre de la función

def escribirMensaje():
print("Hola Mundo")
return

escribirMensaje()
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 35
Parámetros

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 36


¡Nos gustaría que las funciones fueran más
dinámicas!
• En los ejemplos anteriores, las funciones hacían solamente una cosa
• A veces eso es justo lo que necesitamos
• Pero a veces necesitamos más flexibilidad
• Mostrar mensajes especializados
• Proveer los números para hacer cálculos
• Escribir a la pantalla cosas que pueden variar
• Etc

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 37


Para cambiar el comportamiento de una
función se usan parámetros
• Los parámetros permiten que la función acepte datos desde afuera de
la función
• La verdad, ya has usado parámetros
print("Hola Mundo")

• Dentro de la función los def escribirMensaje(unMensaje):


parámetros se comportan como print(unMensaje)
variables return
• Es una muy buena idea darles un
nombre con significado escribirMensaje("Hola Mundo")
escribirMensaje("Chao Mundo")
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 38
¿Y si se requiere más de un parámetro?
• Simplemente agrégalos, separados por coma

def mostrarMensaje(nombre, saludo):


mensaje = nombre + ", " + saludo
print(mensaje)
return

mostrarMensaje("Miguel", "Buenos dias")

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 39


Retornando datos

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 40


Las funciones retornan datos usando la
palabra clave return
• Especifica el valor y el dato que quieres retornar después de la
palabra return
def componerMensaje(nombre, saludo):
mensaje = saludo + ", " + nombre
return mensaje

def mostrarMensaje(mensaje):
print(mensaje)
return

salida = componerMensaje("Esteban", "Buenas noches")


mostrarMensaje(salida)

# O también
31/03/2021 # mostrarMensaje(componerMensaje("Esteban",
Profesor: Juan Alfredo Gallardo Verdugo "Buenas noches"))
41
Contexto de las funciones
def componerMensaje(nombre, saludo):
• Por si no te fijaste, usamos el mensaje = saludo + ", " + nombre
mismo nombre de variable return mensaje
(mensaje) dos veces
def mostrarMensaje(mensaje):
• Cada función es un contexto print(mensaje)
independiente, que permite return
crear variables
salida = componerMensaje("Esteban", "Bye")
• Estas variables solamente son mostrarMensaje(salida)
visibles dentro de esa función print(mensaje)
(son variables LOCALES a la
función. No existen fuera de la
función)
31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 42
Mejoremos el ejemplo de las
mascotas

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 43


def getMascota(unaLinea):
partes = unaLinea.split(",")
return partes[0]
arch = open("mascotas.txt", "r")

lista = []
def getSegundos(unaLinea):
unaLinea = arch.readline()
partes = unaLinea.split(",")
while unaLinea != "":
return int(partes[1].strip())
mascota = getMascota(unaLinea)
segundos = getSegundos(unaLinea)
def mascotaEnLista(nombre, lista):
if not mascotaEnLista(mascota, lista):
existe = nombre in lista
agregarMascota(mascota, lista)
return existe
unaLinea = arch.readline()
def agregarMascota(nombre, lista):
numMascotas = len(lista)
lista.append(nombre)
print("Hay " + str(numMascotas) + " mascotas distintas")
return

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 44


Ya puedes ahorrar
tiempo creando
funciones

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 45


Desafío rápido
• Modifica el ejemplo anterior
• Mejóralo, de forma que no importa si dice hamster, HAMSTER,
Hamster, etc
• (O sea, que no haga diferencia entre mayúsculas y minúsculas)
• Además, modifica el código para que cuente la cantidad de veces que
cada mascota fue nombrada
• (Para esto último seguramente necesitarás más de una lista!)
• (Si necesitas usarla dentro de una función, recuerda pasarla como parámetro)

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 46


Desafío para a casa
• Se publicará en Educa el enunciado del desafío para la semana
• Recuerda respetar la fecha de entrega indicada en Educa

31/03/2021 Profesor: Juan Alfredo Gallardo Verdugo 47

También podría gustarte