Skip to content

Instantly share code, notes, and snippets.

@rohithreddy
Forked from ohaz/main.py
Created May 29, 2021 22:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rohithreddy/4f95d64bc3620c5612e3641911f6a783 to your computer and use it in GitHub Desktop.
Save rohithreddy/4f95d64bc3620c5612e3641911f6a783 to your computer and use it in GitHub Desktop.
Parse math formulas in python and put parentheses around Mult/Div
from __future__ import print_function
import ast
def recurse(node):
if isinstance(node, ast.BinOp):
if isinstance(node.op, ast.Mult) or isinstance(node.op, ast.Div):
print('(', end='')
recurse(node.left)
recurse(node.op)
recurse(node.right)
if isinstance(node.op, ast.Mult) or isinstance(node.op, ast.Div):
print(')', end='')
elif isinstance(node, ast.Add):
print('+', end='')
elif isinstance(node, ast.Sub):
print('-', end='')
elif isinstance(node, ast.Mult):
print('*', end='')
elif isinstance(node, ast.Div):
print('/', end='')
elif isinstance(node, ast.Num):
print(node.n, end='')
else:
for child in ast.iter_child_nodes(node):
recurse(child)
def search_expr(node):
returns = []
for child in ast.iter_child_nodes(node):
if isinstance(child, ast.Expr):
return child
returns.append(search_expr(child))
for ret in returns:
if isinstance(ret, ast.Expr):
return ret
return None
formula = '3+7*8/2'
a = ast.parse(formula)
expr = search_expr(a)
if expr is not None:
recurse(expr)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment