Жангирхан Шаку, 404 UnboldCalc 12796
Арсен Жуматай,304 UnboldCalc 12776
t1class Calculator:t1class Calculator:
22
3    def __init__(self):3    def __init__(self):
4        self.variables = {}4        self.variables = {}
5        self.allowed_namespaces = {'__builtins__': {}}5        self.allowed_namespaces = {'__builtins__': {}}
66
7    def process_input(self, line):7    def process_input(self, line):
8        line = line.strip()8        line = line.strip()
9        if not line or line.startswith('#'):9        if not line or line.startswith('#'):
10            return None10            return None
11        if '=' in line:11        if '=' in line:
12            identifier, expr = map(str.strip, line.split('=', 1))12            identifier, expr = map(str.strip, line.split('=', 1))
13            return self.assign(identifier, expr)13            return self.assign(identifier, expr)
14        return self.evaluate_expression(line)14        return self.evaluate_expression(line)
1515
16    def assign(self, identifier, expr):16    def assign(self, identifier, expr):
17        if not identifier.isidentifier():17        if not identifier.isidentifier():
18            return 'Assignment error'18            return 'Assignment error'
19        try:19        try:
20            self.variables[identifier] = eval(expr, self.allowed_namespa20            self.variables[identifier] = eval(expr, self.allowed_namespa
>ces, self.variables)>ces, self.variables)
21        except SyntaxError:21        except SyntaxError:
22            return 'Syntax error'22            return 'Syntax error'
23        except NameError:23        except NameError:
24            return 'Name error'24            return 'Name error'
25        except Exception:25        except Exception:
26            return 'Runtime error'26            return 'Runtime error'
27        return None27        return None
2828
29    def evaluate_expression(self, expr):29    def evaluate_expression(self, expr):
30        try:30        try:
31            result = eval(expr, self.allowed_namespaces, self.variables)31            result = eval(expr, self.allowed_namespaces, self.variables)
32            return result32            return result
33        except SyntaxError:33        except SyntaxError:
34            return 'Syntax error'34            return 'Syntax error'
35        except NameError:35        except NameError:
36            return 'Name error'36            return 'Name error'
37        except Exception:37        except Exception:
38            return 'Runtime error'38            return 'Runtime error'
39calculator = Calculator()39calculator = Calculator()
40while True:40while True:
41    line = input().strip()41    line = input().strip()
42    if not line:42    if not line:
43        break43        break
44    result = calculator.process_input(line)44    result = calculator.process_input(line)
45    if result is not None:45    if result is not None:
46        print(result)46        print(result)
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op