Module dreamtim.calculator

This module contains only one class - Calculator.

Please note that usual floats are used here, not decimal, so this calculator is not suitable for ultra-precise calculations!

To perform arithmetic operations, just create an instance:

>>> calc_obj = Calculator()
>>> calc_obj
Calculator(value=0.0, show_value=False, show_operation=False, round_number=2)
Expand source code
"""This module contains only one class - Calculator.

Please note that usual floats are used here, not decimal,
so this calculator is not suitable for ultra-precise calculations!

To perform arithmetic operations, just create an instance:
>>> calc_obj = Calculator()
>>> calc_obj
Calculator(value=0.0, show_value=False, show_operation=False, round_number=2)
"""


class Calculator:
    """This class is an implementation of calculator,
    which performs actions with a value inside its memory.

    To start:
    >>> calc_obj = Calculator(5)

    For arithmetic operations use methods:
    >>> calc_obj.add(3)
    8.0

    Such methods can get not only float, but also
    int or str, that can be converted into float.

    To check current status, use attributes:
    >>> calc_obj.value
    8.0

    To set up print messages and rounding, use attributes:
    >>> calc_obj.show_operation = True
    >>> calc_obj.round_number = 3

    >>> result = calc_obj.divide(3)
    Divided by 3.000!
    >>> result
    2.6666666666666665
    >>> print(calc_obj)
    Calculator object. Current value: 2.667

    Pay attention to the fact that you are passing
    the correct types as an attributes, otherwise you can get errors!

    Attributes:
        value, float: "memory" of the calculator
        show_value, bool: determines whether print messages about
            the current value in the calculator when performing
            arithmetic operations (default is False)
        show_operation, bool: determines whether print messages
            about the perfomed operation (default is False)
        round_number, int: the number of decimal places in numbers
            in the messages and in a string representation (default is 2)
    """

    def __init__(
            self, value = 0,
            show_value: bool = False,
            show_operation: bool = False,
            round_number: int = 2) -> None:
        # Initialize an object with default values
        self.value = float(value)
        self.show_value = show_value
        self.show_operation = show_operation
        self.round_number = round_number

    def __repr__(self) -> str:
        # Represent an object as a string, according to Python docs
        attrs_str = ', '.join(f'{key}={value}' for key, value in self.__dict__.items())
        return f'Calculator({attrs_str})'

    def __str__(self) -> str:
        # Represent an object as a string for print etc
        return f'Calculator object. Current value:{self.value: .{self.round_number}f}'

    def add(self, added_value) -> float:
        """Adds the passed number to the value of the calculator"""

        added_value = float(added_value)
        self.value += added_value

        if self.show_operation:
            print(f'Added{added_value: .{self.round_number}f}!')
        if self.show_value:
            print(self.__str__())

        return self.value

    def substract(self, substracted_value) -> float:
        """Subatracts the passed number from the value of the calculator"""

        substracted_value = float(substracted_value)
        self.value -= substracted_value

        if self.show_operation:
            print(f'Substracted{substracted_value: .{self.round_number}f}!')
        if self.show_value:
            print(self.__str__())

        return self.value

    def multiply(self, multiplier) -> float:
        """Multiplies the value of the calculator by the passed number"""

        multiplier = float(multiplier)
        self.value *= multiplier

        if self.show_operation:
            print(f'Multiplied by{multiplier: .{self.round_number}f}!')
        if self.show_value:
            print(self.__str__())

        return self.value

    def divide(self, divider) -> float:
        """Divides the value of the calculator by the passed number"""

        divider = float(divider)
        self.value /= divider

        if self.show_operation:
            print(f'Divided by{divider: .{self.round_number}f}!')
        if self.show_value:
            print(self.__str__())

        return self.value

    def root(self, n):
        """Takes (passed number) root of the value of the calculator"""

        n = float(n)
        if self.value > 0:
            self.value = self.value ** (1 / n)
        elif self.value < 0:
            self.value = -((-self.value) ** (1 / n))
        else:
            self.value = 0.0
        
        if self.show_operation:
            print(f'The root of the{n: .{self.round_number}f} degree has been taken!')
        if self.show_value:
            print(self.__str__())

        print(self.value)
        return self.value

    def reset(self) -> None:
        """Resets the memory in the calculator:
        >>> calc_obj = Calculator(5)
        >>> calc_obj.reset()
        >>> calc_obj.value
        0.0
        """
        self.value = 0.0
        if self.show_operation:
            print(f'The memory has been reset! Current value:{self.value: .{self.round_number}}')


if __name__ == '__main__':

    import doctest
    
    print(doctest.testmod())

Classes

class Calculator (value=0, show_value: bool = False, show_operation: bool = False, round_number: int = 2)

This class is an implementation of calculator, which performs actions with a value inside its memory.

To start:

>>> calc_obj = Calculator(5)

For arithmetic operations use methods:

>>> calc_obj.add(3)
8.0

Such methods can get not only float, but also int or str, that can be converted into float.

To check current status, use attributes:

>>> calc_obj.value
8.0

To set up print messages and rounding, use attributes:

>>> calc_obj.show_operation = True
>>> calc_obj.round_number = 3
>>> result = calc_obj.divide(3)
Divided by 3.000!
>>> result
2.6666666666666665
>>> print(calc_obj)
Calculator object. Current value: 2.667

Pay attention to the fact that you are passing the correct types as an attributes, otherwise you can get errors!

Attributes

value, float: "memory" of the calculator show_value, bool: determines whether print messages about the current value in the calculator when performing arithmetic operations (default is False) show_operation, bool: determines whether print messages about the perfomed operation (default is False) round_number, int: the number of decimal places in numbers in the messages and in a string representation (default is 2)

Expand source code
class Calculator:
    """This class is an implementation of calculator,
    which performs actions with a value inside its memory.

    To start:
    >>> calc_obj = Calculator(5)

    For arithmetic operations use methods:
    >>> calc_obj.add(3)
    8.0

    Such methods can get not only float, but also
    int or str, that can be converted into float.

    To check current status, use attributes:
    >>> calc_obj.value
    8.0

    To set up print messages and rounding, use attributes:
    >>> calc_obj.show_operation = True
    >>> calc_obj.round_number = 3

    >>> result = calc_obj.divide(3)
    Divided by 3.000!
    >>> result
    2.6666666666666665
    >>> print(calc_obj)
    Calculator object. Current value: 2.667

    Pay attention to the fact that you are passing
    the correct types as an attributes, otherwise you can get errors!

    Attributes:
        value, float: "memory" of the calculator
        show_value, bool: determines whether print messages about
            the current value in the calculator when performing
            arithmetic operations (default is False)
        show_operation, bool: determines whether print messages
            about the perfomed operation (default is False)
        round_number, int: the number of decimal places in numbers
            in the messages and in a string representation (default is 2)
    """

    def __init__(
            self, value = 0,
            show_value: bool = False,
            show_operation: bool = False,
            round_number: int = 2) -> None:
        # Initialize an object with default values
        self.value = float(value)
        self.show_value = show_value
        self.show_operation = show_operation
        self.round_number = round_number

    def __repr__(self) -> str:
        # Represent an object as a string, according to Python docs
        attrs_str = ', '.join(f'{key}={value}' for key, value in self.__dict__.items())
        return f'Calculator({attrs_str})'

    def __str__(self) -> str:
        # Represent an object as a string for print etc
        return f'Calculator object. Current value:{self.value: .{self.round_number}f}'

    def add(self, added_value) -> float:
        """Adds the passed number to the value of the calculator"""

        added_value = float(added_value)
        self.value += added_value

        if self.show_operation:
            print(f'Added{added_value: .{self.round_number}f}!')
        if self.show_value:
            print(self.__str__())

        return self.value

    def substract(self, substracted_value) -> float:
        """Subatracts the passed number from the value of the calculator"""

        substracted_value = float(substracted_value)
        self.value -= substracted_value

        if self.show_operation:
            print(f'Substracted{substracted_value: .{self.round_number}f}!')
        if self.show_value:
            print(self.__str__())

        return self.value

    def multiply(self, multiplier) -> float:
        """Multiplies the value of the calculator by the passed number"""

        multiplier = float(multiplier)
        self.value *= multiplier

        if self.show_operation:
            print(f'Multiplied by{multiplier: .{self.round_number}f}!')
        if self.show_value:
            print(self.__str__())

        return self.value

    def divide(self, divider) -> float:
        """Divides the value of the calculator by the passed number"""

        divider = float(divider)
        self.value /= divider

        if self.show_operation:
            print(f'Divided by{divider: .{self.round_number}f}!')
        if self.show_value:
            print(self.__str__())

        return self.value

    def root(self, n):
        """Takes (passed number) root of the value of the calculator"""

        n = float(n)
        if self.value > 0:
            self.value = self.value ** (1 / n)
        elif self.value < 0:
            self.value = -((-self.value) ** (1 / n))
        else:
            self.value = 0.0
        
        if self.show_operation:
            print(f'The root of the{n: .{self.round_number}f} degree has been taken!')
        if self.show_value:
            print(self.__str__())

        print(self.value)
        return self.value

    def reset(self) -> None:
        """Resets the memory in the calculator:
        >>> calc_obj = Calculator(5)
        >>> calc_obj.reset()
        >>> calc_obj.value
        0.0
        """
        self.value = 0.0
        if self.show_operation:
            print(f'The memory has been reset! Current value:{self.value: .{self.round_number}}')

Methods

def add(self, added_value) ‑> float

Adds the passed number to the value of the calculator

Expand source code
def add(self, added_value) -> float:
    """Adds the passed number to the value of the calculator"""

    added_value = float(added_value)
    self.value += added_value

    if self.show_operation:
        print(f'Added{added_value: .{self.round_number}f}!')
    if self.show_value:
        print(self.__str__())

    return self.value
def divide(self, divider) ‑> float

Divides the value of the calculator by the passed number

Expand source code
def divide(self, divider) -> float:
    """Divides the value of the calculator by the passed number"""

    divider = float(divider)
    self.value /= divider

    if self.show_operation:
        print(f'Divided by{divider: .{self.round_number}f}!')
    if self.show_value:
        print(self.__str__())

    return self.value
def multiply(self, multiplier) ‑> float

Multiplies the value of the calculator by the passed number

Expand source code
def multiply(self, multiplier) -> float:
    """Multiplies the value of the calculator by the passed number"""

    multiplier = float(multiplier)
    self.value *= multiplier

    if self.show_operation:
        print(f'Multiplied by{multiplier: .{self.round_number}f}!')
    if self.show_value:
        print(self.__str__())

    return self.value
def reset(self) ‑> None

Resets the memory in the calculator:

>>> calc_obj = Calculator(5)
>>> calc_obj.reset()
>>> calc_obj.value
0.0
Expand source code
def reset(self) -> None:
    """Resets the memory in the calculator:
    >>> calc_obj = Calculator(5)
    >>> calc_obj.reset()
    >>> calc_obj.value
    0.0
    """
    self.value = 0.0
    if self.show_operation:
        print(f'The memory has been reset! Current value:{self.value: .{self.round_number}}')
def root(self, n)

Takes (passed number) root of the value of the calculator

Expand source code
def root(self, n):
    """Takes (passed number) root of the value of the calculator"""

    n = float(n)
    if self.value > 0:
        self.value = self.value ** (1 / n)
    elif self.value < 0:
        self.value = -((-self.value) ** (1 / n))
    else:
        self.value = 0.0
    
    if self.show_operation:
        print(f'The root of the{n: .{self.round_number}f} degree has been taken!')
    if self.show_value:
        print(self.__str__())

    print(self.value)
    return self.value
def substract(self, substracted_value) ‑> float

Subatracts the passed number from the value of the calculator

Expand source code
def substract(self, substracted_value) -> float:
    """Subatracts the passed number from the value of the calculator"""

    substracted_value = float(substracted_value)
    self.value -= substracted_value

    if self.show_operation:
        print(f'Substracted{substracted_value: .{self.round_number}f}!')
    if self.show_value:
        print(self.__str__())

    return self.value