Riepilogo - Calcolatrice semplice
Fa parte della sezione Programmazione orientata agli oggetti del percorso Python di Coddy. Lezione 8 di 64.
Sfida
MedioLa tua classe Calculator in calculator.py deve:
- Avere un costruttore che inizializza un attributo
resulta 0 - Includere metodi per
add,subtract,multiplyedivide, ciascuno dei quali:- Accetta un numero come argomento
- Esegue l'operazione tra il
resultcorrente e il numero - Aggiorna l'attributo
result - Restituisce il nuovo risultato
- Includere un metodo
clearche reimpostaresulta 0 - Includere un metodo
get_resultche restituisce il risultato corrente - Per il metodo
divide, devi gestire la divisione per zero:- Verifica se il numero fornito è uguale a 0
- Se è zero, stampa esattamente: "Error: Division by zero"
- In questo caso, lascia invariato l'attributo
result - Restituisci il valore invariato di
result
Il file driver.py importerà la tua classe Calculator e la testerà con codice simile a questo:
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 0Segui i commenti TODO nel file calculator.py per implementare tutte le funzionalità richieste.
Provalo tu
from calculator import Calculator
# Gestione dei casi di test
test_case = input()
if test_case == "constructor_test":
# Verifica la creazione della calcolatrice e il suo stato iniziale
calc = Calculator()
print(f"Initial result: {calc.get_result()}")
print("Calculator created successfully")
elif test_case == "addition_test":
# Verifica la funzionalità di addizione
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":
# Verifica la funzionalità di sottrazione
calc = Calculator()
calc.add(20) # Inizia con 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":
# Verifica la funzionalità di moltiplicazione
calc = Calculator()
calc.add(5) # Inizia con 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":
# Verifica la funzionalità di divisione
calc = Calculator()
calc.add(100) # Inizia con 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":
# Verifica la gestione dell'errore di divisione per zero
calc = Calculator()
calc.add(50)
print(f"Initial value: {calc.get_result()}")
result = calc.divide(0) # Dovrebbe stampare un messaggio di errore
print(f"Result after division by zero: {result}")
print(f"Value unchanged: {calc.get_result()}")
elif test_case == "clear_test":
# Verifica la funzionalità di 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":
# Verifica tutte le operazioni in sequenza
calc = Calculator()
# Esegui una serie di operazioni
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()}")
# Verifica la gestione degli errori
calc.divide(0) # Dovrebbe stampare un errore
print(f"After division by zero attempt: {calc.get_result()}")
# Azzera e ricomincia da capo
calc.clear()
calc.add(100)
print(f"After clear and add 100: {calc.get_result()}")
else:
print("Unknown test case")
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti di OOP
File esterniIntroduzione a OOPClassi vs. oggettiIl parametro selfMetodiAttributiMetodo costruttore (__init__)Riepilogo - Calcolatrice semplice4Ereditarietà
Ereditarietà di baseLa funzione super()Sovrascrittura dei metodiEreditarietà multiplaOrdine di risoluzione dei metodiRiepilogo - Gerarchia dei dipendenti7Metodi speciali
Introduzione ai metodi magiciSovraccarico degli operatoriMetodi magici dei contenitoriRiepilogo - Lista personalizzata10Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneModello SingletonModello FactoryModello ObserverModello Strategy2Decoratori
Introduzione ai decoratoriDecoratore di proprietàDecoratore di metodo staticoDecoratore di metodo di classe5Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàMixinMetodi statici e di classeDecorator di classeContext manager11Pattern di progettazione - Parte 2
Pattern dei comandiPattern adattatorePattern decoratorePattern metodo templatePattern statoPattern composito3Proprietà delle classi
Variabili di istanza e di classeDecorator delle proprietàAttributi privatiRiepilogo - Gestore di conti bancari6Incapsulamento
Membri pubblici, protetti e privatiModificatori di accessoOccultamento delle informazioniDecorator delle proprietà: avanzatiRipasso - Sistema di registri degli studenti12Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e UtenteSistema di prestitoFunzionalità di ricercaInterfaccia amministratoreTest e integrazioneEsercitati da solo: Compilatore Python online