last_names = ["Messi", "Ronaldo", "Neymar", "Suarez", "Mbappe", "Hazard", "Kane", "Salah", "Lewandowski", "Brown", "Davis"]3.4 Project
Working with Loops
Let’s imagine we have a list of last names of famous soccer players.
We want to sort them alphabetically in descending order.
last_names.sort(reverse=True)
print(last_names)['Suarez', 'Salah', 'Ronaldo', 'Neymar', 'Messi', 'Mbappe', 'Lewandowski', 'Kane', 'Hazard', 'Davis', 'Brown']
But we forgot that we forgot Calvin in the list, and we need to add it between Brown and Davis. We can use the insert method to add it.
last_names.insert(10, "Calvin")
print(last_names)['Suarez', 'Salah', 'Ronaldo', 'Neymar', 'Messi', 'Mbappe', 'Lewandowski', 'Kane', 'Hazard', 'Davis', 'Calvin', 'Brown']
Now we want to remove Brown from the list. We can use the remove method to remove it.
last_names.remove("Brown")Now we want to turn the list into a list of objects so we can add stats to them.
player_stats = []
goals = {"Messi": 30, "Ronaldo": 28, "Neymar": 20, "Suarez": 25, "Mbappe": 22, "Hazard": 15, "Kane": 18, "Salah": 21, "Lewandowski": 27, "Calvin": 10, "Davis": 5}
games = {"Messi": 52, "Ronaldo": 50, "Neymar": 45, "Suarez": 48, "Mbappe": 47, "Hazard": 40, "Kane": 42, "Salah": 46, "Lewandowski": 49, "Calvin": 30, "Davis": 35}
assists = {"Messi": 20, "Ronaldo": 18, "Neymar": 15, "Suarez": 20, "Mbappe": 17, "Hazard": 10, "Kane": 12, "Salah": 15, "Lewandowski": 18, "Calvin": 5, "Davis": 8}
for name in last_names:
player = {
"name": name,
"goals": goals[name],
"games": games[name],
"assists": assists[name]
}
player_stats.append(player)
print(player_stats)[{'name': 'Suarez', 'goals': 25, 'games': 48, 'assists': 20}, {'name': 'Salah', 'goals': 21, 'games': 46, 'assists': 15}, {'name': 'Ronaldo', 'goals': 28, 'games': 50, 'assists': 18}, {'name': 'Neymar', 'goals': 20, 'games': 45, 'assists': 15}, {'name': 'Messi', 'goals': 30, 'games': 52, 'assists': 20}, {'name': 'Mbappe', 'goals': 22, 'games': 47, 'assists': 17}, {'name': 'Lewandowski', 'goals': 27, 'games': 49, 'assists': 18}, {'name': 'Kane', 'goals': 18, 'games': 42, 'assists': 12}, {'name': 'Hazard', 'goals': 15, 'games': 40, 'assists': 10}, {'name': 'Davis', 'goals': 5, 'games': 35, 'assists': 8}, {'name': 'Calvin', 'goals': 10, 'games': 30, 'assists': 5}]
Now we want to change the number of games each player played in. We had a mistake in our data entry and dropped 7 games from everyone’s stats. We need to add 7 to every game position. We can use a for loop to update the number of games played.
for player in player_stats:
player["games"] += 7Now we have a list of ballon d’or winners. We want to split our players lists into two different lists of ballon d’or winners and ballon d’or losers.
ballon_dor_winners = ["Messi", "Ronaldo"]
winners = []
losers = []
for players in player_stats:
if players["name"] in ballon_dor_winners:
winners.append(players)
else:
losers.append(players)
print(winners)[{'name': 'Ronaldo', 'goals': 28, 'games': 57, 'assists': 18}, {'name': 'Messi', 'goals': 30, 'games': 59, 'assists': 20}]
Now we want to know what the difference in the average stats of the winners vs the losers are. Is the ballon d’or based on stats or are the winners just gaining accolades based on their reputation? We can calculate the average stats of the winners and the losers and compare them.
avg_w = {"avg_goals": 0, "avg_games": 0, "avg_assists": 0}
avg_l = {"avg_goals": 0, "avg_games": 0, "avg_assists": 0}
for player in winners:
avg_w["avg_goals"] += player["goals"]
avg_w["avg_games"] += player["games"]
avg_w["avg_assists"] += player["assists"]
for key in avg_w.keys():
avg_w[key] = avg_w[key] / len(winners)
for player in losers:
avg_l["avg_goals"] += player["goals"]
avg_l["avg_games"] += player["games"]
avg_l["avg_assists"] += player["assists"]
for key in avg_l.keys():
avg_l[key] = avg_l[key] / len(losers)
for key in avg_w.keys():
print(f"winners {key} difference: {avg_w[key] - avg_l[key]}")winners avg_goals difference: 10.88888888888889
winners avg_games difference: 8.555555555555557
winners avg_assists difference: 5.666666666666666