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

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

7 точки общо

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

  1from collections import defaultdict
  2
  3class Currency:
  4    def __init__(self, name, exchange_rate):
  5        self.name = name
  6        self.exchange_rate = exchange_rate
  7    
  8    def __eq__(self, other):
  9        return self.name == other.name and self.exchange_rate == other.exchange_rate
 10
 11
 12class PoliticalParty:
 13    def __init__(self, name, motto, *members, **preferred_currency):
 14        self.name = name
 15        self._motto = motto
 16        if "members" in preferred_currency:
 17            self.members = preferred_currency.pop("members")
 18        else:
 19            self.members = list(members)
 20        self.preferred_currency = preferred_currency
 21
 22    @property
 23    def motto(self):
 24        return self._motto
 25    
 26    def convert_currency_to_voters(self, amount, currency):
 27        effective_amount = amount
 28        for preferred_currency in self.preferred_currency.values():
 29            if currency == preferred_currency:
 30                effective_amount = amount * 2
 31        voters = int(effective_amount / currency.exchange_rate)
 32        return voters
 33
 34    def __str__(self):
 35        return self.name
 36
 37    def __add__(self, other):
 38        if isinstance(other, PoliticalParty):
 39            return Coalition(self, other)
 40        elif isinstance(other, Coalition):
 41            return Coalition(self, *other.parties)
 42        
 43
 44class Coalition:
 45    def __init__(self, *parties):
 46        self.parties = parties
 47
 48    @property
 49    def members(self):
 50        members = defaultdict(list)
 51        for party in self.parties:
 52            members[party.name] = []
 53            for member in party.members:
 54                members[party.name].append(member)
 55        return members
 56
 57    def __add__(self, other):
 58        if isinstance(other, PoliticalParty):
 59            return Coalition(*self.parties, other)
 60        elif isinstance(other, Coalition):
 61            return Coalition(*self.parties, *other.parties)
 62        
 63    def __str__(self):
 64        names = [party.name for party in self.parties]
 65        result = ""
 66        result = "-".join(names)
 67        return result 
 68
 69
 70class Elections:
 71    _election_archive = {}
 72
 73    def __init__(self, year):
 74        self.year = year
 75        self.results = defaultdict(int)
 76        Elections._election_archive[year] = self
 77
 78    def register_party_or_coalition(self, party_or_coalition):
 79        if isinstance(party_or_coalition, PoliticalParty):
 80            self.results[str(party_or_coalition)] = 0
 81        elif isinstance(party_or_coalition, Coalition):
 82            self.results[str(party_or_coalition)] = 0
 83
 84    def vote(self, party_or_coalition):
 85         self.results[str(party_or_coalition)] += 1
 86
 87    def rig_elections(self, party_or_coalition, amount, currency):
 88        coalition_voters = []
 89        if isinstance(party_or_coalition, PoliticalParty):
 90            self.results[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)
 91        elif isinstance(party_or_coalition, Coalition):
 92            for party in party_or_coalition.parties:
 93                coalition_voters.append(party.convert_currency_to_voters(amount, currency))
 94            self.results[str(party_or_coalition)] += max(coalition_voters)
 95
 96    def get_results(self):
 97        return dict(self.results)
 98
 99    @classmethod       
100    def get_results_by_year(cls, year):
101        if year in cls._election_archive:
102            return cls._election_archive[year].get_results()
103        return {}

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

OK

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

f1from collections import defaultdictf1from collections import defaultdict
22
3class Currency:3class Currency:
4    def __init__(self, name, exchange_rate):4    def __init__(self, name, exchange_rate):
5        self.name = name5        self.name = name
6        self.exchange_rate = exchange_rate6        self.exchange_rate = exchange_rate
7    7    
8    def __eq__(self, other):8    def __eq__(self, other):
9        return self.name == other.name and self.exchange_rate == other.exchange_rate9        return self.name == other.name and self.exchange_rate == other.exchange_rate
1010
1111
12class PoliticalParty:12class PoliticalParty:
13    def __init__(self, name, motto, *members, **preferred_currency):13    def __init__(self, name, motto, *members, **preferred_currency):
14        self.name = name14        self.name = name
15        self._motto = motto15        self._motto = motto
16        if "members" in preferred_currency:16        if "members" in preferred_currency:
17            self.members = preferred_currency.pop("members")17            self.members = preferred_currency.pop("members")
18        else:18        else:
19            self.members = list(members)19            self.members = list(members)
20        self.preferred_currency = preferred_currency20        self.preferred_currency = preferred_currency
2121
22    @property22    @property
23    def motto(self):23    def motto(self):
24        return self._motto24        return self._motto
25    25    
26    def convert_currency_to_voters(self, amount, currency):26    def convert_currency_to_voters(self, amount, currency):
27        effective_amount = amount27        effective_amount = amount
28        for preferred_currency in self.preferred_currency.values():28        for preferred_currency in self.preferred_currency.values():
29            if currency == preferred_currency:29            if currency == preferred_currency:
30                effective_amount = amount * 230                effective_amount = amount * 2
t31        voters = int(effective_amount // currency.exchange_rate)t31        voters = int(effective_amount / currency.exchange_rate)
32        return voters32        return voters
3333
34    def __str__(self):34    def __str__(self):
35        return self.name35        return self.name
3636
37    def __add__(self, other):37    def __add__(self, other):
38        if isinstance(other, PoliticalParty):38        if isinstance(other, PoliticalParty):
39            return Coalition(self, other)39            return Coalition(self, other)
40        elif isinstance(other, Coalition):40        elif isinstance(other, Coalition):
41            return Coalition(self, *other.parties)41            return Coalition(self, *other.parties)
42        42        
4343
44class Coalition:44class Coalition:
45    def __init__(self, *parties):45    def __init__(self, *parties):
46        self.parties = parties46        self.parties = parties
4747
48    @property48    @property
49    def members(self):49    def members(self):
50        members = defaultdict(list)50        members = defaultdict(list)
51        for party in self.parties:51        for party in self.parties:
52            members[party.name] = []52            members[party.name] = []
53            for member in party.members:53            for member in party.members:
54                members[party.name].append(member)54                members[party.name].append(member)
55        return members55        return members
5656
57    def __add__(self, other):57    def __add__(self, other):
58        if isinstance(other, PoliticalParty):58        if isinstance(other, PoliticalParty):
59            return Coalition(*self.parties, other)59            return Coalition(*self.parties, other)
60        elif isinstance(other, Coalition):60        elif isinstance(other, Coalition):
61            return Coalition(*self.parties, *other.parties)61            return Coalition(*self.parties, *other.parties)
62        62        
63    def __str__(self):63    def __str__(self):
64        names = [party.name for party in self.parties]64        names = [party.name for party in self.parties]
65        result = ""65        result = ""
66        result = "-".join(names)66        result = "-".join(names)
67        return result 67        return result 
6868
6969
70class Elections:70class Elections:
71    _election_archive = {}71    _election_archive = {}
7272
73    def __init__(self, year):73    def __init__(self, year):
74        self.year = year74        self.year = year
75        self.results = defaultdict(int)75        self.results = defaultdict(int)
76        Elections._election_archive[year] = self76        Elections._election_archive[year] = self
7777
78    def register_party_or_coalition(self, party_or_coalition):78    def register_party_or_coalition(self, party_or_coalition):
79        if isinstance(party_or_coalition, PoliticalParty):79        if isinstance(party_or_coalition, PoliticalParty):
80            self.results[str(party_or_coalition)] = 080            self.results[str(party_or_coalition)] = 0
81        elif isinstance(party_or_coalition, Coalition):81        elif isinstance(party_or_coalition, Coalition):
82            self.results[str(party_or_coalition)] = 082            self.results[str(party_or_coalition)] = 0
8383
84    def vote(self, party_or_coalition):84    def vote(self, party_or_coalition):
85         self.results[str(party_or_coalition)] += 185         self.results[str(party_or_coalition)] += 1
8686
87    def rig_elections(self, party_or_coalition, amount, currency):87    def rig_elections(self, party_or_coalition, amount, currency):
88        coalition_voters = []88        coalition_voters = []
89        if isinstance(party_or_coalition, PoliticalParty):89        if isinstance(party_or_coalition, PoliticalParty):
90            self.results[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)90            self.results[str(party_or_coalition)] += party_or_coalition.convert_currency_to_voters(amount, currency)
91        elif isinstance(party_or_coalition, Coalition):91        elif isinstance(party_or_coalition, Coalition):
92            for party in party_or_coalition.parties:92            for party in party_or_coalition.parties:
93                coalition_voters.append(party.convert_currency_to_voters(amount, currency))93                coalition_voters.append(party.convert_currency_to_voters(amount, currency))
94            self.results[str(party_or_coalition)] += max(coalition_voters)94            self.results[str(party_or_coalition)] += max(coalition_voters)
9595
96    def get_results(self):96    def get_results(self):
97        return dict(self.results)97        return dict(self.results)
9898
99    @classmethod       99    @classmethod       
100    def get_results_by_year(cls, year):100    def get_results_by_year(cls, year):
101        if year in cls._election_archive:101        if year in cls._election_archive:
102            return cls._election_archive[year].get_results()102            return cls._election_archive[year].get_results()
103        return {}103        return {}
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op