diff options
Diffstat (limited to 'THT/C/Q-2016/bai2.py')
-rwxr-xr-x | THT/C/Q-2016/bai2.py | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/THT/C/Q-2016/bai2.py b/THT/C/Q-2016/bai2.py new file mode 100755 index 0000000..bb04c54 --- /dev/null +++ b/THT/C/Q-2016/bai2.py @@ -0,0 +1,47 @@ +#!/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) |