Klasa Punkt

Zadanie 2 z 11 · rozdział 18Trudność: 2 z 3classstaticporównaniamath

Treść zadania

Zaprojektuj klasę Punkt opisującą punkt na płaszczyźnie:

  1. Konstruktor __init__(self, x=0, y=0) zapamiętuje współrzędne.
  2. Metoda statyczna odleglosc(p1, p2) zwraca odległość między punktami p1 i p2:
    $\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}$.
  3. Metoda __str__() zwraca napis z współrzędnymi w postaci (x, y), np. (5, -3).
  4. Metoda __eq__(other) sprawdza, czy dwa punkty są równe (obie współrzędne identyczne). Operator != Python wyznaczy wtedy sam.

Program wczytuje współrzędne punktów $A$ i $B$, tworzy dwa obiekty Punkt, wypisuje je, podaje odległość między nimi i informuje, czy punkty są równe.

Dane wejściowe

  • 1. linia: dwie liczby całkowite $x_A$ i $y_A$ oddzielone spacją
  • 2. linia: dwie liczby całkowite $x_B$ i $y_B$ oddzielone spacją

Dane wyjściowe

Cztery linie:

Punkt A: (xA, yA)
Punkt B: (xB, yB)
Odległość między punktami A i B: <odległość>
Punkty są równe.

Odległość wypisz z dokładnością do 2 miejsc po przecinku. W ostatniej linii wypisz Punkty są równe. albo Punkty są różne.

Ograniczenia

  • $-1000 \le x, y \le 1000$

Przykład

Wejście
5 5
-3 -3
Wyjście
Punkt A: (5, 5)
Punkt B: (-3, -3)
Odległość między punktami A i B: 11.31
Punkty są różne.

$\sqrt{8^2 + 8^2} = \sqrt{128} \approx 11.3137$.

Zasady obowiązujące w rozdziale 18

Zadania w tym rozdziale uczą projektowania klas: konstruktora __init__, atrybutów, metod, metod statycznych (@staticmethod) oraz metod specjalnych, dzięki którym obiekty można wypisywać (__str__), porównywać (__eq__) i łączyć operatorami (__add__, __sub__, __mul__, …). Ostatnie zadania wprowadzają też wyjątki (raise, try/except), klasy danych (@dataclass) i generatory (yield).

Konwencje wspólne:

  • Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
  • W każdym zadaniu dostajesz kod startowy ze szkieletem klasy, a zwykle także z gotowym wczytywaniem danych i wypisywaniem wyników. Twoim zadaniem jest przede wszystkim uzupełnienie metod klasy — wynik programu zależy od tego, jak działa Twoja klasa.
  • Nazwy klas i metod podane w treści są obowiązkowe (kod startowy z nich korzysta). Nazwy w kodzie piszemy bez polskich znaków, np. Kolo, Prostokat.
  • „Z dokładnością do 2 miejsc po przecinku” oznacza dokładnie dwie cyfry po kropce, np. f"{x:.2f}" (3.00, -0.50).
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
0 0
3 4
Oczekiwane wyjście
Punkt A: (0, 0)
Punkt B: (3, 4)
Odległość między punktami A i B: 5.00
Punkty są różne.

Test 2

Nie uruchomiono
Wejście
1 2
1 2
Oczekiwane wyjście
Punkt A: (1, 2)
Punkt B: (1, 2)
Odległość między punktami A i B: 0.00
Punkty są równe.

Test 3

Nie uruchomiono
Wejście
-2 1
4 -7
Oczekiwane wyjście
Punkt A: (-2, 1)
Punkt B: (4, -7)
Odległość między punktami A i B: 10.00
Punkty są różne.

Test 4

Nie uruchomiono
Wejście
2 3
3 2
Oczekiwane wyjście
Punkt A: (2, 3)
Punkt B: (3, 2)
Odległość między punktami A i B: 1.41
Punkty są różne.

Test 5

Nie uruchomiono
Wejście
7 -3
7 5
Oczekiwane wyjście
Punkt A: (7, -3)
Punkt B: (7, 5)
Odległość między punktami A i B: 8.00
Punkty są różne.
Uruchom z własnymi danymi