Files
labs/labPython/lab5/Spis22.py
2026-04-18 14:42:00 +05:00

60 lines
1.4 KiB
Python
Executable File

def evaluate(expr: str) -> int:
expr = expr.replace(" ", "")
pos = 0
def number():
nonlocal pos
start = pos
if pos < len(expr) and expr[pos] in '+-':
pos += 1
while pos < len(expr) and expr[pos].isdigit():
pos += 1
return int(expr[start:pos])
def factor():
nonlocal pos
if pos < len(expr) and expr[pos] == '(':
pos += 1
result = expression()
if pos >= len(expr) or expr[pos] != ')':
raise ValueError
pos += 1
return result
return number()
def term():
nonlocal pos
result = factor()
while pos < len(expr) and expr[pos] in '*/':
op = expr[pos]
pos += 1
if op == '*':
result *= factor()
else:
num = factor()
if num == 0:
raise ValueError
result //= num
return result
def expression():
nonlocal pos
result = term()
while pos < len(expr) and expr[pos] in '+-':
op = expr[pos]
pos += 1
if op == '+':
result += term()
else:
result -= term()
return result
result = expression()
if pos < len(expr):
raise ValueError
return result
expr = input()
print(evaluate(expr))