Récapitulatif - Calculatrice simple
Fait partie de la section Object Oriented Programming du Journey Python de Coddy — leçon 8 sur 64.
Défi
MoyenVotre classe Calculator dans calculator.py doit :
- Avoir un constructeur qui initialise un attribut
resultà 0 - Inclure des méthodes pour
add,subtract,multiply, etdividequi chacune :- Prennent un nombre comme argument
- Effectuent l'opération entre le
resultactuel et le nombre - Mettent à jour l'attribut
result - Retournent le nouveau résultat
- Inclure une méthode
clearqui réinitialise leresultà 0 - Inclure une méthode
get_resultqui retourne le résultat actuel - Pour la méthode
divide, vous devez gérer la division par zéro en :- Vérifiant si le nombre fourni est égal à 0
- S'il est égal à zéro, affichant exactement : "Error: Division by zero"
- Laissant l'attribut
resultinchangé dans ce cas - Retournant la valeur de
resultinchangée
Le fichier driver.py importera votre classe Calculator et la testera avec un code similaire à celui-ci :
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 0Suivez les commentaires TODO dans le fichier calculator.py pour implémenter toutes les fonctionnalités requises.
Aide-mémoire
Créez une classe Calculator avec des opérations arithmétiques de base :
class Calculator:
def __init__(self):
self.result = 0
def add(self, number):
self.result += number
return self.result
def subtract(self, number):
self.result -= number
return self.result
def multiply(self, number):
self.result *= number
return self.result
def divide(self, number):
if number == 0:
print("Error: Division by zero")
return self.result
self.result /= number
return self.result
def clear(self):
self.result = 0
def get_result(self):
return self.resultExemple d'utilisation :
calc = Calculator()
calc.add(5) # result devient 5
calc.multiply(3) # result devient 15
calc.divide(0) # affiche une erreur, result inchangéEssayez vous-même
from calculator import Calculator
# Gestionnaire de cas de test
test_case = input()
if test_case == "constructor_test":
# Teste la création de la calculatrice et son état initial
calc = Calculator()
print(f"Initial result: {calc.get_result()}")
print("Calculator created successfully")
elif test_case == "addition_test":
# Teste la fonctionnalité d'addition
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":
# Teste la fonctionnalité de soustraction
calc = Calculator()
calc.add(20) # Commence avec 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":
# Teste la fonctionnalité de multiplication
calc = Calculator()
calc.add(5) # Commence avec 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":
# Teste la fonctionnalité de division
calc = Calculator()
calc.add(100) # Commence avec 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":
# Teste la gestion d'erreur de division par zéro
calc = Calculator()
calc.add(50)
print(f"Initial value: {calc.get_result()}")
result = calc.divide(0) # Devrait afficher un message d'erreur
print(f"Result after division by zero: {result}")
print(f"Value unchanged: {calc.get_result()}")
elif test_case == "clear_test":
# Teste la fonctionnalité d'effacement
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":
# Teste toutes les opérations en séquence
calc = Calculator()
# Effectue une série d'opérations
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()}")
# Teste la gestion des erreurs
calc.divide(0) # Devrait afficher une erreur
print(f"After division by zero attempt: {calc.get_result()}")
# Efface et recommence à zéro
calc.clear()
calc.add(100)
print(f"After clear and add 100: {calc.get_result()}")
else:
print("Unknown test case")
Toutes les leçons de Object Oriented Programming
1Les fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe paramètre selfMéthodesAttributsMéthode constructeur (__init__)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLa fonction super()Redéfinition de méthodeHéritage multipleOrdre de résolution des méthodesRécapitulatif - Hiérarchie des employés7Méthodes spéciales
Introduction aux méthodes magiquesSurcharge d'opérateursMéthodes magiques de conteneurRécapitulatif - Liste personnalisée10Patrons de conception, Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy2Décorateurs
Introduction aux décorateursDécorateur de propriétéDécorateur de méthode statiqueDécorateur de méthode de classe5Polymorphisme
Retour sur la redéfinition de méthodeDuck TypingClasses et méthodes abstraitesConception d'interfacesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageMixinsMéthodes statiques et de classeDécorateurs de classeGestionnaires de contexte11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Propriétés de classe
Variables d'instance vs variables de classeDécorateurs de propriétéAttributs privésRécapitulatif - Gestionnaire de compte bancaire