01Por qué existen las librerías
BLOQUE 1
1 / 44
Clase 3 · Programación

Incorporar
Herramientas

Hasta ahora programamos con lo que Python ya nos daba.
Hoy aprendemos a sumar herramientas nuevas — y a investigarlas nosotros mismos.

📦 librerías🔎 investigar🎲 random🖼️ Tkinter⚔️ Arena de Combate evoluciona

La frase de la clase de hoy

Hasta ahora usamos las herramientas que Python nos dio.

Ahora aprendemos a incorporar herramientas nuevas — y a investigar cómo usarlas.

No se trata de memorizar una librería más. Se trata de una habilidad que vas a usar toda la carrera.

Para pensar · 2 minutos

¿Tenemos que programar absolutamente todo nosotros?

🎲 números al azar📅 fechas🖼️ interfaces gráficas 🔊 sonido🖌️ imágenes🎮 videojuegos🗄️ bases de datos

💡

Otra persona ya programó esa herramienta.

Y la compartió para que la usemos.

Millones de programadores en el mundo ya se chocaron con estos mismos problemas antes que vos.

🧰 Definición

Librería = caja de herramientas

Una librería es un conjunto de código ya escrito que incorporamos a nuestro programa para usar funcionalidades que no necesitamos construir desde cero.

Tenemosun problema.
Buscamosuna herramienta que lo resuelva.
Incorporamosla librería a nuestro programa.
Usamosla herramienta que necesitábamos.

Algunas cajas de herramientas de Python

Hoy vamos a usar dos. Las demás quedan para cuando las necesiten.

random

números al azar, sortear, elegir

math

raíz cuadrada, potencias, redondeo

datetime

fechas y horarios

tkinter

ventanas, botones, interfaces gráficas

El recorrido de hoy

1 · importCómo se incorpora una librería a nuestro código.
2 · InvestigarQué hacer cuando no conocemos una herramienta.
3 · randomUn laboratorio corto, y lo conectamos con Arena de Combate.
4 · TkinterLa primera ventana gráfica de nuestro propio videojuego.
5 · DesafíoCada uno investiga una mejora nueva, por su cuenta.
Antes de arrancar · un poco de vocabulario

Módulo, librería, paquete

Módulo

Un archivo .py con código reutilizable.

Librería

Un conjunto de módulos, pensado para resolver un tipo de problema.

Paquete

Una forma de organizar varias librerías juntas.

Para hoy

No hace falta que memoricen la diferencia exacta. En la práctica, casi siempre vamos a decir “librería” para cualquiera de las tres. Lo importante es lo que aprenden a hacer con ellas, no cómo se llaman.

🔧 La primera herramienta: import

Se escribe import

import random

Con esa única línea, todo lo que trae la librería random queda disponible en nuestro programa.

Ahora usamos algo de adentro

import random

numero = random.randint(1, 10)
print(numero)
random.randint(1, 10) → 7

Cada vez que lo corremos, puede salir un número distinto entre 1 y 10.

import random
↓

incorporamos la librería

random.randint()
↓

accedemos a una herramienta de esa librería

◇ Una variante

También existe from ... import ...

Como lo vimos

import random
numero = random.randint(1,10)

Importando solo una pieza

from random import randint
numero = randint(1,10)

La diferencia

En la segunda forma, traemos solo randint y ya no hace falta escribir random. adelante.

Mini desafío · 3 minutos

Miren este código: ¿qué forma de import usa?

from random import randint

vida = 100
danio = randint(5, 20)
vida = vida - danio
print(vida)

1. ¿Cuál de las dos formas usa?
2. Reescribilo con la otra forma.
3. ¿Qué hace este programa?

Respuesta

Usa from...import. Con la otra forma sería import random y random.randint(5,20).
El programa le resta a la vida un daño al azar entre 5 y 20.

¿Qué hacemos si nos encontramos con una función que nunca usamos?

Pensalo 30 segundos antes de seguir

Investigamos.

Un programador no memoriza todas las librerías que existen. Aprende a investigarlas cuando las necesita.

Los pasos para aprender una librería nueva

1¿Qué quiero hacer?
2¿Qué herramienta necesito?
3¿Qué librería puede ayudarme?
4¿Cómo se importa?
5¿Qué funciones o clases tiene?
6¿Qué parámetros necesitan?
7¿Qué devuelven?
8Pruebo un ejemplo pequeño.
9Lo incorporo a mi proyecto.
🔴 En vivo

Caso real: quiero que el programa espere un segundo

1 · Qué quieroPausar el programa un momento.
2 · Qué busco“python esperar unos segundos”
3 · Libreríatime
4 · Herramientatime.sleep(segundos)
import time

print("Antes...")
time.sleep(2)
print("...después")
📖 La herramienta del programador

La documentación

Es el texto oficial que explica qué hace una librería, qué funciones tiene, qué necesitan para funcionar y qué devuelven.

No es un libro para leer entero. Es una herramienta para consultar cuando la necesitás — como un diccionario.

Aprender a leer un ejemplo

random.randint(a, b)

Parámetros
a y b: los límites, de menor a mayor.
Devuelve
Un número entero al azar, a ≤ n ≤ b (incluye los dos límites).
El nombrequé herramienta es.
Los paréntesisqué datos le tengo que dar.
“Devuelve”qué me entrega de vuelta con return.
Mini desafío · 4 minutos

Con esta ficha, ¿qué va a pasar?

random.choice(lista)

Parámetros
lista: una lista de elementos.
Devuelve
Un elemento cualquiera de esa lista, elegido al azar.
enemigos = ["Orco", "Dragón", "Goblin"]
elegido = random.choice(enemigos)
print(elegido)

Respuesta

Imprime uno de los tres nombres, al azar. Podría ser "Orco", "Dragón" o "Goblin" — distinto cada vez que se ejecuta.

🧪 Laboratorio · 5 minutos

Probemos random nosotros

import random

numero = random.randint(1, 100)
print(numero)

Ábranlo en su compu y córranlo varias veces.

Para investigar · en la compu

¿Qué pasa si cambiamos los límites, por ejemplo random.randint(500, 1000)?

¿randint() puede devolver el mismo número dos veces seguidas?

¿Qué pasa si el primer número es mayor que el segundo? Probalo y mirá el error.

⚔️ Ahora sí: nuestro TP

Daño al azar, no siempre el mismo

Como lo tenían hasta ahora

def atacar(self, objetivo):
    danio = 20
    objetivo.recibir_danio(danio)

Con random

import random

def atacar(self, objetivo):
    danio = random.randint(10, 30)
    objetivo.recibir_danio(danio)

¿Dónde más podríamos usar random?

🎯 daño variable👹 enemigo al azar🥇 quién empieza la pelea 💥 golpe crítico con suerte🎁 objeto que dropea el enemigo
enemigos = ["Orco", "Dragón", "Goblin"]
rival = random.choice(enemigos)
empieza = random.choice(["jugador", "enemigo"])
Mini desafío · 5 minutos

Agregá daño al azar a tu Arena de Combate

Abrí tu proyecto del TP. Buscá el método atacar (o como lo hayas llamado) y hacé que el daño sea al azar, en vez de un número fijo.

Pista

1. import random arriba de todo.
2. Adentro del método, reemplazá el número fijo por random.randint(min, max).
3. Probá varias veces: el daño tiene que cambiar.

Arena de Combate

CONSOLAlo que ya tenemos
→
TKINTERhoy
→
PYGAMEmás adelante

NO vamos a empezar otro videojuego.

Vamos a hacer evolucionar el mismo proyecto.

Las clases Personaje, Jugador, Enemigo y Arma que ya construyeron siguen valiendo exactamente igual.

🖼️ Nueva librería: tkinter

Tres líneas, una ventana

import tkinter as tk

ventana = tk.Tk()
ventana.mainloop()
tk

ventana vacía

Leyendo el código de la ventana

import tkinter as tkIncorporamos la librería gráfica, con el apodo tk.
ventana = tk.Tk()Creamos el objeto ventana. Sí — es un objeto, como los que ya vienen construyendo.
ventana.mainloop()Le decimos “quedate abierta, esperando que el usuario haga algo” (un clic, escribir, etc.).

Vamos sumando, un elemento a la vez

1 ventana2 título3 tamaño 4 texto5 botón6 entrada de datos7 evento / clic
import tkinter as tk

ventana = tk.Tk()
ventana.title("Arena de Combate")
ventana.geometry("320x220")

etiqueta = tk.Label(ventana, text="Nombre del jugador")
etiqueta.pack()

ventana.mainloop()
🎮 Primera interfaz de Arena de Combate

Simple, pero funcional

Arena de Combate

⚔️ ARENA DE COMBATE

Nombre del jugador

Un textotítulo de la app.
Una entradapara escribir el nombre.
Un botónpara empezar.

Los tres widgets, en código

import tkinter as tk

ventana = tk.Tk()
ventana.title("Arena de Combate")

tk.Label(ventana, text="Nombre del jugador").pack()
entrada = tk.Entry(ventana)
entrada.pack()

boton = tk.Button(ventana, text="JUGAR")
boton.pack()

ventana.mainloop()

Tkinter es una herramienta para la interfaz.

Nuestros objetos siguen existiendo exactamente igual.

El botón llama a un método que ya existe

class Jugador:
    def __init__(self, nombre, vida):
        self.nombre = nombre
        self.vida = vida

    def atacar(self, objetivo):
        # lo que ya construyeron en el TP
        ...


aria = Jugador("Aria", 100)

def al_hacer_clic():
    aria.atacar(orco)

boton = tk.Button(ventana, text="ATACAR", command=al_hacer_clic)
TKINTERdibuja el botón y detecta el clic.
NUESTRO CÓDIGOal_hacer_clic() conecta el clic con el objeto.
JUGADORsigue siendo el mismo objeto, con sus atributos y métodos de siempre.

La misma lógica, otra cara

Antes · consola

Aria tiene 100 de vida. 1. Atacar 2. Usar poción 3. Salir >

Después · Tkinter

Arena de Combate
⚔ ARIAVida: 100
👹 ORCOVida: 62

El Orco recibió 18 de daño.

Mini desafío · 5 minutos

Completá la conexión

aria = Jugador("Aria", 100)

def al_hacer_clic():
    # completar
    ...

boton = tk.Button(ventana, text="ATACAR",
                   command=al_hacer_clic)

¿Qué línea falta adentro de al_hacer_clic() para que, al tocar el botón, Aria ataque a un objeto llamado orco?

Respuesta

aria.atacar(orco) — la misma línea que ya usaban en la versión de consola, ahora disparada por un clic en vez de un input().

PYTHON + POO
↓
LIBRERÍAS
↓
TKINTERhoy
↓
PYGAME
↓
PROYECTOS MÁS COMPLETOS
👀 Un adelanto, sin entrar en detalle

Más adelante, con Pygame

🖼️ imágenes🏃 movimiento⌨️ teclado 🔊 sonidos💥 colisiones🎬 escenas🏆 puntuación🎞️ animaciones
Desafío final · individual o en parejas

Agreguen una funcionalidad nueva a su videojuego

1Elijan una mejora chica.
2Investiguen qué herramienta necesitan.
3Identifiquen la librería.
4Busquen documentación o un ejemplo.
5Pruébenla.
6Expliquen qué descubrieron.

Algunas ideas posibles

🎲 daño al azar👹 enemigo al azar📅 mostrar la fecha de la partida 🖼️ una ventana simple🔘 un widget nuevo de Tkinter⏱️ un cronómetro de turno

Elegir una alcanza. No hace falta resolverlas todas.

📝 Para la próxima

Tres cosas para traer resueltas

1El desafío de la lámina anterior, terminado: qué mejora eligieron y cómo la resolvieron.
2Su Arena de Combate con daño al azar ya funcionando (bloque 4).
3La ventana mínima de Tkinter corriendo en su compu, con título y un botón.

Antes de irnos

¿Qué es una librería?

¿Cómo la incorporamos a nuestro código?

¿Qué hacemos cuando no sabemos usar algo?

¿Tenemos que memorizar todas sus funciones?

¿Qué cambia y qué permanece en nuestra POO?

Las herramientas cambian.

La capacidad de aprender a utilizarlas permanece.

Nos vemos la próxima 👋

Bloque 1
00:00 ← → avanzar · N notas · O índice · L bloquear clic 1 / 44
Notas del profesor

Recorrido de la clase

Clic para saltar · Esc para cerrar◇ = opcional, se puede saltear si vas corto