Домашни > Предизборно ООП > Решения > Решението на Стефан Краев

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

7 точки общо

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

  1class Currency:
  2    all_currencies = {}
  3
  4    def __init__(self, name, course):
  5        self.name = name
  6        self.course = course
  7        self.all_currencies[name] = course
  8
  9    def __eq__(self, other_currency):
 10        if other_currency is None:
 11            return False
 12        if self.name == other_currency.name and self.course == other_currency.course:
 13            return True
 14        return False
 15    
 16
 17class PoliticalParty:
 18    def __init__(self, name, slogan,  members=None, preferred_currency=None):
 19        self.name = name
 20        self.slogan = slogan
 21        if members is None:
 22            self.members = []
 23        else:
 24            self.members = members
 25        self.preferred_currency = preferred_currency
 26    
 27    @property
 28    def motto(self):
 29        return self.slogan
 30    
 31    def convert_currency_to_voters(self, quantity, currency):
 32        currency_course = Currency.all_currencies.get(currency.name, None)
 33        if currency_course is None or currency_course <= 0:
 34            return 0
 35        voters = (int)(quantity / currency_course)
 36        if self.preferred_currency == currency:
 37            voters *= 2
 38        return voters
 39    
 40    def __str__(self):
 41        return self.name
 42    
 43    def __add__(self, political_party):
 44        return Coalition(self, political_party)
 45    
 46class Coalition:
 47    def __init__(self, *args):
 48        self.parties = list(args)
 49
 50    @property
 51    def members(self):
 52        all_members = {}
 53        for mems in self.parties:
 54            all_members[mems.name] = mems.members
 55        return all_members
 56    
 57    def __add__(self, other):
 58        current_political_parties = self.parties
 59        if isinstance(other, Coalition):
 60            for party in other.parties:
 61                current_political_parties.append(party)
 62        else:
 63            current_political_parties.append(other)
 64        return Coalition(*current_political_parties)
 65    
 66    def __str__(self):
 67
 68        if not self.parties:
 69            return ""
 70
 71        return "-".join(party.name for party in self.parties)
 72
 73class Elections:
 74
 75    results_records = {}
 76
 77    def __init__(self, year):
 78        self.year = year
 79        self.results = {}
 80        self.results_records[year] = self.results
 81    
 82    def register_party_or_coalition(self, political_group):
 83        self.results[str(political_group)] = 0
 84
 85    def vote(self, political_group):
 86        self.results[str(political_group)] += 1
 87    
 88    def rig_elections(self, political_group, quantity, currency):
 89
 90        if isinstance(political_group, PoliticalParty):
 91            self.results[str(political_group)] += political_group.convert_currency_to_voters(quantity, currency)
 92            return
 93        
 94        max_voters = 0
 95        for political_party in political_group.parties:
 96            if max_voters < political_party.convert_currency_to_voters(quantity, currency):
 97                max_voters = political_party.convert_currency_to_voters(quantity, currency)
 98            
 99        self.results[str(political_group)] += max_voters
100        return
101
102    def get_results(self):
103        return self.results
104
105    @classmethod
106    def get_results_by_year(cls, year): 
107        if year in cls.results_records:
108            return cls.results_records.get(year)
109        return {}
110
111
112
113
114#При предефиниране на оператори(вградени функции) не съм проверявал за типове(освен None)
115#Курсовете на валутите се презаписват при повторно въвеждане на валута

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

OK

Дискусия
История
Това решение има само една версия.