[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)
# %%