| f | class Currency: | f | class Currency: |
| def __init__(self, name, count): | | def __init__(self, name, count): |
| self.name = name | | self.name = name |
| self.count = count | | self.count = count |
| | | |
| def __eq__(self, other): | | def __eq__(self, other): |
| return self.name == other.name and self.count == other.count | | return self.name == other.name and self.count == other.count |
| | | |
| | | |
| class PoliticalParty: | | class PoliticalParty: |
| | | |
| def __init__(self, name, motto, members=[], preferred_currency=None): | | def __init__(self, name, motto, members=[], preferred_currency=None): |
| self.name = name | | self.name = name |
| self._motto = motto | | self._motto = motto |
| self.members = members | | self.members = members |
| self.preferred_currency = preferred_currency | | self.preferred_currency = preferred_currency |
| | | |
| def convert_currency_to_voters(self, amount, currency): | | def convert_currency_to_voters(self, amount, currency): |
| voters_count = int(amount / currency.count) | | voters_count = int(amount / currency.count) |
| return 2 * voters_count if self.preferred_currency is not None and self.preferred_currency == currency else voters_count | | return 2 * voters_count if self.preferred_currency is not None and self.preferred_currency == currency else voters_count |
| | | |
| def __str__(self): | | def __str__(self): |
| return self.name | | return self.name |
| | | |
| def __add__(self, other): | | def __add__(self, other): |
| n | match(type(other).__name__): | n | if (type(other).__name__ == 'PoliticalParty'): |
| case 'PoliticalParty': | | |
| return Coalition(self, other) | | return Coalition(self, other) |
| | | |
| @property | | @property |
| def motto(self): | | def motto(self): |
| return self._motto | | return self._motto |
| | | |
| | | |
| class Coalition: | | class Coalition: |
| | | |
| def __init__(self, *args): | | def __init__(self, *args): |
| self.coalitional_parties = args | | self.coalitional_parties = args |
| | | |
| def __add__(self, other): | | def __add__(self, other): |
| match(type(other).__name__): | | match(type(other).__name__): |
| case 'Coalition': | | case 'Coalition': |
| n | new_parties = list(self.coalitional_parties) + \ | n | new_parties = list(self.coalitional_parties) + list(other.coalitional_parties) |
| list(other.coalitional_parties) | | |
| return Coalition(*new_parties) | | return Coalition(*new_parties) |
| case 'PoliticalParty': | | case 'PoliticalParty': |
| new_parties = list(self.coalitional_parties) | | new_parties = list(self.coalitional_parties) |
| new_parties.append(other) | | new_parties.append(other) |
| return Coalition(*new_parties) | | return Coalition(*new_parties) |
| | | |
| def __str__(self): | | def __str__(self): |
| t | return '-'.join([str(party) for party in self.coalitional_parties]) | t | return '-'.join(str(party) for party in self.coalitional_parties) |
| | | |
| @property | | @property |
| def members(self): | | def members(self): |
| return { | | return { |
| party.name: party.members | | party.name: party.members |
| for party in self.coalitional_parties | | for party in self.coalitional_parties |
| } | | } |
| | | |
| | | |
| class Elections: | | class Elections: |
| | | |
| register_members = [] | | register_members = [] |
| voiting_result = {} | | voiting_result = {} |
| list_of_elections = {} | | list_of_elections = {} |
| | | |
| def __init__(self, year): | | def __init__(self, year): |
| self.year = year | | self.year = year |
| Elections.list_of_elections[year] = self | | Elections.list_of_elections[year] = self |
| | | |
| def register_party_or_coalition(self, party_or_coalition): | | def register_party_or_coalition(self, party_or_coalition): |
| self.register_members.append(party_or_coalition) | | self.register_members.append(party_or_coalition) |
| self.voiting_result[str(party_or_coalition)] = 0 | | self.voiting_result[str(party_or_coalition)] = 0 |
| | | |
| def vote(self, party_or_coalition): | | def vote(self, party_or_coalition): |
| self.voiting_result[str(party_or_coalition)] += 1 | | self.voiting_result[str(party_or_coalition)] += 1 |
| | | |
| def rig_elections(self, party_or_coalition, amount, currency): | | def rig_elections(self, party_or_coalition, amount, currency): |
| match(type(party_or_coalition).__name__): | | match(type(party_or_coalition).__name__): |
| case 'Coalition': | | case 'Coalition': |
| max_voting_result = max((party.convert_currency_to_voters(amount, currency) for party in party_or_coalition.coalitional_parties)) | | max_voting_result = max((party.convert_currency_to_voters(amount, currency) for party in party_or_coalition.coalitional_parties)) |
| case 'PoliticalParty': | | case 'PoliticalParty': |
| max_voting_result = party_or_coalition.convert_currency_to_voters(amount, currency) | | max_voting_result = party_or_coalition.convert_currency_to_voters(amount, currency) |
| self.voiting_result[str(party_or_coalition)] += max_voting_result | | self.voiting_result[str(party_or_coalition)] += max_voting_result |
| | | |
| def get_results(self): | | def get_results(self): |
| return self.voiting_result | | return self.voiting_result |
| | | |
| @classmethod | | @classmethod |
| def get_results_by_year(cls, year): | | def get_results_by_year(cls, year): |
| return cls.list_of_elections.get(year).get_results() if cls.list_of_elections.get(year) is not None else {} | | return cls.list_of_elections.get(year).get_results() if cls.list_of_elections.get(year) is not None else {} |