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.

Diagramas de flujo

Diagrama de flujo (actividad) del ejercicio 01

Diagrama de flujo (grafo) del ejercicio 01

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}")

Ejecútalo en el navegador

▶ Visualízalo paso a paso en Python Tutor — ve cómo cambian las variables línea a línea.

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