Operatore unario
Lezione 10 di 29 del corso Progetto di calcolatrice con Python di Coddy.
Come abbiamo discusso nella lezione precedente, possiamo aggiungere il supporto agli operatori con un singolo numero e non solo alle coppie.
Ecco alcuni esempi con eval,
eval(['-', 4])->-4eval(['+', 4, ['-', 4]])->0eval(['*', ['+', 4], ['-', 4]])->-16
Sfida
FacileAggiungi il supporto per l’operatore con un singolo numero per la funzione eval.
Provalo tu
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)Tutte le lezioni di Progetto di calcolatrice con Python
Esercitati da solo: Compilatore Python online