Домашни > Предизборно ООП > Решения > Решението на Милка Кръстева

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

7 точки общо

20 успешни теста
1 неуспешни теста
Код

 1class Currency:
 2    def __init__(self, name, count):
 3        self.name = name
 4        self.count = count
 5
 6    def __eq__(self, other):
 7        return self.name == other.name and self.count == other.count
 8
 9
10class PoliticalParty:
11
12    def __init__(self, name, motto, members=[], preferred_currency=None):
13        self.name = name
14        self._motto = motto
15        self.members = members
16        self.preferred_currency = preferred_currency
17
18    def convert_currency_to_voters(self, amount, currency):
19        voters_count = int(amount / currency.count)
20        return 2 * voters_count if self.preferred_currency is not None and self.preferred_currency == currency else voters_count
21
22    def __str__(self):
23        return self.name
24
25    def __add__(self, other):
26        if (type(other).__name__ == 'PoliticalParty'):
27            return Coalition(self, other)
28
29    @property
30    def motto(self):
31        return self._motto
32
33
34class Coalition:
35
36    def __init__(self, *args):
37        self.coalitional_parties = args
38
39    def __add__(self, other):
40        match(type(other).__name__):
41            case 'Coalition':
42                new_parties = list(self.coalitional_parties) + list(other.coalitional_parties)
43                return Coalition(*new_parties)
44            case 'PoliticalParty':
45                new_parties = list(self.coalitional_parties)
46                new_parties.append(other)
47                return Coalition(*new_parties)
48
49    def __str__(self):
50        return '-'.join(str(party) for party in self.coalitional_parties)
51
52    @property
53    def members(self):
54        return {
55            party.name: party.members
56            for party in self.coalitional_parties
57        }
58
59
60class Elections:
61
62    register_members = []
63    voiting_result = {}
64    list_of_elections = {}
65
66    def __init__(self, year):
67        self.year = year
68        Elections.list_of_elections[year] = self
69
70    def register_party_or_coalition(self, party_or_coalition):
71        self.register_members.append(party_or_coalition)
72        self.voiting_result[str(party_or_coalition)] = 0
73
74    def vote(self, party_or_coalition):
75        self.voiting_result[str(party_or_coalition)] += 1
76
77    def rig_elections(self, party_or_coalition, amount, currency):
78        match(type(party_or_coalition).__name__):
79            case 'Coalition':
80                max_voting_result = max((party.convert_currency_to_voters(amount, currency) for party in party_or_coalition.coalitional_parties))
81            case 'PoliticalParty':
82                max_voting_result = party_or_coalition.convert_currency_to_voters(amount, currency)
83        self.voiting_result[str(party_or_coalition)] += max_voting_result
84
85    def get_results(self):
86        return self.voiting_result
87
88    @classmethod
89    def get_results_by_year(cls, year):
90        return cls.list_of_elections.get(year).get_results() if cls.list_of_elections.get(year) is not None else {}

...........F.........
======================================================================
FAIL: 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 165, in test_rig_elections_preferred_currency
self.assertEqual({"Party 2-Party 3": 21}, self.elections_2026.get_results())
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: {'Party 2-Party 3': 21} != {'Party 1': 5, 'Party 2-Party 3': 21}
- {'Party 2-Party 3': 21}
+ {'Party 1': 5, 'Party 2-Party 3': 21}
? ++++++++++++++

----------------------------------------------------------------------
Ran 21 tests in 0.001s

FAILED (failures=1)

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

f1class Currency:f1class Currency:
2    def __init__(self, name, count):2    def __init__(self, name, count):
3        self.name = name3        self.name = name
4        self.count = count4        self.count = count
55
6    def __eq__(self, other):6    def __eq__(self, other):
7        return self.name == other.name and self.count == other.count7        return self.name == other.name and self.count == other.count
88
99
10class PoliticalParty:10class PoliticalParty:
1111
12    def __init__(self, name, motto, members=[], preferred_currency=None):12    def __init__(self, name, motto, members=[], preferred_currency=None):
13        self.name = name13        self.name = name
14        self._motto = motto14        self._motto = motto
15        self.members = members15        self.members = members
16        self.preferred_currency = preferred_currency16        self.preferred_currency = preferred_currency
1717
18    def convert_currency_to_voters(self, amount, currency):18    def convert_currency_to_voters(self, amount, currency):
19        voters_count = int(amount / currency.count)19        voters_count = int(amount / currency.count)
20        return 2 * voters_count if self.preferred_currency is not None and self.preferred_currency == currency else voters_count20        return 2 * voters_count if self.preferred_currency is not None and self.preferred_currency == currency else voters_count
2121
22    def __str__(self):22    def __str__(self):
23        return self.name23        return self.name
2424
25    def __add__(self, other):25    def __add__(self, other):
n26        match(type(other).__name__):n26        if (type(other).__name__ == 'PoliticalParty'):
27            case 'PoliticalParty':
28                return Coalition(self, other)27            return Coalition(self, other)
2928
30    @property29    @property
31    def motto(self):30    def motto(self):
32        return self._motto31        return self._motto
3332
3433
35class Coalition:34class Coalition:
3635
37    def __init__(self, *args):36    def __init__(self, *args):
38        self.coalitional_parties = args37        self.coalitional_parties = args
3938
40    def __add__(self, other):39    def __add__(self, other):
41        match(type(other).__name__):40        match(type(other).__name__):
42            case 'Coalition':41            case 'Coalition':
n43                new_parties = list(self.coalitional_parties) + \n42                new_parties = list(self.coalitional_parties) + list(other.coalitional_parties)
44                    list(other.coalitional_parties)
45                return Coalition(*new_parties)43                return Coalition(*new_parties)
46            case 'PoliticalParty':44            case 'PoliticalParty':
47                new_parties = list(self.coalitional_parties)45                new_parties = list(self.coalitional_parties)
48                new_parties.append(other)46                new_parties.append(other)
49                return Coalition(*new_parties)47                return Coalition(*new_parties)
5048
51    def __str__(self):49    def __str__(self):
t52        return '-'.join([str(party) for party in self.coalitional_parties])t50        return '-'.join(str(party) for party in self.coalitional_parties)
5351
54    @property52    @property
55    def members(self):53    def members(self):
56        return {54        return {
57            party.name: party.members55            party.name: party.members
58            for party in self.coalitional_parties56            for party in self.coalitional_parties
59        }57        }
6058
6159
62class Elections:60class Elections:
6361
64    register_members = []62    register_members = []
65    voiting_result = {}63    voiting_result = {}
66    list_of_elections = {}64    list_of_elections = {}
6765
68    def __init__(self, year):66    def __init__(self, year):
69        self.year = year67        self.year = year
70        Elections.list_of_elections[year] = self68        Elections.list_of_elections[year] = self
7169
72    def register_party_or_coalition(self, party_or_coalition):70    def register_party_or_coalition(self, party_or_coalition):
73        self.register_members.append(party_or_coalition)71        self.register_members.append(party_or_coalition)
74        self.voiting_result[str(party_or_coalition)] = 072        self.voiting_result[str(party_or_coalition)] = 0
7573
76    def vote(self, party_or_coalition):74    def vote(self, party_or_coalition):
77        self.voiting_result[str(party_or_coalition)] += 175        self.voiting_result[str(party_or_coalition)] += 1
7876
79    def rig_elections(self, party_or_coalition, amount, currency):77    def rig_elections(self, party_or_coalition, amount, currency):
80        match(type(party_or_coalition).__name__):78        match(type(party_or_coalition).__name__):
81            case 'Coalition':79            case 'Coalition':
82                max_voting_result = max((party.convert_currency_to_voters(amount, currency) for party in party_or_coalition.coalitional_parties))80                max_voting_result = max((party.convert_currency_to_voters(amount, currency) for party in party_or_coalition.coalitional_parties))
83            case 'PoliticalParty':81            case 'PoliticalParty':
84                max_voting_result = party_or_coalition.convert_currency_to_voters(amount, currency)82                max_voting_result = party_or_coalition.convert_currency_to_voters(amount, currency)
85        self.voiting_result[str(party_or_coalition)] += max_voting_result83        self.voiting_result[str(party_or_coalition)] += max_voting_result
8684
87    def get_results(self):85    def get_results(self):
88        return self.voiting_result86        return self.voiting_result
8987
90    @classmethod88    @classmethod
91    def get_results_by_year(cls, year):89    def get_results_by_year(cls, year):
92        return cls.list_of_elections.get(year).get_results() if cls.list_of_elections.get(year) is not None else {}90        return cls.list_of_elections.get(year).get_results() if cls.list_of_elections.get(year) is not None else {}
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op