| f | class Currency: | f | class Currency: |
| def __init__(self, name, rate): | | def __init__(self, name, rate): |
| self.name = name | | self.name = name |
| self.rate = rate | | self.rate = rate |
| | | |
| def __eq__(self, other): | | def __eq__(self, other): |
| n | if not isinstance(other, Currency): | n | |
| return False | | |
| return self.name == other.name and self.rate == other.rate | | return isinstance(other, Currency) and self.name == other.name and self.rate == other.rate |
| | | |
| | | |
| class PoliticalParty: | | class PoliticalParty: |
| def __init__(self, name, motto, members=None, preferred_currency=None): | | def __init__(self, name, motto, members=None, preferred_currency=None): |
| self.name = name | | self.name = name |
| self._motto = motto | | self._motto = motto |
| self.members = members if members else [] | | self.members = members if members else [] |
| self.preferred_currency = preferred_currency | | self.preferred_currency = preferred_currency |
| | | |
| @property | | @property |
| def motto(self): | | def motto(self): |
| return self._motto | | return self._motto |
| | | |
| def convert_currency_to_voters(self, amount, currency): | | def convert_currency_to_voters(self, amount, currency): |
| voters = int(amount / currency.rate) | | voters = int(amount / currency.rate) |
| if self.preferred_currency == currency: | | if self.preferred_currency == currency: |
| voters *= 2 | | voters *= 2 |
| return voters | | return voters |
| | | |
| def __str__(self): | | def __str__(self): |
| return self.name | | return self.name |
| | | |
| def __add__(self, other): | | def __add__(self, other): |
| if isinstance(other, PoliticalParty): | | if isinstance(other, PoliticalParty): |
| n | return Coalition(self,other) | n | return Coalition(self, other) |
| return NotImplemented | | return NotImplemented |
| n | | n | |
| | | |
| class Coalition: | | class Coalition: |
| def __init__(self, *parties): | | def __init__(self, *parties): |
| self.parties = list(parties) | | self.parties = list(parties) |
| | | |
| @property | | @property |
| def members(self): | | def members(self): |
| return {party.name: party.members for party in self.parties} | | return {party.name: party.members for party in self.parties} |
| | | |
| def __add__(self, other): | | def __add__(self, other): |
| if isinstance(other, PoliticalParty): | | if isinstance(other, PoliticalParty): |
| n | return Coalition(*self.parties,other) | n | return Coalition(*self.parties, other) |
| | | |
| if isinstance(other, Coalition): | | if isinstance(other, Coalition): |
| return Coalition(*self.parties, *other.parties) | | return Coalition(*self.parties, *other.parties) |
| n | | n | |
| return NotImplemented | | return NotImplemented |
| | | |
| def __str__(self): | | def __str__(self): |
| return "-".join([party.name for party in self.parties]) | | return "-".join([party.name for party in self.parties]) |
| n | | n | |
| | | |
| class Elections: | | class Elections: |
| _history = {} | | _history = {} |
| | | |
| def __init__(self, year): | | def __init__(self, year): |
| self.year = year | | self.year = year |
| self.result = {} | | self.result = {} |
| Elections._history[year] = self | | Elections._history[year] = self |
| | | |
| def register_party_or_coalition(self, obj): | | def register_party_or_coalition(self, obj): |
| name = str(obj) | | name = str(obj) |
| if name not in self.result: | | if name not in self.result: |
| self.result[name] = 0 | | self.result[name] = 0 |
| | | |
| def vote(self, obj): | | def vote(self, obj): |
| name = str(obj) | | name = str(obj) |
| self.result[name] += 1 | | self.result[name] += 1 |
| | | |
| def rig_elections(self, obj, amount, currency): | | def rig_elections(self, obj, amount, currency): |
| name = str(obj) | | name = str(obj) |
| n | | n | |
| voters = 0 | | voters = 0 |
| | | |
| if isinstance(obj, PoliticalParty): | | if isinstance(obj, PoliticalParty): |
| voters = obj.convert_currency_to_voters(amount, currency) | | voters = obj.convert_currency_to_voters(amount, currency) |
| n | | n | |
| elif isinstance(obj, Coalition): | | elif isinstance(obj, Coalition): |
| voters = max( | | voters = max( |
| party.convert_currency_to_voters(amount, currency) | | party.convert_currency_to_voters(amount, currency) |
| for party in obj.parties | | for party in obj.parties |
| ) | | ) |
| | | |
| self.result[name] += voters | | self.result[name] += voters |
| | | |
| def get_results(self): | | def get_results(self): |
| return self.result | | return self.result |
| | | |
| @classmethod | | @classmethod |
| def get_results_by_year(cls, year): | | def get_results_by_year(cls, year): |
| if year in cls._history: | | if year in cls._history: |
| return cls._history[year].get_results() | | return cls._history[year].get_results() |
| return None | | return None |
| t | | t | |
| | | |