-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathopenuhw.py
executable file
·81 lines (65 loc) · 2.07 KB
/
openuhw.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python
# -*- coding: utf8 -*-
__author__ = "Max Kovgan <[email protected]>,"
__doc__ = """
defines:
OpenUHWResult - howework result
OpenUHWSolver - howework solver
"""
class OpenUHWResult:
def __init__(self, title=None):
self._title = title if title else ''
self._answers = []
self._res_str = u""
@property
def answers(self):
return self._answers
# answers = property(_get_answer)
@property
def title(self):
return self._title
@title.setter
def title(self,t):
self._title = t
# title = property(_get_title)
def set_res_str(self):
res_str = u"Answer"
res_str += len(self._answers) > 1 and u"s " or u" "
res_str += u"for "
res_str += "{0}:".format(self._title)
self._res_str = res_str
def __str__(self):
self.set_res_str()
res_str = self._res_str
for idx, ans in enumerate(self._answers):
description = ans.get("descr")
result = ans.get("result")
tmp_str = u"\t{0}.{1}. {2}=".format(self._title, idx + 1, description)
if isinstance(result, (float, int, )):
tmp_str += unicode(result)
else:
tmp_str += result
res_str += u"\n" + tmp_str
return res_str
class OpenUHWSolver:
def __init__(self):
# _answers = []
self._results = list()
self._solvers = list()
pass
def make_hr_line(self, ch, length):
return ch * length
def hr_line(self, ch="=", length=40):
print self.make_hr_line(ch, length)
def add_solver(self, d):
if not callable(d):
raise ValueError(u"result must be a function!")
self._solvers.append(d)
self._results.append(None)
return True
def solve(self, print_solution=False):
for idx, solver in enumerate(self._solvers):
self._results[idx] = solver()
if print_solution:
print u"{0}".format(self._results[idx])
self.hr_line()