Powtórzenie – prosty kalkulator
Część sekcji Programowanie obiektowe ścieżki Python w Coddy. Lekcja 8 z 64.
Wyzwanie
ŚredniTwoja klasa Calculator w pliku calculator.py powinna:
- Mieć konstruktor, który inicjuje atrybut
resultwartością 0 - Zawierać metody
add,subtract,multiplyidivide, z których każda:- Przyjmuje liczbę jako argument
- Wykonuje działanie na bieżącej wartości
resulti tej liczbie - Aktualizuje atrybut
result - Zwraca nowy wynik
- Zawierać metodę
clear, która ustawiaresultz powrotem na 0 - Zawierać metodę
get_result, która zwraca bieżący wynik - W przypadku metody
divideobsługiwać dzielenie przez zero poprzez:- Sprawdzenie, czy podana liczba jest równa 0
- Jeśli jest równa zero, wypisanie dokładnie: "Error: Division by zero"
- Pozostawienie atrybutu
resultbez zmian w tym przypadku - Zwrócenie niezmienionej wartości
result
Plik driver.py zaimportuje Twoją klasę Calculator i przetestuje ją za pomocą kodu podobnego do tego:
from calculator import Calculator
calc = Calculator()
calc.add(5) # result becomes 5
calc.multiply(3) # result becomes 15
calc.subtract(2) # result becomes 13
calc.divide(0) # prints "Error: Division by zero", result remains 13
calc.divide(2) # result becomes 6.5
calc.clear() # result becomes 0Postępuj zgodnie z komentarzami TODO w pliku calculator.py, aby zaimplementować wszystkie wymagane funkcje.
Spróbuj swoich sił
from calculator import Calculator
# Obsługa przypadków testowych
test_case = input()
if test_case == "constructor_test":
# Test tworzenia kalkulatora i jego stanu początkowego
calc = Calculator()
print(f"Initial result: {calc.get_result()}")
print("Calculator created successfully")
elif test_case == "addition_test":
# Test działania dodawania
calc = Calculator()
result1 = calc.add(10)
print(f"After adding 10: {result1}")
result2 = calc.add(5)
print(f"After adding 5: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "subtraction_test":
# Test działania odejmowania
calc = Calculator()
calc.add(20) # Zacznij od 20
result1 = calc.subtract(8)
print(f"After subtracting 8 from 20: {result1}")
result2 = calc.subtract(2)
print(f"After subtracting 2: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "multiplication_test":
# Test działania mnożenia
calc = Calculator()
calc.add(5) # Zacznij od 5
result1 = calc.multiply(4)
print(f"After multiplying by 4: {result1}")
result2 = calc.multiply(2)
print(f"After multiplying by 2: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "division_test":
# Test działania dzielenia
calc = Calculator()
calc.add(100) # Zacznij od 100
result1 = calc.divide(4)
print(f"After dividing by 4: {result1}")
result2 = calc.divide(5)
print(f"After dividing by 5: {result2}")
print(f"Final result: {calc.get_result()}")
elif test_case == "division_by_zero_test":
# Test obsługi błędu dzielenia przez zero
calc = Calculator()
calc.add(50)
print(f"Initial value: {calc.get_result()}")
result = calc.divide(0) # Powinien wyświetlić komunikat o błędzie
print(f"Result after division by zero: {result}")
print(f"Value unchanged: {calc.get_result()}")
elif test_case == "clear_test":
# Test działania funkcji clear
calc = Calculator()
calc.add(25)
calc.multiply(3)
print(f"Before clear: {calc.get_result()}")
result = calc.clear()
print(f"After clear: {result}")
print(f"Current result: {calc.get_result()}")
elif test_case == "comprehensive_test":
# Przetestuj kolejno wszystkie operacje
calc = Calculator()
# Wykonaj serię operacji
calc.add(10) # result = 10
calc.multiply(3) # result = 30
calc.subtract(5) # result = 25
calc.divide(5) # result = 5
print(f"After sequence of operations: {calc.get_result()}")
# Przetestuj obsługę błędów
calc.divide(0) # Powinno wyświetlić błąd
print(f"After division by zero attempt: {calc.get_result()}")
# Wyczyść i zacznij od nowa
calc.clear()
calc.add(100)
print(f"After clear and add 100: {calc.get_result()}")
else:
print("Unknown test case")
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektyParametr selfMetodyAtrybutyMetoda konstruktora (__init__)Powtórzenie – prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaFunkcja super()Nadpisywanie metodDziedziczenie wielokrotneKolejność rozwiązywania metodPodsumowanie – hierarchia pracowników7Metody specjalne
Wprowadzenie do metod magicznychPrzeciążanie operatorówMagiczne metody kontenerówPowtórka – własna lista10Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy2Dekoratory
Wprowadzenie do dekoratorówDekorator propertyDekorator metody statycznejDekorator metody klasowej5Polimorfizm
Ponowne omówienie nadpisywania metodTypowanie kaczeKlasy i metody abstrakcyjneProjektowanie interfejsówPodsumowanie — kalkulator kształtów8Zaawansowane koncepcje programowania obiektowego
Kompozycja a dziedziczenieMiksyMetody statyczne i klasoweDekoratory klasMenedżery kontekstu11Wzorce projektowe, część 2
Wzorzec PolecenieWzorzec AdapterWzorzec DekoratorWzorzec Metoda szablonowaWzorzec StanWzorzec Kompozyt3Właściwości klas
Zmienne instancji a zmienne klasoweDekoratory właściwościAtrybuty prywatnePowtórzenie — menedżer kont bankowych6Hermetyzacja
Public, Protected, Private — pamięćModyfikatory dostępuUkrywanie informacjiDekoratory właściwości — zaawansowanePodsumowanie — system ewidencji uczniów12Projekt: System zarządzania biblioteką
Przegląd projektuKlasy Book i UserSystem wypożyczeńFunkcja wyszukiwaniaInterfejs administratoraTestowanie i integracjaPoćwicz samodzielnie: Kompilator Python online