[Python] python - CSV | loops[Python] python - CSV | loops

🏂

Winter Olympics

Week 6, 2026

# (%%) means that I used Jupyter to run code in segments ;) # %% import csv data = [] with open("winter-olympics.csv", newline='') as file: reader = csv.reader(file) for row in reader: data.append(row) # %% country_idx = {} ans = [] # indexes country_name = 0 total_medals = 1 total_entries = 2 win_rate = 3 gold_medal = 4 silver_medal = 5 bronze_medal = 6 total_men = 7 total_women = 8 men_medal_percentage = 9 total_win_men = 10 total_win_women = 11 curridx = 0 for i in range(1, len(data)): country = data[i][4] if "-" in country: country = country[:country.index("-")] if country not in country_idx: country_idx.update({country:curridx}) ans.append([country, 0, 0, 0.00, 0, 0, 0, 0, 0, 0.00, 0, 0]) curridx += 1 cidx = country_idx[country] ans[cidx][total_entries] += 1 match data[i][2]: case 'M' : ans[cidx][total_men] +=1 case 'F' : ans[cidx][total_women] += 1 if data[i][12] != "": ans[cidx][total_medals] += 1 match data[i][12]: case "Gold" : ans[cidx][gold_medal] += 1 case "Silver" : ans[cidx][silver_medal] += 1 case "Bronze" : ans[cidx][bronze_medal] += 1 match data[i][2]: case 'M' : ans[cidx][total_win_men] +=1 case 'F' : ans[cidx][total_win_women] += 1 # %% # --- finally getting the answer --- ans.sort(key=lambda x: (-x[total_medals], x[total_entries], x[country_name])) for line in ans: fcountry_name = line[country_name ] ftotal_medals = line[total_medals ] ftotal_entries = line[total_entries ] fwin_rate = line[win_rate ] fgold_medal = line[gold_medal ] fsilver_medal = line[silver_medal ] fbronze_medal = line[bronze_medal ] ftotal_men = line[total_men ] ftotal_women = line[total_women ] fmen_medal_percentage = line[men_medal_percentage] ftotal_win_men = line[total_win_men ] ftotal_win_women = line[total_win_women ] fwin_rate = ftotal_medals/ftotal_entries*100 fwin_rate = f"{fwin_rate:.2f}" if ftotal_medals == 0: msg = f"{fcountry_name} has won {ftotal_medals} medals from {ftotal_entries} entries - a win rate of {fwin_rate}%. Their medal breakdown is {fgold_medal} golds, {fsilver_medal} silvers and {fbronze_medal} bronzes. {ftotal_win_men} men and {ftotal_win_women} women have won medals." else: fmen_medal_percentage = ftotal_win_men/ftotal_medals*100 fmen_medal_percentage = f"{fmen_medal_percentage:.2f}" msg = f"{fcountry_name} has won {ftotal_medals} medals from {ftotal_entries} entries - a win rate of {fwin_rate}%. Their medal breakdown is {fgold_medal} golds, {fsilver_medal} silvers and {fbronze_medal} bronzes. {ftotal_win_men} men and {ftotal_win_women} women have won medals - meaning {fmen_medal_percentage}% of medals have been won by men." print(msg) # %%