Skip to content

Instantly share code, notes, and snippets.

@killreal17
Created August 1, 2019 13:00
Show Gist options
  • Save killreal17/704a85b49d5aed7cfbc52659807de0e8 to your computer and use it in GitHub Desktop.
Save killreal17/704a85b49d5aed7cfbc52659807de0e8 to your computer and use it in GitHub Desktop.
smart calc
### special for iVan
def reformat(line):
expression = []
element = '&'
line.replace(' ', '')
for item in line:
if item in '0123456789':
if element == '&':
element = int(item)
else:
element = element * 10 + int(item)
else:
expression.append(element)
expression.append(item)
element = '&'
expression.append(element)
for i in range(0,len(expression)):
if expression[i] == '-':
expression[i] = '+'
expression[i+1] *= -1
while '&' in expression:
expression.remove('&')
return(expression)
def find_brace(expression):
result = {'place': 0,
'lenght': 0,
'value': []}
current_place = 0
for item in expression:
result['value'].append(item)
if item == '(':
result['value'].clear()
result['place'] = current_place
elif item == ')':
result['value'].remove(')')
result['lenght'] = current_place - result['place'] - 1
return result
current_place += 1
def multiply(expression):
for i in range(0, len(expression)):
if expression[i] == '*':
expression[i+1] = expression[i-1] * expression[i+1]
expression[i-1] = expression[i] = '&'
if expression[i] == '/':
expression[i+1] = expression[i-1] / expression[i+1]
expression[i-1] = expression[i] = '&'
while '&' in expression:
expression.remove('&')
return expression
def add(expression):
for i in range(0, len(expression)):
if expression[i] == '+':
expression[i+1] = expression[i-1] + expression[i+1]
expression[i-1] = expression[i] = '&'
while '&' in expression:
expression.remove('&')
return expression
def brace_expancion(expression):
while '(' in expression:
brace = find_brace(expression)
brace['value'] = multiply(brace['value'])
brace['value'] = add(brace['value'])
expression = expression[:brace['place']] + brace['value'] + expression[brace['place']+brace['lenght'] + 2:]
return expression
print(add(multiply(brace_expancion(reformat(input()))))[0])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment