DEV Community

HHMathewChan
HHMathewChan

Posted on • Originally published at rebirthwithcode.tech

Python Exercise 15 : Perform calculation on a string

Question

  • Create a function to perform basic arithmetic operations

    • that includes additionsubtractionmultiplication and division 
    • on a string number
  • For the challenge, we are going to have only two numbers and 1 valid operator in between.

  • The return value should be a number.

Restriction

  • eval() is not allowed.

  • In case of division, whenever the second number equals "0" return -1.

"15 // 0"   -1
Enter fullscreen mode Exit fullscreen mode

Example

arithmetic_operation("12 + 12")  24 // 12 + 12 = 24

arithmetic_operation("12 - 12")  24 // 12 - 12 = 0

arithmetic_operation("12 * 12")  144 // 12 * 12 = 144

arithmetic_operation("12 // 0")  -1 // 12 / 0 = -1
Enter fullscreen mode Exit fullscreen mode

My attempt

  • algorithm
>>separate the number and operator in the string by space
  call split() method
>>perfrom action based whether it is a number or valid operator
  import operator module
  build a dictionary with key=the operator string, value = the equivent function
  check the second separated part, which must be operator, to call the equivent function from the dictionary
  pass the first and thrid element as argument to the function
>>return the result
Enter fullscreen mode Exit fullscreen mode
  • code
import operator  


def arithmetic_operation(math_sting: str):  
    # split the string  
    splited_list = math_sting.split()  
    first_num = int(splited_list[0])  
    second_num = int(splited_list[-1])  
    operation_to_call = splited_list[1]  
    # In case of division, whenever the second number equals "0" return`-1`.  
    if operation_to_call == "//" and second_num == 0:  
        return -1  
    # setup dictionary to call the maths operation  
    math_dictionary = {"+": operator.add(first_num, second_num),  
                       "-": operator.sub(first_num, second_num),  
                       "*": operator.mul(first_num, second_num),  
                       "//": operator.floordiv(first_num, second_num)}  
    # find the equivalent operation from the dictionary and store the result  
    result = math_dictionary[operation_to_call]  
    return result
Enter fullscreen mode Exit fullscreen mode

Other solution

def arithmetic_operation(equation):  
    '''  
    Returns the result of evaluating the string equation    '''   
    from operator import add, sub, floordiv, mul  

    operator_dict = {'+': add, '-': sub, '*': mul, '//': floordiv}  
    # split the equation into three part  
    first_num, operation, second_num = equation.split()  

    try:  
        # call the operation from the dictionary and perform the calculation  
        return operator_dict[operation](int(first_num), int(second_num))  
    # In case of division, whenever the second number equals "0" return`-1`.  
    except ZeroDivisionError:  
        return -1
Enter fullscreen mode Exit fullscreen mode

Easiest understand method

def arithmetic_operation(equation):  
    first_num, operation, second_num = equation.split()  
    if operation == '+':  
        return int(first_num) + int(second_num)  
    if operation == '-':  
        return int(first_num) - int(second_num)  
    if operation == '*':  
        return int(first_num) * int(second_num)  
    if operation == '//' and second_num == '0':  
        return -1  
    return int(first_num) // int(second_num)
Enter fullscreen mode Exit fullscreen mode

My reflection

  • I have learned that import statement can be exist inside a function. When you expect an error would occur, should use exceptional handling to deal with it.

Credit

challenge on edabit

Top comments (0)