אופרטור אונרי
שיעור 10 מתוך 29 בקורס פרויקט מחשבון באמצעות Python של Coddy.
כפי שדנו בשיעור הקודם, אנחנו יכולים להוסיף תמיכה באופרטור שמקבל מספר יחיד ולא זוג.
הנה כמה דוגמאות עם eval,
eval(['-', 4])->-4eval(['+', 4, ['-', 4]])->0eval(['*', ['+', 4], ['-', 4]])->-16
אתגר
קלהוסף תמיכה באופרטור למספר יחיד עבור הפונקציה eval.
נסו בעצמכם
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)כל השיעורים ביחידה פרויקט מחשבון באמצעות Python
תרגלו בעצמכם: קומפיילר Python אונליין