Menu
Coddy logo textTech

復習:簡易電卓

CoddyのPythonジャーニー「Object Oriented Programming」セクションの一部 — レッスン 8/64。

challenge icon

チャレンジ

中級

calculator.py 内の Calculator クラスは、以下の要件を満たす必要があります:

  1. result 属性を 0 に初期化するコンストラクタを持つこと
  2. addsubtractmultiply、および divide のメソッドを含み、それぞれが以下の動作をすること:
    • 数値を引数として受け取る
    • 現在の result とその数値の間で演算を行う
    • result 属性を更新する
    • 新しい結果を返す
  3. result を 0 にリセットする clear メソッドを含むこと
  4. 現在の結果を返す get_result メソッドを含むこと
  5. divide メソッドについては、以下の手順で 0 による除算を処理すること:
    • 提供された数値が 0 に等しいか確認する
    • もし 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

calculator.py ファイル内の TODO コメントに従って、必要なすべての機能を実装してください。

チートシート

基本的な算術演算を行う 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)       # result becomes 5
calc.multiply(3)  # result becomes 15
calc.divide(0)    # prints error, result unchanged

自分で試してみよう

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":
    # クリア機能のテスト
    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のすべてのレッスン