Menu
CoddyTech

Operator unary

Pelajaran 10 dari 29 dalam kursus Proyek kalkulator dengan Python di Coddy.

Seperti yang kita bahas pada pelajaran sebelumnya, kita bisa menambahkan dukungan untuk operator dengan satu angka, bukan sepasang angka.

Berikut beberapa contoh dengan eval,

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

Tantangan

Mudah

Tambahkan dukungan untuk operator satu angka pada fungsi eval.

Coba sendiri

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)

Semua pelajaran di Proyek kalkulator dengan Python

Latihan sendiri: Compiler Python online