Konto bankowe
Treść zadania
Zaprojektuj klasę KontoBankowe:
- konstruktor
__init__(self, saldo=0)zapamiętuje saldo początkowe w atrybuciesaldo, - metoda
wplac(kwota)zwiększa saldo okwota. Jeśli $kwota \le 0$, metoda zgłasza wyjątekValueError("Kwota musi być dodatnia.")i nie zmienia salda, - metoda
wyplac(kwota)zmniejsza saldo okwota. Najpierw sprawdza, czy $kwota \le 0$ — wtedy zgłaszaValueError("Kwota musi być dodatnia."), a następnie, czy kwota nie przekracza salda — jeśli przekracza, zgłaszaValueError("Brak środków na koncie."). W obu przypadkach saldo się nie zmienia.
Metody nie wypisują komunikatów o błędach — tylko zgłaszają wyjątki. Wyjątki przechwytuje program główny (try/except) i wypisuje komunikat błędu.
Program tworzy konto z podanym saldem początkowym i wykonuje kolejne polecenia:
wplac K— wpłaca kwotę $K$ i wypisujeWpłacono K. Saldo: S,wyplac K— wypłaca kwotę $K$ i wypisujeWypłacono K. Saldo: S,saldo— wypisujeSaldo: S,
gdzie $S$ to saldo po wykonaniu polecenia. Jeśli metoda zgłosi wyjątek, program zamiast tego wypisuje Błąd: <komunikat wyjątku>.
Dane wejściowe
- 1. linia: saldo początkowe — liczba całkowita $\ge 0$
- 2. linia: liczba poleceń $n$
- kolejne $n$ linii: polecenie
wplac K,wyplac Kalbosaldo($K$ — liczba całkowita, może być ujemna lub równa 0)
Dane wyjściowe
$n$ linii — po jednej dla każdego polecenia, w formacie opisanym w treści.
Ograniczenia
- $1 \le n \le 100$
- $-10^6 \le K \le 10^6$, saldo początkowe nie przekracza $10^6$
Uwagi
- Instrukcja
raisezgłasza wyjątek i natychmiast przerywa działanie metody. Kod, który wywołał metodę, może wyjątek przechwycić w blokutry/except; zapisexcept ValueError as edaje dostęp do obiektu wyjątku, astr(e)(lub{e}w f-stringu) to jego komunikat:
```python
def pierwiastek(x):
if x < 0:
raise ValueError("Liczba nie może być ujemna.")
return x ** 0.5
try:
print(pierwiastek(-4))
except ValueError as e:
print(f"Błąd: {e}") # Błąd: Liczba nie może być ujemna.` - Dzięki temu klasa tylko sygnalizuje problem, a o tym, co z nim zrobić (wypisać komunikat, zapytać ponownie, przerwać program), decyduje kod, który z niej korzysta.
Przykład
100 5 wplac 50 wyplac 30 wyplac 500 wplac -20 saldo
Wpłacono 50. Saldo: 150 Wypłacono 30. Saldo: 120 Błąd: Brak środków na koncie. Błąd: Kwota musi być dodatnia. Saldo: 120
Potrzebujesz teorii?
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.
Przywrócono Twój zapisany kod.
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 uruchomiono0 1 saldo
Saldo: 0
Test 2
Nie uruchomiono0 2 wyplac 1 wplac 0
Błąd: Brak środków na koncie. Błąd: Kwota musi być dodatnia.
Test 3
Nie uruchomiono50 3 wyplac 50 saldo wyplac 0
Wypłacono 50. Saldo: 0 Saldo: 0 Błąd: Kwota musi być dodatnia.
Test 4
Nie uruchomiono1000 6 wplac 250 wyplac 1250 wyplac 1 wplac 1 wyplac -5 saldo
Wpłacono 250. Saldo: 1250 Wypłacono 1250. Saldo: 0 Błąd: Brak środków na koncie. Wpłacono 1. Saldo: 1 Błąd: Kwota musi być dodatnia. Saldo: 1
Test 5
Nie uruchomiono20 4 wyplac 25 wplac 5 wyplac 25 saldo
Błąd: Brak środków na koncie. Wpłacono 5. Saldo: 25 Wypłacono 25. Saldo: 0 Saldo: 0