programming-challenges/ARTHEVAL2.py
2025-03-11 20:28:30 -05:00

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()