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
24.03.2026 08:10
24.03.2026 08:08
24.03.2026 08:12
24.03.2026 08:16
24.03.2026 08:15
24.03.2026 08:16
24.03.2026 08:17