Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - آلة حاسبة بسيطة

جزء من قسم Object Oriented Programming في رحلة Python على Coddy — الدرس 8 من 64.

challenge icon

التحدي

متوسط

يجب أن يقوم كلاس Calculator الخاص بك في calculator.py بما يلي:

  1. امتلاك منشئ (constructor) يقوم بتهيئة سمة result إلى 0
  2. تضمين دوال لـ add، و subtract، و multiply، و divide بحيث تقوم كل منها بـ:
    • استقبال رقم كمعامل (argument)
    • إجراء العملية الحسابية بين result الحالي والرقم
    • تحديث سمة result
    • إرجاع النتيجة الجديدة
  3. تضمين دالة clear تقوم بإعادة تعيين result إلى 0
  4. تضمين دالة get_result تقوم بإرجاع النتيجة الحالية
  5. بالنسبة لدالة 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