69 lines
1.5 KiB
Python
69 lines
1.5 KiB
Python
# Returns result and index
|
|
def para(s: str, i: int) -> tuple[int, int]:
|
|
a, b = 0, 0
|
|
operator = '+'
|
|
c = s[i]
|
|
while c != ')':
|
|
c = s[i]
|
|
if c == '(':
|
|
i += 1
|
|
b, i = para(s, i)
|
|
match operator:
|
|
case '+':
|
|
a = a + b
|
|
case '-':
|
|
a = a - b
|
|
case '*':
|
|
a = a * b
|
|
elif c.isdigit():
|
|
b = int(c)
|
|
match operator:
|
|
case '+':
|
|
a = a + b
|
|
case '-':
|
|
a = a - b
|
|
case '*':
|
|
a = a * b
|
|
i += 1
|
|
else:
|
|
operator = c
|
|
i += 1
|
|
|
|
return (a, i)
|
|
|
|
def main():
|
|
s: str = input()
|
|
|
|
# Wish I could just use eval() but it uses pemdas
|
|
a, b = 0, 0
|
|
operator = '+'
|
|
i = 0
|
|
while i < len(s):
|
|
c = s[i]
|
|
if c == '(':
|
|
i += 1
|
|
b, i = para(s, i)
|
|
match operator:
|
|
case '+':
|
|
a = a + b
|
|
case '-':
|
|
a = a - b
|
|
case '*':
|
|
a = a * b
|
|
elif c.isdigit():
|
|
b = int(c)
|
|
match operator:
|
|
case '+':
|
|
a = a + b
|
|
case '-':
|
|
a = a - b
|
|
case '*':
|
|
a = a * b
|
|
i += 1
|
|
else:
|
|
operator = c
|
|
i += 1
|
|
print(a)
|
|
|
|
if __name__ == '__main__':
|
|
main() |