مراجعة - آلة حاسبة بسيطة
جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 8 من 64.
التحدي
متوسطيجب أن يقوم كلاس Calculator الخاص بك في calculator.py بما يلي:
- امتلاك منشئ (constructor) يقوم بتهيئة سمة
resultإلى 0 - تضمين دوال لـ
add، وsubtract، وmultiply، وdivideبحيث تقوم كل منها بـ:- استقبال رقم كمعامل (argument)
- إجراء العملية الحسابية بين
resultالحالي والرقم - تحديث سمة
result - إرجاع النتيجة الجديدة
- تضمين دالة
clearتقوم بإعادة تعيينresultإلى 0 - تضمين دالة
get_resultتقوم بإرجاع النتيجة الحالية - بالنسبة لدالة
divide، يجب عليك معالجة القسمة على صفر من خلال:- التحقق مما إذا كان الرقم المقدم يساوي 0
- إذا كان صفراً، قم بطباعة النص التالي تماماً: "Error: Division by zero"
- ترك سمة
resultدون تغيير في هذه الحالة - إرجاع قيمة
resultغير المتغيرة
سيقوم ملف driver.py باستيراد كلاس Calculator الخاص بك واختباره بكود مشابه لهذا:
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 0اتبع تعليقات TODO في ملف calculator.py لتنفيذ جميع الوظائف المطلوبة.
ورقة مرجعية
قم بإنشاء فئة Calculator تحتوي على عمليات حسابية أساسية:
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.resultمثال على الاستخدام:
calc = Calculator()
calc.add(5) # تصبح النتيجة 5
calc.multiply(3) # تصبح النتيجة 15
calc.divide(0) # يطبع خطأ، تبقى النتيجة دون تغييرجرّب بنفسك
from calculator import Calculator
# معالج حالات الاختبار
test_case = input()
if test_case == "constructor_test":
# اختبار إنشاء الآلة الحاسبة والحالة الأولية
calc = Calculator()
print(f"Initial result: {calc.get_result()}")
print("Calculator created successfully")
elif test_case == "addition_test":
# اختبار وظيفة الجمع
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":
# اختبار وظيفة الطرح
calc = Calculator()
calc.add(20) # البدء بـ 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":
# اختبار وظيفة الضرب
calc = Calculator()
calc.add(5) # البدء بـ 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":
# اختبار وظيفة القسمة
calc = Calculator()
calc.add(100) # البدء بـ 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":
# اختبار معالجة خطأ القسمة على صفر
calc = Calculator()
calc.add(50)
print(f"Initial value: {calc.get_result()}")
result = calc.divide(0) # يجب طباعة رسالة خطأ
print(f"Result after division by zero: {result}")
print(f"Value unchanged: {calc.get_result()}")
elif test_case == "clear_test":
# اختبار وظيفة المسح (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":
# اختبار جميع العمليات بالتسلسل
calc = Calculator()
# إجراء سلسلة من العمليات
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()}")
# اختبار معالجة الأخطاء
calc.divide(0) # يجب طباعة خطأ
print(f"After division by zero attempt: {calc.get_result()}")
# المسح والبدء من جديد
calc.clear()
calc.add(100)
print(f"After clear and add 100: {calc.get_result()}")
else:
print("Unknown test case")
جميع دروس Object Oriented Programming
1أساسيات OOP
الملفات الخارجيةمقدمة في OOPClasses مقابل Objectsمعامل selfMethodsAttributesدالة البناء (__init__)مراجعة - آلة حاسبة بسيطة4الوراثة
الوراثة الأساسيةدالة ()superإعادة تعريف الدوال (Method Overriding)الوراثة المتعددةترتيب استدعاء الدوال (Method Resolution Order)مراجعة - هيكلية الموظفين5تعدد الأشكال
مراجعة إعادة تعريف الدوالمفهوم Duck Typingالأصناف والدوال المجردةتصميم الواجهاتملخص - حاسبة الأشكال