Homework 7
Due by 9:00pm on Friday, 10/19/2018
Instructions
Download hw07.zip. Inside the archive, you will find starter files for the questions in this homework, along with a copy of the OK autograder.
Submission: When you are done, submit the homework by uploading the
hw07.py
file to okpy.org.
You may submit more than once before the deadline; only the
final submission will be scored.
Readings: This homework relies on following references:
Baseball Season!
Question 1: MLB All Star
It's October, which means its baseball playoffs season! In this exercise, let's utilize dictionaries to see if we can model and learn more about some of our favorite players. In this problem, you will be implementing multiple functions.
As you can see within your hw06.py file, the dictionaries mapping players to their team and statistics respectively have been created already. However, instead of accessing these values directly, we'll be implementing two functions to retrieve the appropriate values as a layer of abstraction.
Implement the get_team
and get_stats
functions to retrieve the team or statistics given a player's name.
full_roster = {
"Manny Machado" : "Dodgers",
"Yasiel Puig" : "Dodgers",
"Aaron Judge" : "Yankees",
"Clayton Kershaw" : "Dodgers",
"Giancarlo Stanton" : "Yankees"
}
full_stats = {
"Manny Machado": ["SO", "1B", "3B", "SO", "HR"],
"Yasiel Puig": ["3B", "3B", "1B", "1B", "SO"],
"Aaron Judge": ["SO", "HR", "HR", "1B", "SO"],
"Clayton Kershaw": ["1B", "SO", "SO", "1B", "SO"],
"Giancarlo Stanton": ["HR", "SO", "3B", "SO", "2B"],
}
def get_team(player):
"""Returns team that the provided player is a member of.
>>> get_team("Manny Machado")
'Dodgers'
>>> get_team("Aaron Judge")
'Yankees'
"""
"*** YOUR CODE HERE ***"
return ______
def get_stats(player):
"""Returns the statistics associated with the provided player.
>>> get_stats("Manny Machado")
['SO', '1B', '3B', 'SO', 'HR']
>>> get_stats('Aaron Judge')
['SO', 'HR', 'HR', '1B', 'SO']
"""
"*** YOUR CODE HERE ***"
return ______
Use OK to test your code:
python3 ok -q get_team --local
python3 ok -q get_stats --local
Retrieval Methods
Question 2: Team Roster
Implement the function get_players
which takes a team name and returns a list containing all the players that are members of the given team.
def get_players(team):
"""Returns a list of all players who are members of the given team.
>>> get_players("Dodgers")
['Manny Machado', 'Yasiel Puig', 'Clayton Kershaw']
>>> get_players("Yankees")
['Aaron Judge', 'Giancarlo Stanton']
"""
"*** YOUR CODE HERE ***"
return _____
Use OK to test your code:
python3 ok -q get_players --local
Question 3: Build the Full Rosters
Implement the function common_players
. The common_players
function identifies which keys from the full_roster
share the same values. The function returns a new dictionary where each key is the value from the original dictionary, and the corresponding values of the new dictionary are list that contain keys that share the same value.
def common_players(roster):
"""Returns a dictionary containing values along with a corresponding
list of keys that had that value from the original dictionary.
>>> common_players(full_roster)
{'Dodgers': ['Manny Machado', 'Yasiel Puig', 'Clayton Kershaw'], 'Yankees': ['Aaron Judge', 'Giancarlo Stanton']}
>>> full_roster = {"bob": "excellent", "barnum": "passing", "beatrice": "satisfactory", "bernice": "passing", "ben": "no pass", "belle": "excellent", "bill": "passing", "bernie": "passing", "baxter": "excellent"}
>>> common_players(full_roster)
{'excellent': ['bob', 'belle', 'baxter'], 'passing': ['barnum', 'bernice', 'bill', 'bernie'], 'satisfactory': ['beatrice'], 'no pass': ['ben']}
"""
"*** YOUR CODE HERE ***"
return ______
Use OK to test your code:
python3 ok -q common_players --local
Sabremetrics
Question 4: Baseball Statistics
If you're a Moneyball movie fan, you know that statistics helps teams find value in players that nobody else sees. In this problem, you'll be implementing two functions to calculate the team batting average for one team, and the mean slugging percentage for all teams.
We highly encourage you to use the functions that you've defined before to solve these problems, specifically the common_players
and get_players
functions from the previous two problems.
Two functions have already been defined for you to calculate batting average and slugging percentage given a player's statistics. Use these functions when you calculate the averages for each team.
# Following Functions have been given to you, do NOT modify
def calculate_batting_average(stats):
hits = 0
total_bats = 0
for at_bat in stats:
if at_bat != "SO":
hits += 1
total_bats += 1
return float(round(hits/total_bats, 1))
def calculate_slugging_percent(stats):
bases = 0
total_bats = 0
for at_bat in stats:
if at_bat == "1B":
bases += 1
elif at_bat == "2B":
bases += 2
elif at_bat == "3B":
bases += 3
elif at_bat == "HR":
bases += 4
total_bats += 1
return float(round(bases/total_bats, 1))
# Modify Functions below
def calculate_team_BA(team):
"""Given a single team name, returns the mean batting average of all players on that team. You are encouraged to use previous functions that you've defined already
>>> calculate_team_BA('Dodgers')
0.6
>>> calculate_team_BA('Yankees')
0.6
"""
"*** YOUR CODE HERE ***"
return _____
def calculate_all_team_SP():
"""Returns a dictionary mapping every team to the average slugging percentage of all players on that team. You are encouraged to use previous functions that you've defined already.
>>> calculate_all_team_SP()
{'Dodgers': 1.2, 'Yankees': 1.8}
"""
"*** YOUR CODE HERE ***"
return _____
Use OK to test your code:
python3 ok -q calculate_team_BA --local
python3 ok -q calculate_all_team_SP --local