Skip to content

calculator

文件信息

  • 📄 原文件:calculator.py
  • 🔤 语言:python

计算器模块 这是被测试的代码,将在 calculator_test.py 中进行测试。

完整代码

python
from typing import Union

Number = Union[int, float]


class Calculator:
    """简单计算器类"""

    def __init__(self):
        self.history = []

    def add(self, a: Number, b: Number) -> Number:
        """加法"""
        result = a + b
        self._record(f"{a} + {b} = {result}")
        return result

    def subtract(self, a: Number, b: Number) -> Number:
        """减法"""
        result = a - b
        self._record(f"{a} - {b} = {result}")
        return result

    def multiply(self, a: Number, b: Number) -> Number:
        """乘法"""
        result = a * b
        self._record(f"{a} * {b} = {result}")
        return result

    def divide(self, a: Number, b: Number) -> Number:
        """除法"""
        if b == 0:
            raise ValueError("除数不能为零")
        result = a / b
        self._record(f"{a} / {b} = {result}")
        return result

    def power(self, base: Number, exponent: Number) -> Number:
        """幂运算"""
        result = base ** exponent
        self._record(f"{base} ^ {exponent} = {result}")
        return result

    def _record(self, operation: str) -> None:
        """记录操作历史"""
        self.history.append(operation)

    def clear_history(self) -> None:
        """清空历史"""
        self.history.clear()

    def get_history(self) -> list:
        """获取历史"""
        return self.history.copy()


def factorial(n: int) -> int:
    """
    计算阶乘

    Args:
        n: 非负整数

    Returns:
        n 的阶乘

    Raises:
        ValueError: 当 n 为负数时
    """
    if n < 0:
        raise ValueError("n 必须是非负整数")
    if n <= 1:
        return 1
    return n * factorial(n - 1)


def fibonacci(n: int) -> int:
    """
    计算斐波那契数列第 n 项

    Args:
        n: 非负整数

    Returns:
        第 n 个斐波那契数

    Examples:
        >>> fibonacci(0)
        0
        >>> fibonacci(1)
        1
        >>> fibonacci(10)
        55
    """
    if n < 0:
        raise ValueError("n 必须是非负整数")
    if n <= 1:
        return n
    a, b = 0, 1
    for _ in range(2, n + 1):
        a, b = b, a + b
    return b


def is_prime(n: int) -> bool:
    """
    判断是否为素数

    Args:
        n: 正整数

    Returns:
        是否为素数

    Examples:
        >>> is_prime(2)
        True
        >>> is_prime(4)
        False
        >>> is_prime(17)
        True
    """
    if n < 2:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    for i in range(3, int(n ** 0.5) + 1, 2):
        if n % i == 0:
            return False
    return True


if __name__ == "__main__":
    # 简单测试
    calc = Calculator()
    print(calc.add(10, 5))
    print(calc.divide(10, 3))
    print(calc.get_history())

    print(f"factorial(5) = {factorial(5)}")
    print(f"fibonacci(10) = {fibonacci(10)}")
    print(f"is_prime(17) = {is_prime(17)}")

💬 讨论

使用 GitHub 账号登录后即可参与讨论

基于 MIT 许可发布