Lab 4: Mutability, Abstract Data Types
Due by 11:59pm on Friday, September 26.
Starter Files
Download lab04.zip.
Required Questions
Coding Practice
Q1: Over 9000
Define over_nine_thousand
, which takes a list and modifies that list by
adding 9000 to each element.
def over_nine_thousand(original_list):
"""
>>> original_list = [1, 2, 3, 4, 5]
>>> over_nine_thousand(original_list)
>>> original_list
[9001, 9002, 9003, 9004, 9005]
"""
"*** YOUR CODE HERE ***"
Use Ok to test your code:
python3 ok -q over_nine_thousand
Q2: Group By
Write a function that takes in a list s
and a function fn
, and returns a dictionary that groups the elements of s
based on the result of applying fn
.
- The dictionary should have one key for each unique result of applying
fn
to elements ofs
. - The value for each key should be a list of all elements in
s
that, when passed tofn
, produce that key (what it evaluates to).
In other words, for each element e
in s
, determine fn(e)
and add e
to the list corresponding to fn(e)
in the dictionary.
def group_by(s: list[int], fn) -> dict[int, list[int]]:
"""Return a dictionary of lists that together contain the elements of s.
The key for each list is the value that fn returns when called on any of the
values of that list.
>>> group_by([12, 23, 14, 45], lambda p: p // 10)
{1: [12, 14], 2: [23], 4: [45]}
>>> group_by(range(-3, 4), lambda x: x * x)
{9: [-3, 3], 4: [-2, 2], 1: [-1, 1], 0: [0]}
"""
grouped = {}
for ____ in ____:
key = ____
if key in grouped:
____
else:
grouped[key] = ____
return grouped
Use Ok to test your code:
python3 ok -q group_by
Q3: Common Players
Implement the function common_players
. The common_players
function takes in a roster
dictionary that
maps players to their teams, and returns a new dictionary that maps teams to a list of players on that team.
The order of player names in the list does not matter.
def common_players(roster):
"""Returns a dictionary containing values along with a corresponding
list of keys that had that value from the original dictionary.
>>> full_roster = {
... "bob": "Team A",
... "barnum": "Team B",
... "beatrice": "Team C",
... "bernice": "Team B",
... "ben": "Team D",
... "belle": "Team A",
... "bill": "Team B",
... "bernie": "Team B",
... "baxter": "Team A"
... }
>>> player_dict = common_players(full_roster)
>>> type(player_dict) == dict
True
>>> for key, val in sorted(player_dict.items()):
... print(key, list(sorted(val)))
Team A ['baxter', 'belle', 'bob']
Team B ['barnum', 'bernice', 'bernie', 'bill']
Team C ['beatrice']
Team D ['ben']
"""
"*** YOUR CODE HERE ***"
Use Ok to test your code:
python3 ok -q common_players
Check Your Score Locally
You can locally check your score on each question of this assignment by running
python3 ok --score
This does NOT submit the assignment! When you are satisfied with your score, submit the assignment to Gradescope to receive credit for it.
Submit Assignment
Submit this assignment by uploading any files you've edited to the appropriate Gradescope assignment. Lab 00 has detailed instructions.