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.

  1. 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.
  2. def __init__(self, x, y): es el constructor. Python lo llama solo cada vez que escribes Punto(3, 4). self es el objeto que se está creando; self.x = x y self.y = y guardan los valores recibidos dentro del objeto para que sobrevivan después de crear el punto.
  3. def distancia(self, otro): es un método (una función que vive dentro de la clase). Recibe self (el propio punto) y otro (un segundo Punto), y usa self.x - otro.x para restar sus coordenadas. math.sqrt(dx**2 + dy**2) aplica el teorema de Pitágoras, que es la distancia euclídea.
  4. p1 = Punto(3, 4) crea un objeto concreto a partir del molde. Con p1.distancia(p2) se llama al método sobre p1: ese p1 entra como self de forma automática, por eso solo pasas p2.
  5. __repr__ define cómo se ve el objeto al imprimirlo: por eso print(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.00

Solució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.

Conexiones