Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def searchChar(expr, char):
- parenthesisCounter = 0
- for i in range(len(expr)-1, -1, -1):
- if expr[i] == ")":
- parenthesisCounter += 1
- elif expr[i] == "(":
- parenthesisCounter -= 1
- elif expr[i] == char and parenthesisCounter == 0 and expr[i-1] not in ("*", "/", "-", "+", "^"):
- return i
- return -1
- def calc(expr):
- try:
- return float(expr)
- except ValueError:
- pass
- searchingOrder = ["+", "-", "*", "/", "^"]
- for op in searchingOrder:
- idx = searchChar(expr, op)
- if idx != -1:
- left = expr[:idx]
- right = expr[idx+1:]
- if op == "+":
- if len(left) == 0:
- left = "0"
- return calc(left) + calc(right)
- elif op == "-":
- if len(left) == 0:
- left = "0"
- return calc(left) - calc(right)
- elif op == "*":
- return calc(left) * calc(right)
- elif op == "/":
- return calc(left) / calc(right)
- elif op == "^":
- return calc(left) ** calc(right)
- if expr[0] == "(":
- # Strip parenthesis from expr and calc
- return calc(expr[1:-1])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement