復習:簡易電卓
CoddyのPythonジャーニー「Object Oriented Programming」セクションの一部 — レッスン 8/64。
チャレンジ
中級calculator.py 内の Calculator クラスは、以下の要件を満たす必要があります:
result属性を 0 に初期化するコンストラクタを持つことadd、subtract、multiply、およびdivideのメソッドを含み、それぞれが以下の動作をすること:- 数値を引数として受け取る
- 現在の
resultとその数値の間で演算を行う result属性を更新する- 新しい結果を返す
resultを 0 にリセットするclearメソッドを含むこと- 現在の結果を返す
get_resultメソッドを含むこと 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 0calculator.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")