Ejercicio 01 — Define una clase Punto(x, y) con un metodo distancia(otro) que…
Dificultad: verde · Módulo 08 (Clases y archivos)
Enunciado
Define una clase Punto(x, y) con un metodo distancia(otro) que devuelva la distancia euclidea.
Cómo se resuelve
Una clase es un molde: describe qué datos guarda cada objeto y qué sabe hacer. Aquí Punto agrupa una coordenada x y una y, y sabe medir su distancia a otro punto.
class Punto:abre la definición del molde. Todo lo indentado debajo pertenece a la clase, no se ejecuta al definirla: solo describe cómo serán los objetos.def __init__(self, x, y):es el constructor. Python lo llama solo cada vez que escribesPunto(3, 4).selfes el objeto que se está creando;self.x = xyself.y = yguardan los valores recibidos dentro del objeto para que sobrevivan después de crear el punto.def distancia(self, otro):es un método (una función que vive dentro de la clase). Recibeself(el propio punto) yotro(un segundoPunto), y usaself.x - otro.xpara restar sus coordenadas.math.sqrt(dx**2 + dy**2)aplica el teorema de Pitágoras, que es la distancia euclídea.p1 = Punto(3, 4)crea un objeto concreto a partir del molde. Conp1.distancia(p2)se llama al método sobrep1: esep1entra comoselfde forma automática, por eso solo pasasp2.__repr__define cómo se ve el objeto al imprimirlo: por esoprint(f"...{p1}...")muestra(3,4)en vez de algo ilegible como<Punto object at 0x...>.
Trampa habitual: olvidar self al leer o escribir atributos dentro de un método. Si escribes x a secas en vez de self.x, Python busca una variable local que no existe; el atributo del objeto siempre se accede con self..
Para practicar — cópialo y complétalo
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
# Curso de Python — Modulo 08: Clases, dataclasses y archivos
# Ejercicio 01 — PRACTICA (rellena los TODO)
# Enunciado: Define una clase Punto(x, y) con un metodo distancia(otro) que devuelva la distancia euclidea.
# Dificultad: verde
# Ejecutar: python3 ej01_practica.py
import math
class Punto:
"""Representa un punto en el plano 2D."""
def __init__(self, x, y):
# TODO: guarda x e y como atributos del objeto (usa self.x = x, etc.)
pass
def distancia(self, otro):
"""Calcula la distancia euclidea a otro Punto."""
# TODO: calcula dx = self.x - otro.x, dy = self.y - otro.y
# TODO: devuelve math.sqrt(dx**2 + dy**2)
pass
def __repr__(self):
# TODO: devuelve un string del tipo "(x,y)"
pass
# --- Programa principal ---
p1 = Punto(3, 4)
p2 = Punto(0, 0)
# TODO: imprime la distancia entre p1 y p2 con 2 decimales
# Salida esperada: Distancia entre (3,4) y (0,0): 5.00
p3 = Punto(1, 1)
p4 = Punto(4, 5)
# TODO: imprime la distancia entre p3 y p4 con 2 decimales
# Salida esperada: Distancia entre (1,1) y (4,5): 5.00Solución — cópiala y ejecútala
# Curso de Python — Modulo 08: Clases, dataclasses y archivos
# Ejercicio 01 — MODELO (resuelto)
# Enunciado: Define una clase Punto(x, y) con un metodo distancia(otro) que devuelva la distancia euclidea.
# Dificultad: verde
# Ejecutar: python3 ej01_modelo.py
import math
class Punto:
"""Representa un punto en el plano 2D."""
def __init__(self, x, y):
# self.x y self.y son los atributos del objeto
self.x = x
self.y = y
def distancia(self, otro):
"""Calcula la distancia euclidea a otro Punto."""
dx = self.x - otro.x
dy = self.y - otro.y
return math.sqrt(dx**2 + dy**2)
def __repr__(self):
"""Representacion legible del punto."""
return f"({self.x},{self.y})"
# --- Programa principal ---
p1 = Punto(3, 4)
p2 = Punto(0, 0)
print(f"Distancia entre {p1} y {p2}: {p1.distancia(p2):.2f}")
p3 = Punto(1, 1)
p4 = Punto(4, 5)
print(f"Distancia entre {p3} y {p4}: {p3.distancia(p4):.2f}")Cómo usarlo
Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.