1
0
Fork 0
cp/tht/C/Q-2016/bai2.py

48 lines
1.4 KiB
Python

#!/usr/bin/env python3
d = {'+': '+', '-': '-', '.': '*', ':': '/', '^': '**'}
def Steps(string):
val = int()
for char in string:
if char in '+-.:^':
val += 1
return val
def Calc(string):
global d
for char in '+-.:^':
string = string.replace(char, ' {} '.format(char))
l = string.split()
for char in '^.:+-':
if char in l:
idx = l.index(char)
s = ' '.join(l[idx - 1:idx + 2])
return string.replace(s, str(eval(s.replace(char, d[char]))))
def MetaCalc(string):
for idx0, char0 in enumerate(string):
if char0 == ')':
for idx1, char1 in enumerate(reversed(string)):
if char1 == '(':
idx1 = len(string) - idx1 - 1
s = '({})'.format(Calc(string[idx1 + 1:idx0]))
if not(Steps(s)) or ((Steps(s) == 1) and (s[:2] == '(-')):
s = s[1:-1]
return string.replace(string[idx1:idx0 + 1], s)
return Calc(string)
with open('bai2.inp') as f:
s = f.readline()
lines = Steps(s)
for i in d:
s = s.replace(i, ' ' + i + ' ')
for i in d:
s = s.replace(i + ' - ', i + ' -')
l = s.split()
with open('bai2.out', 'w') as f:
f.write(''.join(l) + '\n')
for _ in range(lines):
s = MetaCalc(s).replace(' ', '')
f.write('=' + s)
print(s)