last lab
This commit is contained in:
59
labPython/lab5/Spis22.py
Executable file
59
labPython/lab5/Spis22.py
Executable file
@@ -0,0 +1,59 @@
|
||||
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))
|
||||
Reference in New Issue
Block a user