Menu
Coddy logo textTech

Single number operator

Lesson 10 of 29 in Coddy's Calculator project using Python course.

As we discussed in previous lesson we can add support to single number operator and not a pair.

This is some examples with eval,

  • eval(['-', 4])  ->  -4
  • eval(['+', 4, ['-', 4]])  ->  0
  • eval(['*', ['+', 4], ['-', 4]])  ->  -16
challenge icon

Challenge

Easy

Add support for single number operator for the eval function.

Try it yourself

def calc(op, n1, n2=None):
    if not isinstance(n1, int) and not isinstance(n1, float):
        raise Exception('Invalid number "' + str(n1) + '"')

    if n2 is None:
        if op == '+' or op == 'add':
            return n1
        if op == '-' or op == 'sub':
            return -n1

        raise Exception('Invalid operator "' + op + '"')

    if not isinstance(n2, int) and not isinstance(n2, float):
        raise Exception('Invalid number "' + str(n2) + '"')

    if op == '+' or op == 'add':
        return n1 + n2
    if op == '-' or op == 'sub':
        return n1 - n2
    if op == '*' or op == 'mul':
        return n1 * n2
    if op == '/' or op == 'div':
        if n2 == 0:
            raise Exception("Division by zero")
        return n1 / n2
    if op == '%' or op == 'mod':
        if n2 == 0:
            raise Exception("Division by zero")
        return n1 % n2
    if op == '^' or op == 'pow':
        return n1 ** n2

    raise Exception('Invalid operator "' + op + '"')


def eval(lst):
    op = lst[0]
    n1 = lst[1]
    n2 = lst[2]
    if not isinstance(n1, list) and not isinstance(n2, list):
        return calc(op, n1, n2)
    
    if isinstance(n1, list):
        n1 = eval(n1)
    if isinstance(n2, list):
        n2 = eval(n2)

    return calc(op, n1, n2)

All lessons in Calculator project using Python