import re # Task 1 class Party: def __init__(self, fylke, code, name, voters, votes): self.fylke = fylke self.code = code self.name = name self.voters = voters self.votes = votes def percent(self): return self.votes*100/self.voters def table_from_votes(file_path, num=None): with open(file_path) as f: lines = f.readlines() f.close() # Read all the entries into a list of parties local_parties = [] for l in lines[1:]: l = l.split(';') party = Party(fylke=l[1], code=l[6], name=l[7], voters=int(l[9]), votes=int(l[12])) local_parties.append(party) # Combine all the local results into a list of national party results p_codes = [] parties = [] total_votes = 0 # Not all parties are in all distrcts. Therofore i need to get the total amount of voters from a party that is everywhere for p in local_parties: if p.code == 'A': total_votes += p.voters # Put all the kommuneparties into fylker for p in local_parties: if p.code not in p_codes: party = Party('Alle', p.code, p.name, total_votes, p.votes) parties.append(party) p_codes.append(p.code) else: party = next(x for x in parties if x.code == p.code) party.voters += p.voters party.votes += p.votes parties.sort(key=lambda x: x.percent(), reverse=True) # Create the table t = '{:^8}|{:^8}|{:^10}\n'.format('Parti', 'Prosent', 'Stemmer') t += ("-"*len(t)+"\n") for n, p in enumerate(parties): if p.percent() > 4.0: t += (f'\033[1m{p.code:^8}|{p.percent():^8.2f}|{p.votes:^10}\033[0m\n') else: t += (f'{p.code:^8}|{p.percent():^8.2f}|{p.votes:^10}\n') if n == num: break; return(t) # Task 2 def print_encoding_info(char): char_int = int.from_bytes(bytes(char, 'utf-8')) print(f"Character: '{char}'") if char_int < 129: print(f"- ASCII representation: {format(char_int, 'b')}") else: print("- Not in ASCII range") print(f"- UTF-8: {' '.join(format(x, 'b') for x in bytearray(char, 'utf-8'))}", end='') print(f' ({len(bytearray(char, "utf-8"))} bytes)') print('\n') def print_encoding_info_list(char_list): for char in char_list: print_encoding_info(char) def main(): print(table_from_votes('2021-09-14_party distribution_1_st_2021.csv')) print(table_from_votes('2021-09-14_party distribution_1_st_2021.csv', 3)) print_encoding_info_list(["2", "$", "å"]) if __name__ == '__main__': main()