Домашни > Предизборно ООП > Решения > Решението на Иван Грозданов

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

6 точки общо

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

 1class Currency :
 2    def __init__(self, currency_name, exchange_rate) :
 3        self.currency_name = currency_name
 4        self.exchange_rate = exchange_rate
 5
 6    def __eq__(self, other):
 7        return True if self.currency_name == other.currency_name and self.exchange_rate == other.exchange_rate else False
 8
 9
10class Coalition:
11    def __init__(self, *parties):
12        self.partners = parties
13        self.members = {}
14        for party in parties:
15            if isinstance(party, PoliticalParty):
16                self.members[str(party)] = party.members
17            else:
18                for name, members in party.members.items():
19                    self.members[name] = members
20
21    def __str__(self):
22        return str("-".join(str(party) for party in self.members.keys()))
23
24    def __add__(self, other):
25        return Coalition(self, other) if isinstance(other, PoliticalParty) or isinstance(other, Coalition) else None
26        
27            
28class PoliticalParty:
29    def __init__(self, party_name, motto, members = [], preferred_currency = None):
30        self.party_name = party_name
31        object.__setattr__(self, "motto", motto)
32        self.members = members
33        self.preferred_currency = preferred_currency
34
35    def __setattr__(self, name, value):
36        None if name == "motto" else object.__setattr__(self, name, value)
37
38    def __str__(self):
39        return self.party_name
40
41    def __add__(self, other):
42        return Coalition(self, other) if isinstance(other, PoliticalParty) else None
43
44    def convert_currency_to_voters(self, amount, type_of_currency):
45        return ((amount / type_of_currency.exchange_rate) // 1) * (2 if isinstance(self.preferred_currency, type_of_currency.__class__) else 1)
46    
47
48class Elections:
49    year_election = []
50
51    def __init__(self, year):
52        self.year = year
53        self.registered_parties_or_coalitions = {}
54        Elections.year_election.append(self)
55
56    def register_party_or_coalition(self, party_or_coalition):
57        self.registered_parties_or_coalitions[str(party_or_coalition)] = 0
58
59    def vote(self, party_or_coalition):
60        self.registered_parties_or_coalitions[str(party_or_coalition)] += 1
61
62    def rig_elections(self, party_or_coalition, amount, currency):
63        if isinstance(party_or_coalition, Coalition):
64            for party in party_or_coalition.partners:
65                if party.preferred_currency == currency:
66                    self.registered_parties_or_coalitions[str(party_or_coalition)] += party.convert_currency_to_voters(amount, currency)
67                    return
68        self.registered_parties_or_coalitions[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)
69
70    def get_results(self):
71        return self.registered_parties_or_coalitions
72    
73    @staticmethod
74    def get_results_by_year(year):
75        for election in Elections.year_election:
76            if election.year == year:
77                return election.get_results()

...........E.....F...
======================================================================
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 65, in rig_elections
if party.preferred_currency == currency:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/solution.py", line 7, in __eq__
return True if self.currency_name == other.currency_name and self.exchange_rate == other.exchange_rate else False
^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'currency_name'

======================================================================
FAIL: test_motto_write (test.TestPoliticalParty.test_motto_write)
Motto should not be writable after the party is created.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 37, in test_motto_write
with self.assertRaises(Exception):
~~~~~~~~~~~~~~~~~^^^^^^^^^^^
AssertionError: Exception not raised

----------------------------------------------------------------------
Ran 21 tests in 0.002s

FAILED (failures=1, errors=1)

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

f1class Currency :f1class Currency :
2    def __init__(self, currency_name, exchange_rate) :2    def __init__(self, currency_name, exchange_rate) :
3        self.currency_name = currency_name3        self.currency_name = currency_name
4        self.exchange_rate = exchange_rate4        self.exchange_rate = exchange_rate
55
6    def __eq__(self, other):6    def __eq__(self, other):
7        return True if self.currency_name == other.currency_name and self.exchange_rate == other.exchange_rate else False7        return True if self.currency_name == other.currency_name and self.exchange_rate == other.exchange_rate else False
88
99
10class Coalition:10class Coalition:
11    def __init__(self, *parties):11    def __init__(self, *parties):
12        self.partners = parties12        self.partners = parties
13        self.members = {}13        self.members = {}
14        for party in parties:14        for party in parties:
15            if isinstance(party, PoliticalParty):15            if isinstance(party, PoliticalParty):
16                self.members[str(party)] = party.members16                self.members[str(party)] = party.members
17            else:17            else:
18                for name, members in party.members.items():18                for name, members in party.members.items():
19                    self.members[name] = members19                    self.members[name] = members
2020
21    def __str__(self):21    def __str__(self):
22        return str("-".join(str(party) for party in self.members.keys()))22        return str("-".join(str(party) for party in self.members.keys()))
2323
24    def __add__(self, other):24    def __add__(self, other):
25        return Coalition(self, other) if isinstance(other, PoliticalParty) or isinstance(other, Coalition) else None25        return Coalition(self, other) if isinstance(other, PoliticalParty) or isinstance(other, Coalition) else None
26        26        
27            27            
28class PoliticalParty:28class PoliticalParty:
29    def __init__(self, party_name, motto, members = [], preferred_currency = None):29    def __init__(self, party_name, motto, members = [], preferred_currency = None):
30        self.party_name = party_name30        self.party_name = party_name
31        object.__setattr__(self, "motto", motto)31        object.__setattr__(self, "motto", motto)
32        self.members = members32        self.members = members
33        self.preferred_currency = preferred_currency33        self.preferred_currency = preferred_currency
3434
35    def __setattr__(self, name, value):35    def __setattr__(self, name, value):
36        None if name == "motto" else object.__setattr__(self, name, value)36        None if name == "motto" else object.__setattr__(self, name, value)
3737
38    def __str__(self):38    def __str__(self):
39        return self.party_name39        return self.party_name
4040
41    def __add__(self, other):41    def __add__(self, other):
42        return Coalition(self, other) if isinstance(other, PoliticalParty) else None42        return Coalition(self, other) if isinstance(other, PoliticalParty) else None
4343
44    def convert_currency_to_voters(self, amount, type_of_currency):44    def convert_currency_to_voters(self, amount, type_of_currency):
45        return ((amount / type_of_currency.exchange_rate) // 1) * (2 if isinstance(self.preferred_currency, type_of_currency.__class__) else 1)45        return ((amount / type_of_currency.exchange_rate) // 1) * (2 if isinstance(self.preferred_currency, type_of_currency.__class__) else 1)
46    46    
4747
48class Elections:48class Elections:
49    year_election = []49    year_election = []
5050
51    def __init__(self, year):51    def __init__(self, year):
52        self.year = year52        self.year = year
53        self.registered_parties_or_coalitions = {}53        self.registered_parties_or_coalitions = {}
54        Elections.year_election.append(self)54        Elections.year_election.append(self)
5555
56    def register_party_or_coalition(self, party_or_coalition):56    def register_party_or_coalition(self, party_or_coalition):
57        self.registered_parties_or_coalitions[str(party_or_coalition)] = 057        self.registered_parties_or_coalitions[str(party_or_coalition)] = 0
5858
59    def vote(self, party_or_coalition):59    def vote(self, party_or_coalition):
60        self.registered_parties_or_coalitions[str(party_or_coalition)] += 160        self.registered_parties_or_coalitions[str(party_or_coalition)] += 1
6161
62    def rig_elections(self, party_or_coalition, amount, currency):62    def rig_elections(self, party_or_coalition, amount, currency):
63        if isinstance(party_or_coalition, Coalition):63        if isinstance(party_or_coalition, Coalition):
64            for party in party_or_coalition.partners:64            for party in party_or_coalition.partners:
65                if party.preferred_currency == currency:65                if party.preferred_currency == currency:
66                    self.registered_parties_or_coalitions[str(party_or_coalition)] += party.convert_currency_to_voters(amount, currency)66                    self.registered_parties_or_coalitions[str(party_or_coalition)] += party.convert_currency_to_voters(amount, currency)
67                    return67                    return
68        self.registered_parties_or_coalitions[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)68        self.registered_parties_or_coalitions[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)
6969
70    def get_results(self):70    def get_results(self):
71        return self.registered_parties_or_coalitions71        return self.registered_parties_or_coalitions
72    72    
73    @staticmethod73    @staticmethod
74    def get_results_by_year(year):74    def get_results_by_year(year):
75        for election in Elections.year_election:75        for election in Elections.year_election:
76            if election.year == year:76            if election.year == year:
77                return election.get_results()77                return election.get_results()
t78 t
79x = PoliticalParty("Democrats", "For the people", preferred_currency=Currency("USD", 1))
80x.motto = "Changed motto"
81print(x.motto) # For the people
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op