added main.py

master
alex 2025-01-02 22:07:23 +01:00
parent 70aba142c2
commit 9574c10600
2 changed files with 57 additions and 34 deletions

View File

@ -15,68 +15,84 @@ class AbacusCore:
self._funcs['r2'] = lambda x: round(x, 2) self._funcs['r2'] = lambda x: round(x, 2)
self._funcs['r0'] = lambda x: int(x) self._funcs['r0'] = lambda x: int(x)
def _calculate(self, input):
return eval(input)
def parse_input(self, input): def _calculate(self, input_str):
try:
return True, eval(input_str)
except ZeroDivisionError:
res = 'Division by Zero'
except NameError as e:
res = 'Variable '+ e.name + ' not exists'
return False, res
def get_vars(self):
return self._vars
def add_var(self, name, value):
self._vars[name] = value
def parse_input(self, input_str):
comment = None comment = None
input_wo_com = None input_wo_com = None
input = str(input).strip() success = False
input = input.replace(',', '.') input_str = str(input_str).strip()
if input[0] == '#': input_str = input_str.replace(',', '.')
comment = input[1:] if input_str[0] == '#':
com_index = input.find('#') comment = input_str[1:]
com_index = input_str.find('#')
if com_index > -1: if com_index > -1:
input_wo_com = input[:com_index] input_wo_com = input_str[:com_index]
comment = input[com_index+1:] comment = input_str[com_index + 1:]
if input_wo_com is None: if input_wo_com is None:
input_wo_com = input input_wo_com = input_str
print('comment', comment) print('comment', comment)
result = self._split_input(input_wo_com) result = self._split_input(input_wo_com)
print('result:',result) print('result:',result)
if result[1] is not None: if result[1] is not None:
res = self._calculate(result[1]) success, res = self._calculate(result[1])
print(res) if success:
operators = result[0] operators = result[0]
operators.reverse() operators.reverse()
for op in operators: for op in operators:
if op[-1] == '=': if op[-1] == '=':
self._vars[op[:-1]] = res self._vars[op[:-1]] = res
elif op[-1] == ':': elif op[-1] == ':':
res = self._funcs.get(op[:-1])(res) res = self._funcs.get(op[:-1])(res)
print('vars:', self._vars) print('vars:', self._vars)
else:
print("Error")
def _split_input(self, input): def _split_input(self, input_str):
last_position = 0 last_position = 0
varchunks = list() varchunks = list()
for i, c in enumerate(input): for i, c in enumerate(input_str):
if c in [':', '=']: if c in [':', '=']:
chunk = input[last_position:i].strip() chunk = input_str[last_position:i].strip()
chunk = chunk+input[i] chunk = chunk + input_str[i]
varchunks.append(chunk) varchunks.append(chunk)
last_position = i+1 last_position = i+1
rest = input[last_position:].strip() rest = input_str[last_position:].strip()
print('rest', rest) print('rest', rest)
rest = self._find_vars(rest)[1] rest = self._find_vars(rest)[1]
return (varchunks, rest) return varchunks, rest
def _find_vars(self, input): def _find_vars(self, input_str):
chunks = list() chunks = list()
last_position = 0 last_position = 0
for i, c in enumerate(input): for i, c in enumerate(input_str):
if c in ['+', '-', '/', '*', '(', ')', '[', ']', ';']: if c in ['+', '-', '/', '*', '(', ')', '[', ']', ';']:
ch = input[last_position:i].strip() ch = input_str[last_position:i].strip()
if len(ch)>0: if len(ch)>0:
chunks.append(ch) chunks.append(ch)
chunks.append(input[i].strip()) chunks.append(input_str[i].strip())
last_position = i+1 last_position = i+1
if last_position<len(input): if last_position<len(input_str):
chunks.append(input[last_position:].strip()) chunks.append(input_str[last_position:].strip())
cp_chunks = chunks.copy() cp_chunks = chunks.copy()
for i, chunk in enumerate(chunks): for i, chunk in enumerate(chunks):
if chunk in self._vars: if chunk in self._vars:
cp_chunks[i] = str(self._vars.get(chunk)) cp_chunks[i] = str(self._vars.get(chunk))
print(chunks, cp_chunks) print(chunks, cp_chunks)
return (len(cp_chunks)>1, ''.join(cp_chunks)) return len(cp_chunks)>1, ''.join(cp_chunks)

7
main.py 100644
View File

@ -0,0 +1,7 @@
from abacus_core import AbacusCore
ab = AbacusCore()
if __name__ == '__main__':
ab.parse_input('12')