Skip to content
Snippets Groups Projects
Commit e8f6c2f2 authored by leh0044's avatar leh0044
Browse files

Add new file

parent 74d01393
No related merge requests found
lab1 0 → 100644
def evaluate_expression(expr):
def apply_op(op, vals):
r, l = vals.pop(), vals.pop()
if op == '+': vals.append(l + r)
elif op == '-': vals.append(l - r)
elif op == '*': vals.append(l * r)
elif op == '/': vals.append(l / r)
def op_precedence(op1, op2):
precedences = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 0, ')': 0}
return precedences[op1] >= precedences[op2]
operators, values, i = [], [], 0
while i < len(expr):
if expr[i] == ' ':
i += 1
continue
if expr[i] in '0123456789':
j = i
while j < len(expr) and expr[j] in '0123456789':
j += 1
values.append(int(expr[i:j]))
i = j
elif expr[i] == '(':
operators.append(expr[i])
i += 1
elif expr[i] == ')':
while operators[-1] != '(':
apply_op(operators.pop(), values)
operators.pop()
i += 1
else:
while operators and operators[-1] != '(' and op_precedence(operators[-1], expr[i]):
apply_op(operators.pop(), values)
operators.append(expr[i])
i += 1
while operators:
apply_op(operators.pop(), values)
return values[0]
def main():
N = int(input().strip())
for _ in range(N):
expr = input().strip().replace(" ", "")
try:
print(evaluate_expression(expr))
except:
print("ERROR")
if __name__ == "__main__":
main()
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment