Домашни > Предизборно ООП > Решения > Решението на Владимир Апостолов

Резултати
5 точки от тестове
0 точки от учител

5 точки общо

15 успешни теста
6 неуспешни теста
Код
Скрий всички коментари

  1class Currency:
  2    
  3    def __init__(self, name, rate):
  4        self.name = name
  5        self.rate = rate
  6
  7    def __eq__(self, other):
  8        return self.name == other.name and self.rate == other.rate
  9
 10
 11class PoliticalParty:
 12    
 13    def __init__(self, party_name, party_slogan, members = None, preferred_currency = None):
 14        self.party_name = party_name
 15        self.party_slogan = party_slogan
 16        self.members = members if members is not None else []
 17        self.preferred_currency = preferred_currency
 18    
 19    @property
 20    def motto(self):
 21        return self.party_slogan
 22    
 23    def convert_currency_to_voters(self, people, currency):
 24        return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate
 25
 26    def __str__(self):
 27        return self.party_name
 28    
 29    def __add__(self, other):
 30        return Coalition(self,other)
 31    
 32    
 33class Coalition:
 34    
 35    def __init__(self, *args):
 36        self.members={}
 37        self.parties = {}
 38        
 39        for political_party in args:
 40            if not political_party.members:
 41                self.members[political_party.party_name] = []
 42            else:
 43                self.members[political_party.party_name] = political_party.members
 44            self.parties[political_party.party_name] = political_party
 45            
 46    def __add__(self, other):
 47        new_coalition = Coalition()
 48        new_coalition.members = dict(self.members) 
 49        new_coalition.parties = dict(self.parties)
 50        
 51        if type(other) is PoliticalParty:
 52            new_coalition.members[other.party_name] = list(other.members) if other.members != [] else []
 53            new_coalition.parties[other.party_name] = other
 54        else:
 55            new_coalition.members.update(other.members)
 56            new_coalition.parties.update(other.parties)
 57        return new_coalition
 58 
 59    def __str__(self):
 60        return "-".join(member for member in self.members)
 61
 62
 63class Elections:
 64    
 65    objects = {}
 66    
 67    def __init__(self, year):
 68        self.year = year
 69        self.participating = {}
 70        self.party = {}
 71        
 72    def register_party_or_coalition(self, object):
 73        if type(object) is PoliticalParty:
 74            self.participating[object.party_name] = 0
 75            self.party[object.party_name] = object
 76            
 77        else:
 78            self.participating[str(object)] = 0
 79            for party_name in object.members:
 80                self.party[party_name] = object.parties[party_name]
 81                
 82                
 83    def vote(self,object):
 84        if type(object) is PoliticalParty:
 85            self.participating[object.party_name] += 1
 86        else:
 87            self.participating[str(object)] += 1
 88            
 89    
 90    def rig_elections(self, object, total, currency):
 91        if type(object) is PoliticalParty:
 92            value = object.convert_currency_to_voters(total, currency)
 93            self.participating[object.party_name] += value
 94        else:
 95            value = 0
 96            for party_name in object.members:
 97                current = self.party[party_name].convert_currency_to_voters(total, currency)
 98                if current > value:
 99                    value = current
100            self.participating[str(object)] += value
101        Elections.objects[self.year] = self.get_results()
102       
103    def get_results(self):
104        to_return={}
105        for party_or_coalition in self.participating:
106            to_return[party_or_coalition] = self.participating[party_or_coalition]
107
108        return to_return
109    
110    @classmethod   
111    def get_results_by_year(cls, year):
112        return cls.objects[year] if year in cls.objects else None

........F.EE.EEE.....
======================================================================
ERROR: test_rig_elections (test.TestElections.test_rig_elections)
rig_elections should add as many bought votes as possible to the result.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 157, in test_rig_elections
self.elections_2026.rig_elections(self.party, 50, self.currency)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 92, in rig_elections
value = object.convert_currency_to_voters(total, currency)
File "/tmp/solution.py", line 24, in convert_currency_to_voters
return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 8, in __eq__
return self.name == other.name and self.rate == other.rate
^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'name'

======================================================================
ERROR: test_rig_elections_preferred_currency (test.TestElections.test_rig_elections_preferred_currency)
rig_elections should use the most effective preferred currency conversion in a coalition.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 163, in test_rig_elections_preferred_currency
self.elections_2026.rig_elections(self.coalition, 80, self.currency)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 97, in rig_elections
current = self.party[party_name].convert_currency_to_voters(total, currency)
File "/tmp/solution.py", line 24, in convert_currency_to_voters
return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 8, in __eq__
return self.name == other.name and self.rate == other.rate
^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'name'

======================================================================
ERROR: test_convert_currency_to_voters (test.TestPoliticalParty.test_convert_currency_to_voters)
convert_currency_to_voters should return normal or double voters depending on the preferred currency.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 42, in test_convert_currency_to_voters
self.assertEqual(4, self.party.convert_currency_to_voters(34, self.currency))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 24, in convert_currency_to_voters
return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 8, in __eq__
return self.name == other.name and self.rate == other.rate
^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'name'

======================================================================
ERROR: test_convert_currency_to_voters_floating_point_edge_case (test.TestPoliticalParty.test_convert_currency_to_voters_floating_point_edge_case)
convert_currency_to_voters should properly account for floating point edge cases (e.g. 0.200001 errors).
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 55, in test_convert_currency_to_voters_floating_point_edge_case
self.assertEqual(5, party.convert_currency_to_voters(2, currency))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "/tmp/solution.py", line 24, in convert_currency_to_voters
return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 8, in __eq__
return self.name == other.name and self.rate == other.rate
^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'name'

======================================================================
ERROR: test_convert_currency_to_voters_rounding (test.TestPoliticalParty.test_convert_currency_to_voters_rounding)
convert_currency_to_voters should round the number of voters down.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 49, in test_convert_currency_to_voters_rounding
self.assertEqual(4, self.party.convert_currency_to_voters(34.5, self.currency))
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 24, in convert_currency_to_voters
return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 8, in __eq__
return self.name == other.name and self.rate == other.rate
^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'name'

======================================================================
FAIL: test_get_results_by_year (test.TestElections.test_get_results_by_year)
get_results_by_year should return the results for the given election year.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 171, in test_get_results_by_year
self.assertEqual({"Party 1": 1}, Elections.get_results_by_year(2026))
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: {'Party 1': 1} != None

----------------------------------------------------------------------
Ran 21 tests in 0.003s

FAILED (failures=1, errors=5)

Дискусия
История

f1class Currency:f1class Currency:
nn2    
2    def __init__(self, name, rate):3    def __init__(self, name, rate):
3        self.name = name4        self.name = name
4        self.rate = rate5        self.rate = rate
56
6    def __eq__(self, other):7    def __eq__(self, other):
7        return self.name == other.name and self.rate == other.rate8        return self.name == other.name and self.rate == other.rate
89
910
10class PoliticalParty:11class PoliticalParty:
nn12    
11    def __init__(self, party_name, party_slogan, members = None, preferred_currency = None):13    def __init__(self, party_name, party_slogan, members = None, preferred_currency = None):
12        self.party_name = party_name14        self.party_name = party_name
13        self.party_slogan = party_slogan15        self.party_slogan = party_slogan
14        self.members = members if members is not None else []16        self.members = members if members is not None else []
15        self.preferred_currency = preferred_currency17        self.preferred_currency = preferred_currency
16    18    
17    @property19    @property
18    def motto(self):20    def motto(self):
19        return self.party_slogan21        return self.party_slogan
20    22    
21    def convert_currency_to_voters(self, people, currency):23    def convert_currency_to_voters(self, people, currency):
22        return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate24        return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate
2325
24    def __str__(self):26    def __str__(self):
25        return self.party_name27        return self.party_name
26    28    
27    def __add__(self, other):29    def __add__(self, other):
28        return Coalition(self,other)30        return Coalition(self,other)
29    31    
nn32    
30class Coalition:33class Coalition:
nn34    
31    def __init__(self, *args):35    def __init__(self, *args):
32        self.members={}36        self.members={}
33        self.parties = {}37        self.parties = {}
34        38        
35        for political_party in args:39        for political_party in args:
36            if not political_party.members:40            if not political_party.members:
37                self.members[political_party.party_name] = []41                self.members[political_party.party_name] = []
38            else:42            else:
39                self.members[political_party.party_name] = political_party.members43                self.members[political_party.party_name] = political_party.members
40            self.parties[political_party.party_name] = political_party44            self.parties[political_party.party_name] = political_party
41            45            
42    def __add__(self, other):46    def __add__(self, other):
43        new_coalition = Coalition()47        new_coalition = Coalition()
44        new_coalition.members = dict(self.members) 48        new_coalition.members = dict(self.members) 
45        new_coalition.parties = dict(self.parties)49        new_coalition.parties = dict(self.parties)
46        50        
47        if type(other) is PoliticalParty:51        if type(other) is PoliticalParty:
48            new_coalition.members[other.party_name] = list(other.members) if other.members != [] else []52            new_coalition.members[other.party_name] = list(other.members) if other.members != [] else []
49            new_coalition.parties[other.party_name] = other53            new_coalition.parties[other.party_name] = other
50        else:54        else:
51            new_coalition.members.update(other.members)55            new_coalition.members.update(other.members)
52            new_coalition.parties.update(other.parties)56            new_coalition.parties.update(other.parties)
53        return new_coalition57        return new_coalition
54 58 
55    def __str__(self):59    def __str__(self):
56        return "-".join(member for member in self.members)60        return "-".join(member for member in self.members)
5761
nn62 
58class Elections:63class Elections:
tt64    
59    objects = {}65    objects = {}
60    66    
61    def __init__(self, year):67    def __init__(self, year):
62        self.year = year68        self.year = year
63        self.participating = {}69        self.participating = {}
64        self.party = {}70        self.party = {}
65        71        
66    def register_party_or_coalition(self, object):72    def register_party_or_coalition(self, object):
67        if type(object) is PoliticalParty:73        if type(object) is PoliticalParty:
68            self.participating[object.party_name] = 074            self.participating[object.party_name] = 0
69            self.party[object.party_name] = object75            self.party[object.party_name] = object
70            76            
71        else:77        else:
72            self.participating[str(object)] = 078            self.participating[str(object)] = 0
73            for party_name in object.members:79            for party_name in object.members:
74                self.party[party_name] = object.parties[party_name]80                self.party[party_name] = object.parties[party_name]
75                81                
76                82                
77    def vote(self,object):83    def vote(self,object):
78        if type(object) is PoliticalParty:84        if type(object) is PoliticalParty:
79            self.participating[object.party_name] += 185            self.participating[object.party_name] += 1
80        else:86        else:
81            self.participating[str(object)] += 187            self.participating[str(object)] += 1
82            88            
83    89    
84    def rig_elections(self, object, total, currency):90    def rig_elections(self, object, total, currency):
85        if type(object) is PoliticalParty:91        if type(object) is PoliticalParty:
86            value = object.convert_currency_to_voters(total, currency)92            value = object.convert_currency_to_voters(total, currency)
87            self.participating[object.party_name] += value93            self.participating[object.party_name] += value
88        else:94        else:
89            value = 095            value = 0
90            for party_name in object.members:96            for party_name in object.members:
91                current = self.party[party_name].convert_currency_to_voters(total, currency)97                current = self.party[party_name].convert_currency_to_voters(total, currency)
92                if current > value:98                if current > value:
93                    value = current99                    value = current
94            self.participating[str(object)] += value100            self.participating[str(object)] += value
95        Elections.objects[self.year] = self.get_results()101        Elections.objects[self.year] = self.get_results()
96       102       
97    def get_results(self):103    def get_results(self):
98        to_return={}104        to_return={}
99        for party_or_coalition in self.participating:105        for party_or_coalition in self.participating:
100            to_return[party_or_coalition] = self.participating[party_or_coalition]106            to_return[party_or_coalition] = self.participating[party_or_coalition]
101107
102        return to_return108        return to_return
103    109    
104    @classmethod   110    @classmethod   
105    def get_results_by_year(cls, year):111    def get_results_by_year(cls, year):
106        return cls.objects[year] if year in cls.objects else None112        return cls.objects[year] if year in cls.objects else None
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1class Currency:f1class Currency:
2    def __init__(self, name, rate):2    def __init__(self, name, rate):
3        self.name = name3        self.name = name
4        self.rate = rate4        self.rate = rate
55
6    def __eq__(self, other):6    def __eq__(self, other):
7        return self.name == other.name and self.rate == other.rate7        return self.name == other.name and self.rate == other.rate
88
99
10class PoliticalParty:10class PoliticalParty:
11    def __init__(self, party_name, party_slogan, members = None, preferred_currency = None):11    def __init__(self, party_name, party_slogan, members = None, preferred_currency = None):
12        self.party_name = party_name12        self.party_name = party_name
13        self.party_slogan = party_slogan13        self.party_slogan = party_slogan
14        self.members = members if members is not None else []14        self.members = members if members is not None else []
15        self.preferred_currency = preferred_currency15        self.preferred_currency = preferred_currency
16    16    
17    @property17    @property
18    def motto(self):18    def motto(self):
19        return self.party_slogan19        return self.party_slogan
20    20    
21    def convert_currency_to_voters(self, people, currency):21    def convert_currency_to_voters(self, people, currency):
22        return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate22        return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate
2323
24    def __str__(self):24    def __str__(self):
25        return self.party_name25        return self.party_name
26    26    
27    def __add__(self, other):27    def __add__(self, other):
28        return Coalition(self,other)28        return Coalition(self,other)
29    29    
30class Coalition:30class Coalition:
31    def __init__(self, *args):31    def __init__(self, *args):
32        self.members={}32        self.members={}
33        self.parties = {}33        self.parties = {}
34        34        
35        for political_party in args:35        for political_party in args:
36            if not political_party.members:36            if not political_party.members:
37                self.members[political_party.party_name] = []37                self.members[political_party.party_name] = []
38            else:38            else:
39                self.members[political_party.party_name] = political_party.members39                self.members[political_party.party_name] = political_party.members
40            self.parties[political_party.party_name] = political_party40            self.parties[political_party.party_name] = political_party
41            41            
42    def __add__(self, other):42    def __add__(self, other):
43        new_coalition = Coalition()43        new_coalition = Coalition()
44        new_coalition.members = dict(self.members) 44        new_coalition.members = dict(self.members) 
45        new_coalition.parties = dict(self.parties)45        new_coalition.parties = dict(self.parties)
46        46        
47        if type(other) is PoliticalParty:47        if type(other) is PoliticalParty:
48            new_coalition.members[other.party_name] = list(other.members) if other.members != [] else []48            new_coalition.members[other.party_name] = list(other.members) if other.members != [] else []
49            new_coalition.parties[other.party_name] = other49            new_coalition.parties[other.party_name] = other
50        else:50        else:
51            new_coalition.members.update(other.members)51            new_coalition.members.update(other.members)
52            new_coalition.parties.update(other.parties)52            new_coalition.parties.update(other.parties)
53        return new_coalition53        return new_coalition
54 54 
55    def __str__(self):55    def __str__(self):
56        return "-".join(member for member in self.members)56        return "-".join(member for member in self.members)
5757
58class Elections:58class Elections:
59    objects = {}59    objects = {}
60    60    
61    def __init__(self, year):61    def __init__(self, year):
62        self.year = year62        self.year = year
63        self.participating = {}63        self.participating = {}
64        self.party = {}64        self.party = {}
65        65        
66    def register_party_or_coalition(self, object):66    def register_party_or_coalition(self, object):
67        if type(object) is PoliticalParty:67        if type(object) is PoliticalParty:
68            self.participating[object.party_name] = 068            self.participating[object.party_name] = 0
69            self.party[object.party_name] = object69            self.party[object.party_name] = object
70            70            
71        else:71        else:
72            self.participating[str(object)] = 072            self.participating[str(object)] = 0
73            for party_name in object.members:73            for party_name in object.members:
74                self.party[party_name] = object.parties[party_name]74                self.party[party_name] = object.parties[party_name]
75                75                
76                76                
77    def vote(self,object):77    def vote(self,object):
78        if type(object) is PoliticalParty:78        if type(object) is PoliticalParty:
79            self.participating[object.party_name] += 179            self.participating[object.party_name] += 1
80        else:80        else:
81            self.participating[str(object)] += 181            self.participating[str(object)] += 1
82            82            
83    83    
84    def rig_elections(self, object, total, currency):84    def rig_elections(self, object, total, currency):
85        if type(object) is PoliticalParty:85        if type(object) is PoliticalParty:
86            value = object.convert_currency_to_voters(total, currency)86            value = object.convert_currency_to_voters(total, currency)
87            self.participating[object.party_name] += value87            self.participating[object.party_name] += value
88        else:88        else:
89            value = 089            value = 0
90            for party_name in object.members:90            for party_name in object.members:
t91                value += self.party[party_name].convert_currency_to_voters(total, currency)t91                current = self.party[party_name].convert_currency_to_voters(total, currency)
92                if current > value:
93                    value = current
92            self.participating[str(object)] += value94            self.participating[str(object)] += value
93        Elections.objects[self.year] = self.get_results()95        Elections.objects[self.year] = self.get_results()
94       96       
95    def get_results(self):97    def get_results(self):
96        to_return={}98        to_return={}
97        for party_or_coalition in self.participating:99        for party_or_coalition in self.participating:
98            to_return[party_or_coalition] = self.participating[party_or_coalition]100            to_return[party_or_coalition] = self.participating[party_or_coalition]
99101
100        return to_return102        return to_return
101    103    
102    @classmethod   104    @classmethod   
103    def get_results_by_year(cls, year):105    def get_results_by_year(cls, year):
104        return cls.objects[year] if year in cls.objects else None106        return cls.objects[year] if year in cls.objects else None
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

t1class Currency:t1class Currency:
2    def __init__(self, name, rate):2    def __init__(self, name, rate):
3        self.name = name3        self.name = name
4        self.rate = rate4        self.rate = rate
55
6    def __eq__(self, other):6    def __eq__(self, other):
7        return self.name == other.name and self.rate == other.rate7        return self.name == other.name and self.rate == other.rate
88
99
10class PoliticalParty:10class PoliticalParty:
11    def __init__(self, party_name, party_slogan, members = None, preferred_currency = None):11    def __init__(self, party_name, party_slogan, members = None, preferred_currency = None):
12        self.party_name = party_name12        self.party_name = party_name
13        self.party_slogan = party_slogan13        self.party_slogan = party_slogan
14        self.members = members if members is not None else []14        self.members = members if members is not None else []
15        self.preferred_currency = preferred_currency15        self.preferred_currency = preferred_currency
16    16    
17    @property17    @property
18    def motto(self):18    def motto(self):
19        return self.party_slogan19        return self.party_slogan
20    20    
21    def convert_currency_to_voters(self, people, currency):21    def convert_currency_to_voters(self, people, currency):
22        return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate22        return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate
2323
24    def __str__(self):24    def __str__(self):
25        return self.party_name25        return self.party_name
26    26    
27    def __add__(self, other):27    def __add__(self, other):
28        return Coalition(self,other)28        return Coalition(self,other)
29    29    
30class Coalition:30class Coalition:
31    def __init__(self, *args):31    def __init__(self, *args):
32        self.members={}32        self.members={}
33        self.parties = {}33        self.parties = {}
34        34        
35        for political_party in args:35        for political_party in args:
36            if not political_party.members:36            if not political_party.members:
37                self.members[political_party.party_name] = []37                self.members[political_party.party_name] = []
38            else:38            else:
39                self.members[political_party.party_name] = political_party.members39                self.members[political_party.party_name] = political_party.members
40            self.parties[political_party.party_name] = political_party40            self.parties[political_party.party_name] = political_party
41            41            
42    def __add__(self, other):42    def __add__(self, other):
43        new_coalition = Coalition()43        new_coalition = Coalition()
44        new_coalition.members = dict(self.members) 44        new_coalition.members = dict(self.members) 
45        new_coalition.parties = dict(self.parties)45        new_coalition.parties = dict(self.parties)
46        46        
47        if type(other) is PoliticalParty:47        if type(other) is PoliticalParty:
48            new_coalition.members[other.party_name] = list(other.members) if other.members != [] else []48            new_coalition.members[other.party_name] = list(other.members) if other.members != [] else []
49            new_coalition.parties[other.party_name] = other49            new_coalition.parties[other.party_name] = other
50        else:50        else:
51            new_coalition.members.update(other.members)51            new_coalition.members.update(other.members)
52            new_coalition.parties.update(other.parties)52            new_coalition.parties.update(other.parties)
53        return new_coalition53        return new_coalition
54 54 
55    def __str__(self):55    def __str__(self):
56        return "-".join(member for member in self.members)56        return "-".join(member for member in self.members)
5757
58class Elections:58class Elections:
59    objects = {}59    objects = {}
60    60    
61    def __init__(self, year):61    def __init__(self, year):
62        self.year = year62        self.year = year
63        self.participating = {}63        self.participating = {}
64        self.party = {}64        self.party = {}
65        65        
66    def register_party_or_coalition(self, object):66    def register_party_or_coalition(self, object):
67        if type(object) is PoliticalParty:67        if type(object) is PoliticalParty:
68            self.participating[object.party_name] = 068            self.participating[object.party_name] = 0
69            self.party[object.party_name] = object69            self.party[object.party_name] = object
70            70            
71        else:71        else:
72            self.participating[str(object)] = 072            self.participating[str(object)] = 0
73            for party_name in object.members:73            for party_name in object.members:
74                self.party[party_name] = object.parties[party_name]74                self.party[party_name] = object.parties[party_name]
75                75                
76                76                
77    def vote(self,object):77    def vote(self,object):
78        if type(object) is PoliticalParty:78        if type(object) is PoliticalParty:
79            self.participating[object.party_name] += 179            self.participating[object.party_name] += 1
80        else:80        else:
81            self.participating[str(object)] += 181            self.participating[str(object)] += 1
82            82            
83    83    
84    def rig_elections(self, object, total, currency):84    def rig_elections(self, object, total, currency):
85        if type(object) is PoliticalParty:85        if type(object) is PoliticalParty:
86            value = object.convert_currency_to_voters(total, currency)86            value = object.convert_currency_to_voters(total, currency)
87            self.participating[object.party_name] += value87            self.participating[object.party_name] += value
88        else:88        else:
89            value = 089            value = 0
90            for party_name in object.members:90            for party_name in object.members:
91                value += self.party[party_name].convert_currency_to_voters(total, currency)91                value += self.party[party_name].convert_currency_to_voters(total, currency)
92            self.participating[str(object)] += value92            self.participating[str(object)] += value
93        Elections.objects[self.year] = self.get_results()93        Elections.objects[self.year] = self.get_results()
94       94       
95    def get_results(self):95    def get_results(self):
96        to_return={}96        to_return={}
97        for party_or_coalition in self.participating:97        for party_or_coalition in self.participating:
98            to_return[party_or_coalition] = self.participating[party_or_coalition]98            to_return[party_or_coalition] = self.participating[party_or_coalition]
9999
100        return to_return100        return to_return
101    101    
102    @classmethod   102    @classmethod   
103    def get_results_by_year(cls, year):103    def get_results_by_year(cls, year):
104        return cls.objects[year] if year in cls.objects else None104        return cls.objects[year] if year in cls.objects else None
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1class Currency:f1class Currency:
2    def __init__(self, name, rate):2    def __init__(self, name, rate):
3        self.name = name3        self.name = name
4        self.rate = rate4        self.rate = rate
55
6    def __eq__(self, other):6    def __eq__(self, other):
7        return self.name == other.name and self.rate == other.rate7        return self.name == other.name and self.rate == other.rate
88
99
10class PoliticalParty:10class PoliticalParty:
11    def __init__(self, party_name, party_slogan, members = None, preferred_currency = None):11    def __init__(self, party_name, party_slogan, members = None, preferred_currency = None):
12        self.party_name = party_name12        self.party_name = party_name
13        self.party_slogan = party_slogan13        self.party_slogan = party_slogan
14        self.members = members if members is not None else []14        self.members = members if members is not None else []
15        self.preferred_currency = preferred_currency15        self.preferred_currency = preferred_currency
16    16    
17    @property17    @property
18    def motto(self):18    def motto(self):
19        return self.party_slogan19        return self.party_slogan
20    20    
21    def convert_currency_to_voters(self, people, currency):21    def convert_currency_to_voters(self, people, currency):
22        return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate22        return (people // currency.rate) * 2 if self.preferred_currency == currency else people // currency.rate
2323
24    def __str__(self):24    def __str__(self):
25        return self.party_name25        return self.party_name
26    26    
27    def __add__(self, other):27    def __add__(self, other):
28        return Coalition(self,other)28        return Coalition(self,other)
29    29    
30class Coalition:30class Coalition:
31    def __init__(self, *args):31    def __init__(self, *args):
32        self.members={}32        self.members={}
33        self.parties = {}33        self.parties = {}
34        34        
35        for political_party in args:35        for political_party in args:
36            if not political_party.members:36            if not political_party.members:
37                self.members[political_party.party_name] = []37                self.members[political_party.party_name] = []
38            else:38            else:
39                self.members[political_party.party_name] = political_party.members39                self.members[political_party.party_name] = political_party.members
40            self.parties[political_party.party_name] = political_party40            self.parties[political_party.party_name] = political_party
41            41            
42    def __add__(self, other):42    def __add__(self, other):
43        new_coalition = Coalition()43        new_coalition = Coalition()
44        new_coalition.members = dict(self.members) 44        new_coalition.members = dict(self.members) 
45        new_coalition.parties = dict(self.parties)45        new_coalition.parties = dict(self.parties)
46        46        
47        if type(other) is PoliticalParty:47        if type(other) is PoliticalParty:
48            new_coalition.members[other.party_name] = list(other.members) if other.members != [] else []48            new_coalition.members[other.party_name] = list(other.members) if other.members != [] else []
49            new_coalition.parties[other.party_name] = other49            new_coalition.parties[other.party_name] = other
50        else:50        else:
51            new_coalition.members.update(other.members)51            new_coalition.members.update(other.members)
52            new_coalition.parties.update(other.parties)52            new_coalition.parties.update(other.parties)
53        return new_coalition53        return new_coalition
54 54 
55    def __str__(self):55    def __str__(self):
56        return "-".join(member for member in self.members)56        return "-".join(member for member in self.members)
5757
58class Elections:58class Elections:
59    objects = {}59    objects = {}
60    60    
61    def __init__(self, year):61    def __init__(self, year):
62        self.year = year62        self.year = year
63        self.participating = {}63        self.participating = {}
64        self.party = {}64        self.party = {}
65        65        
66    def register_party_or_coalition(self, object):66    def register_party_or_coalition(self, object):
67        if type(object) is PoliticalParty:67        if type(object) is PoliticalParty:
68            self.participating[object.party_name] = 068            self.participating[object.party_name] = 0
69            self.party[object.party_name] = object69            self.party[object.party_name] = object
70            70            
71        else:71        else:
72            self.participating[str(object)] = 072            self.participating[str(object)] = 0
73            for party_name in object.members:73            for party_name in object.members:
74                self.party[party_name] = object.parties[party_name]74                self.party[party_name] = object.parties[party_name]
75                75                
76                76                
77    def vote(self,object):77    def vote(self,object):
78        if type(object) is PoliticalParty:78        if type(object) is PoliticalParty:
79            self.participating[object.party_name] += 179            self.participating[object.party_name] += 1
80        else:80        else:
81            self.participating[str(object)] += 181            self.participating[str(object)] += 1
82            82            
83    83    
84    def rig_elections(self, object, total, currency):84    def rig_elections(self, object, total, currency):
85        if type(object) is PoliticalParty:85        if type(object) is PoliticalParty:
86            value = object.convert_currency_to_voters(total, currency)86            value = object.convert_currency_to_voters(total, currency)
87            self.participating[object.party_name] += value87            self.participating[object.party_name] += value
88        else:88        else:
89            value = 089            value = 0
90            for party_name in object.members:90            for party_name in object.members:
t91                value += self.participating[party_name] + self.party[party_name].convert_currency_to_voters(total, currency)t91                value += self.party[party_name].convert_currency_to_voters(total, currency)
92            self.participating[str(object)] += value92            self.participating[str(object)] += value
93        Elections.objects[self.year] = self.get_results()93        Elections.objects[self.year] = self.get_results()
94       94       
95    def get_results(self):95    def get_results(self):
96        to_return={}96        to_return={}
97        for party_or_coalition in self.participating:97        for party_or_coalition in self.participating:
98            to_return[party_or_coalition] = self.participating[party_or_coalition]98            to_return[party_or_coalition] = self.participating[party_or_coalition]
9999
100        return to_return100        return to_return
101    101    
102    @classmethod   102    @classmethod   
103    def get_results_by_year(cls, year):103    def get_results_by_year(cls, year):
104        return cls.objects[year] if year in cls.objects else None104        return cls.objects[year] if year in cls.objects else None
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op