Домашни > Да върнем левчето обратно! > Решения > Решението на Виктор Бечев

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

6 точки общо

21 успешни теста
0 неуспешни теста
Код (Ooops, remove test code)

 1class Currency:
 2    def __init__(self, name, required_for_one_vote):
 3        self.name = name
 4        self.required_for_one_vote = required_for_one_vote
 5
 6    def __eq__(self, other):
 7        return (
 8            False
 9            if other is None
10            else (self.name == other.name and self.required_for_one_vote == other.required_for_one_vote)
11        )
12
13    def __hash__(self):
14        return hash(self.name)
15
16    def convert_to_voters(self, amount):
17        return int(amount / self.required_for_one_vote)
18
19
20class PoliticalParty:
21    def __init__(self, name, motto, members=None, preferred_currency=None):
22        self.name = name
23        self._motto = motto
24        self.members = members[:] if members else []  # Check for mutating in tests
25        self.preferred_currency = preferred_currency
26
27    def __str__(self):
28        return self.name
29
30    @property
31    def motto(self):
32        return self._motto
33
34    def convert_currency_to_voters(self, amount, currency):
35        multiplier = 2 if currency == self.preferred_currency else 1
36        return currency.convert_to_voters(amount) * multiplier
37
38    def __add__(self, other_party):
39        return Coalition(self, other_party)
40
41
42class Coalition:
43    def __init__(self, *parties):
44        self.parties = list(parties)
45
46    def __str__(self):
47        return "-".join(str(party) for party in self.parties)
48
49    @property
50    def members(self):
51        return {str(party): party.members for party in self.parties}
52
53    def __add__(self, coalition_or_party):
54        parties_to_append = (
55            [coalition_or_party] if isinstance(coalition_or_party, PoliticalParty) else coalition_or_party.parties
56        )
57        return self.__class__(*self.parties, *parties_to_append)
58
59    def convert_currency_to_voters(self, amount, currency):
60        preferred_currencies = {party.preferred_currency: party for party in self.parties}
61        return preferred_currencies.get(currency, self.parties[0]).convert_currency_to_voters(amount, currency)
62
63
64class Elections:
65    ELECTIONS_HISTORY = {}
66
67    def __init__(self, year):
68        self.year = year
69        self.__votes = {}
70        self.ELECTIONS_HISTORY[year] = self
71
72    @classmethod
73    def get_results_by_year(cls, year):
74        return cls.ELECTIONS_HISTORY[year].get_results()
75
76    def register_party_or_coalition(self, *parties_or_coalitions):
77        self.__votes |= {str(party_or_coallition): 0 for party_or_coallition in parties_or_coalitions}
78
79    def rig_elections(self, party_or_coalition, amount, currency):
80        self.__votes[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)
81
82    def get_results(self):
83        return self.__votes
84
85    def vote(self, party_or_coalition):
86        self.__votes[str(party_or_coalition)] += 1

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

OK

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

f1class Currency:f1class Currency:
2    def __init__(self, name, required_for_one_vote):2    def __init__(self, name, required_for_one_vote):
3        self.name = name3        self.name = name
4        self.required_for_one_vote = required_for_one_vote4        self.required_for_one_vote = required_for_one_vote
55
6    def __eq__(self, other):6    def __eq__(self, other):
7        return (7        return (
8            False8            False
9            if other is None9            if other is None
10            else (self.name == other.name and self.required_for_one_vote == other.required_for_one_vote)10            else (self.name == other.name and self.required_for_one_vote == other.required_for_one_vote)
11        )11        )
1212
13    def __hash__(self):13    def __hash__(self):
14        return hash(self.name)14        return hash(self.name)
1515
16    def convert_to_voters(self, amount):16    def convert_to_voters(self, amount):
17        return int(amount / self.required_for_one_vote)17        return int(amount / self.required_for_one_vote)
1818
1919
20class PoliticalParty:20class PoliticalParty:
21    def __init__(self, name, motto, members=None, preferred_currency=None):21    def __init__(self, name, motto, members=None, preferred_currency=None):
22        self.name = name22        self.name = name
23        self._motto = motto23        self._motto = motto
24        self.members = members[:] if members else []  # Check for mutating in tests24        self.members = members[:] if members else []  # Check for mutating in tests
25        self.preferred_currency = preferred_currency25        self.preferred_currency = preferred_currency
2626
27    def __str__(self):27    def __str__(self):
28        return self.name28        return self.name
2929
30    @property30    @property
31    def motto(self):31    def motto(self):
32        return self._motto32        return self._motto
3333
34    def convert_currency_to_voters(self, amount, currency):34    def convert_currency_to_voters(self, amount, currency):
35        multiplier = 2 if currency == self.preferred_currency else 135        multiplier = 2 if currency == self.preferred_currency else 1
36        return currency.convert_to_voters(amount) * multiplier36        return currency.convert_to_voters(amount) * multiplier
3737
38    def __add__(self, other_party):38    def __add__(self, other_party):
39        return Coalition(self, other_party)39        return Coalition(self, other_party)
4040
4141
42class Coalition:42class Coalition:
43    def __init__(self, *parties):43    def __init__(self, *parties):
44        self.parties = list(parties)44        self.parties = list(parties)
4545
46    def __str__(self):46    def __str__(self):
47        return "-".join(str(party) for party in self.parties)47        return "-".join(str(party) for party in self.parties)
4848
49    @property49    @property
50    def members(self):50    def members(self):
51        return {str(party): party.members for party in self.parties}51        return {str(party): party.members for party in self.parties}
5252
53    def __add__(self, coalition_or_party):53    def __add__(self, coalition_or_party):
54        parties_to_append = (54        parties_to_append = (
55            [coalition_or_party] if isinstance(coalition_or_party, PoliticalParty) else coalition_or_party.parties55            [coalition_or_party] if isinstance(coalition_or_party, PoliticalParty) else coalition_or_party.parties
56        )56        )
57        return self.__class__(*self.parties, *parties_to_append)57        return self.__class__(*self.parties, *parties_to_append)
5858
59    def convert_currency_to_voters(self, amount, currency):59    def convert_currency_to_voters(self, amount, currency):
60        preferred_currencies = {party.preferred_currency: party for party in self.parties}60        preferred_currencies = {party.preferred_currency: party for party in self.parties}
61        return preferred_currencies.get(currency, self.parties[0]).convert_currency_to_voters(amount, currency)61        return preferred_currencies.get(currency, self.parties[0]).convert_currency_to_voters(amount, currency)
6262
6363
64class Elections:64class Elections:
65    ELECTIONS_HISTORY = {}65    ELECTIONS_HISTORY = {}
6666
67    def __init__(self, year):67    def __init__(self, year):
68        self.year = year68        self.year = year
69        self.__votes = {}69        self.__votes = {}
70        self.ELECTIONS_HISTORY[year] = self70        self.ELECTIONS_HISTORY[year] = self
7171
72    @classmethod72    @classmethod
73    def get_results_by_year(cls, year):73    def get_results_by_year(cls, year):
74        return cls.ELECTIONS_HISTORY[year].get_results()74        return cls.ELECTIONS_HISTORY[year].get_results()
7575
76    def register_party_or_coalition(self, *parties_or_coalitions):76    def register_party_or_coalition(self, *parties_or_coalitions):
77        self.__votes |= {str(party_or_coallition): 0 for party_or_coallition in parties_or_coalitions}77        self.__votes |= {str(party_or_coallition): 0 for party_or_coallition in parties_or_coalitions}
7878
79    def rig_elections(self, party_or_coalition, amount, currency):79    def rig_elections(self, party_or_coalition, amount, currency):
80        self.__votes[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)80        self.__votes[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)
8181
82    def get_results(self):82    def get_results(self):
83        return self.__votes83        return self.__votes
8484
85    def vote(self, party_or_coalition):85    def vote(self, party_or_coalition):
86        self.__votes[str(party_or_coalition)] += 186        self.__votes[str(party_or_coalition)] += 1
t87 t
88 
89elections_2026 = Elections(2026)
90 
91BSP = PoliticalParty(
92    "БСП", "Ще вдигнем пенсиите и тази година!", members=["Крум Еди-Кой-Си", "Атанас Еди-Кой-Си", "Онзи другия"]
93)
94 
95elections_2026.register_party_or_coalition(BSP)
96 
97 
98gold_bars = Currency("мини-златни кюлчета", 0.2)
99GERB = PoliticalParty("ГЕРБ", "Ту-тууу!", members=["Бат'", "Бойко", "и", "сам", "стига"], preferred_currency=gold_bars)
100SDS = PoliticalParty("СДС", "Ние също сме шокирани, че все още съществуваме...", members=["Румен, ама не Радев"])
101GERB_SDS = GERB + SDS
102 
103elections_2026.register_party_or_coalition(GERB_SDS)
104elections_2026.vote(BSP)
105elections_2026.rig_elections(GERB_SDS, 1, gold_bars)
106 
107print(elections_2026.get_results())  # {"БСП": 1, "ГЕРБ-СДС": 5}
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1class Currency:f1class Currency:
2    def __init__(self, name, required_for_one_vote):2    def __init__(self, name, required_for_one_vote):
3        self.name = name3        self.name = name
4        self.required_for_one_vote = required_for_one_vote4        self.required_for_one_vote = required_for_one_vote
55
6    def __eq__(self, other):6    def __eq__(self, other):
7        return (7        return (
8            False8            False
9            if other is None9            if other is None
10            else (self.name == other.name and self.required_for_one_vote == other.required_for_one_vote)10            else (self.name == other.name and self.required_for_one_vote == other.required_for_one_vote)
11        )11        )
1212
13    def __hash__(self):13    def __hash__(self):
14        return hash(self.name)14        return hash(self.name)
1515
16    def convert_to_voters(self, amount):16    def convert_to_voters(self, amount):
n17        return amount // self.required_for_one_voten17        return int(amount / self.required_for_one_vote)
1818
1919
20class PoliticalParty:20class PoliticalParty:
21    def __init__(self, name, motto, members=None, preferred_currency=None):21    def __init__(self, name, motto, members=None, preferred_currency=None):
22        self.name = name22        self.name = name
23        self._motto = motto23        self._motto = motto
24        self.members = members[:] if members else []  # Check for mutating in tests24        self.members = members[:] if members else []  # Check for mutating in tests
25        self.preferred_currency = preferred_currency25        self.preferred_currency = preferred_currency
2626
27    def __str__(self):27    def __str__(self):
28        return self.name28        return self.name
2929
30    @property30    @property
31    def motto(self):31    def motto(self):
32        return self._motto32        return self._motto
3333
34    def convert_currency_to_voters(self, amount, currency):34    def convert_currency_to_voters(self, amount, currency):
35        multiplier = 2 if currency == self.preferred_currency else 135        multiplier = 2 if currency == self.preferred_currency else 1
36        return currency.convert_to_voters(amount) * multiplier36        return currency.convert_to_voters(amount) * multiplier
3737
38    def __add__(self, other_party):38    def __add__(self, other_party):
39        return Coalition(self, other_party)39        return Coalition(self, other_party)
4040
4141
42class Coalition:42class Coalition:
43    def __init__(self, *parties):43    def __init__(self, *parties):
44        self.parties = list(parties)44        self.parties = list(parties)
4545
46    def __str__(self):46    def __str__(self):
47        return "-".join(str(party) for party in self.parties)47        return "-".join(str(party) for party in self.parties)
4848
49    @property49    @property
50    def members(self):50    def members(self):
51        return {str(party): party.members for party in self.parties}51        return {str(party): party.members for party in self.parties}
5252
53    def __add__(self, coalition_or_party):53    def __add__(self, coalition_or_party):
54        parties_to_append = (54        parties_to_append = (
55            [coalition_or_party] if isinstance(coalition_or_party, PoliticalParty) else coalition_or_party.parties55            [coalition_or_party] if isinstance(coalition_or_party, PoliticalParty) else coalition_or_party.parties
56        )56        )
57        return self.__class__(*self.parties, *parties_to_append)57        return self.__class__(*self.parties, *parties_to_append)
5858
59    def convert_currency_to_voters(self, amount, currency):59    def convert_currency_to_voters(self, amount, currency):
60        preferred_currencies = {party.preferred_currency: party for party in self.parties}60        preferred_currencies = {party.preferred_currency: party for party in self.parties}
61        return preferred_currencies.get(currency, self.parties[0]).convert_currency_to_voters(amount, currency)61        return preferred_currencies.get(currency, self.parties[0]).convert_currency_to_voters(amount, currency)
6262
6363
64class Elections:64class Elections:
65    ELECTIONS_HISTORY = {}65    ELECTIONS_HISTORY = {}
6666
67    def __init__(self, year):67    def __init__(self, year):
68        self.year = year68        self.year = year
69        self.__votes = {}69        self.__votes = {}
70        self.ELECTIONS_HISTORY[year] = self70        self.ELECTIONS_HISTORY[year] = self
7171
72    @classmethod72    @classmethod
73    def get_results_by_year(cls, year):73    def get_results_by_year(cls, year):
74        return cls.ELECTIONS_HISTORY[year].get_results()74        return cls.ELECTIONS_HISTORY[year].get_results()
7575
76    def register_party_or_coalition(self, *parties_or_coalitions):76    def register_party_or_coalition(self, *parties_or_coalitions):
77        self.__votes |= {str(party_or_coallition): 0 for party_or_coallition in parties_or_coalitions}77        self.__votes |= {str(party_or_coallition): 0 for party_or_coallition in parties_or_coalitions}
7878
79    def rig_elections(self, party_or_coalition, amount, currency):79    def rig_elections(self, party_or_coalition, amount, currency):
80        self.__votes[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)80        self.__votes[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)
8181
82    def get_results(self):82    def get_results(self):
83        return self.__votes83        return self.__votes
8484
85    def vote(self, party_or_coalition):85    def vote(self, party_or_coalition):
86        self.__votes[str(party_or_coalition)] += 186        self.__votes[str(party_or_coalition)] += 1
tt87 
88 
89elections_2026 = Elections(2026)
90 
91BSP = PoliticalParty(
92    "БСП", "Ще вдигнем пенсиите и тази година!", members=["Крум Еди-Кой-Си", "Атанас Еди-Кой-Си", "Онзи другия"]
93)
94 
95elections_2026.register_party_or_coalition(BSP)
96 
97 
98gold_bars = Currency("мини-златни кюлчета", 0.2)
99GERB = PoliticalParty("ГЕРБ", "Ту-тууу!", members=["Бат'", "Бойко", "и", "сам", "стига"], preferred_currency=gold_bars)
100SDS = PoliticalParty("СДС", "Ние също сме шокирани, че все още съществуваме...", members=["Румен, ама не Радев"])
101GERB_SDS = GERB + SDS
102 
103elections_2026.register_party_or_coalition(GERB_SDS)
104elections_2026.vote(BSP)
105elections_2026.rig_elections(GERB_SDS, 1, gold_bars)
106 
107print(elections_2026.get_results())  # {"БСП": 1, "ГЕРБ-СДС": 5}
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op

f1class Currency:f1class Currency:
2    def __init__(self, name, required_for_one_vote):2    def __init__(self, name, required_for_one_vote):
3        self.name = name3        self.name = name
4        self.required_for_one_vote = required_for_one_vote4        self.required_for_one_vote = required_for_one_vote
55
6    def __eq__(self, other):6    def __eq__(self, other):
n7        return self.name == other.namen7        return (
8            False
9            if other is None
10            else (self.name == other.name and self.required_for_one_vote == other.required_for_one_vote)
11        )
12 
13    def __hash__(self):
14        return hash(self.name)
815
9    def convert_to_voters(self, amount):16    def convert_to_voters(self, amount):
10        return amount // self.required_for_one_vote17        return amount // self.required_for_one_vote
1118
1219
13class PoliticalParty:20class PoliticalParty:
14    def __init__(self, name, motto, members=None, preferred_currency=None):21    def __init__(self, name, motto, members=None, preferred_currency=None):
15        self.name = name22        self.name = name
n16        self.motto = motton23        self._motto = motto
17        self.members = members[:]  # Check for mutating in tests24        self.members = members[:] if members else []  # Check for mutating in tests
18        self.preferred_currency = preferred_currency25        self.preferred_currency = preferred_currency
nn26 
27    def __str__(self):
28        return self.name
1929
20    @property30    @property
21    def motto(self):31    def motto(self):
22        return self._motto32        return self._motto
2333
24    def convert_currency_to_voters(self, amount, currency):34    def convert_currency_to_voters(self, amount, currency):
25        multiplier = 2 if currency == self.preferred_currency else 135        multiplier = 2 if currency == self.preferred_currency else 1
26        return currency.convert_to_voters(amount) * multiplier36        return currency.convert_to_voters(amount) * multiplier
2737
28    def __add__(self, other_party):38    def __add__(self, other_party):
n29        return Coallition(self, other_party)n39        return Coalition(self, other_party)
3040
3141
n32class Coallition:n42class Coalition:
33    def __init__(self, *parties):43    def __init__(self, *parties):
n34        self.parties = partiesn44        self.parties = list(parties)
45 
46    def __str__(self):
47        return "-".join(str(party) for party in self.parties)
3548
36    @property49    @property
37    def members(self):50    def members(self):
n38        return {party.name: party.members for party in self.parties}n51        return {str(party): party.members for party in self.parties}
3952
n40    def __add__(self, coallition_or_party):n53    def __add__(self, coalition_or_party):
41        if isinstance(PoliticalParty):54        parties_to_append = (
42            self.parties.append(PoliticalParty)55            [coalition_or_party] if isinstance(coalition_or_party, PoliticalParty) else coalition_or_party.parties
43            return self56        )
44 57        return self.__class__(*self.parties, *parties_to_append)
45        return Coallition(*self.parties, *coallition_or_party.parties)
4658
47    def convert_currency_to_voters(self, amount, currency):59    def convert_currency_to_voters(self, amount, currency):
n48        preferred_currencies = {n
49            party.preferred_currency: party for party in self.parties60        preferred_currencies = {party.preferred_currency: party for party in self.parties}
50        }61        return preferred_currencies.get(currency, self.parties[0]).convert_currency_to_voters(amount, currency)
51        return preferred_currencies.get(
52            currency, self.parties[0]
53        ).convert_currency_to_voters(amount, currency)
5462
5563
56class Elections:64class Elections:
57    ELECTIONS_HISTORY = {}65    ELECTIONS_HISTORY = {}
5866
59    def __init__(self, year):67    def __init__(self, year):
60        self.year = year68        self.year = year
61        self.__votes = {}69        self.__votes = {}
62        self.ELECTIONS_HISTORY[year] = self70        self.ELECTIONS_HISTORY[year] = self
6371
64    @classmethod72    @classmethod
65    def get_results_by_year(cls, year):73    def get_results_by_year(cls, year):
66        return cls.ELECTIONS_HISTORY[year].get_results()74        return cls.ELECTIONS_HISTORY[year].get_results()
6775
n68    def register_party_or_coallition(self, *parties_or_coallitions):n76    def register_party_or_coalition(self, *parties_or_coalitions):
69        self.__votes |= {poc.name: 0 for poc in parties_or_coallitions}77        self.__votes |= {str(party_or_coallition): 0 for party_or_coallition in parties_or_coalitions}
7078
n71    def rig_elections(self, party_or_coallition, amount, currency):n79    def rig_elections(self, party_or_coalition, amount, currency):
72        self.__votes[party_or_coallition.name] += (
73            party_or_coallition.convert_currency_to_voters(amount, currency)80        self.__votes[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)
74        )
7581
76    def get_results(self):82    def get_results(self):
77        return self.__votes83        return self.__votes
7884
t79    def vote(self, party_or_coallition):t85    def vote(self, party_or_coalition):
80        self.__votes[party_or_coallition.name] += 186        self.__votes[str(party_or_coalition)] += 1
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op