Hasta ahora programamos con lo que Python ya nos daba.
Hoy aprendemos a sumar herramientas nuevas — y a investigarlas nosotros mismos.
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.
¿Tenemos que programar absolutamente todo nosotros?
💡
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.
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.
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
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.
import random
Con esa única línea, todo lo que trae la librería random queda disponible en nuestro programa.
import random numero = random.randint(1, 10) print(numero)
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
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.
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.
import time print("Antes...") time.sleep(2) print("...después")
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.
random.randint(a, b)
random.choice(lista)
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.
import random numero = random.randint(1, 100) print(numero)
Ábranlo en su compu y córranlo varias veces.
¿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.
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)
enemigos = ["Orco", "Dragón", "Goblin"] rival = random.choice(enemigos)
empieza = random.choice(["jugador", "enemigo"])
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
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.
import tkinter as tk ventana = tk.Tk() ventana.mainloop()
ventana vacía
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()
Nombre del jugador
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.
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)
Antes · consola
Después · Tkinter
El Orco recibió 18 de daño.
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().
Elegir una alcanza. No hace falta resolverlas todas.
¿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 👋