USING PYTHON 3.7:
Part 2: The Playlist class
Exercise 3 – Exploring the Playlist class
Read through the Playlist.py class to learn how a playlist isdefined. Notice the attributes that make up a playlist. Inparticular, notice that the duration of a playlist is determined bylengths of all of the songs.
-
a) The three playlists are printed. On paper, write out what youthink the output should be for the print statements. How is theoutput of a Playlist object determined?
-
b) Call the necessary Playlist method(s) to update the name ofplaylist2 so that it is now named “Classics”. The following printstatement should now reflect this change.
-
c) Write tests to determine whether the duration attribute forthe playlists is accurate. How is the value for the durationdetermined?
-
d) Add a song to a playlist and write tests to determine theplaylist has been updated correctly.
Exercise 4 – Testing if two playlists areequal
Add tests to test_are_equal() to comprehensively test if twoplaylists are equal. Inside Playlist.py, add code to the __eq__function so that it correctly determines if two playlists areequal. For this assignment, assume two playlists are equal if theycontain all of the same songs (although the songs do not have to bein the same order within the list).
Exercise 5 – Getting the current status of a playlistafter listening for a given amount of time
Add tests to test_get_status() to comprehensively testtheget_status() method. Inside Playlist.py, add code to theget_status() method so that it works correctly. The get_status()method takes an integer as a parameter denoting the number ofseconds a user has been listening to a playlist. The functionreturns a tuple representing the current song, and how many secondsthe user is into that song.
Given a playlist that contains the following songs: ‘Champions’by Queen (220 secs), ‘Africa’ by Toto (295 secs), and ‘Hey Jude’byThe Beatles (431 secs).
If get_status() is called with 500 as the argument, that meanswe have listened for 500 secs… We would have finished listeningto ‘Champions’ (220 seconds), but not have finished listening to‘Africa’. In fact we would be 280 seconds into the song ‘Africa’,so (“Africa”, 280) would be returned.
If the time given is below 0, or greater than the total durationof the playlist, return a tuple containing the first song in theplaylist, and time 0.
Exercise 6 – Testing if two playlists areequal
Add tests to test_next_song() to comprehensively testthenext_song() method. Inside Playlist.py, add code to thenext_song() function so that it works correctly. The next_song()method takes a string representing the title of a song as aparameter, and returns the song object that comes after that songin the playlist. You may assume there is a song in the playlistwith the given title.
If the title given is the title of the last song in theplaylist, then the first song is returned.
PHYTON CODES:
tests = 0
passed = 0
import Playlist as p
def main():
### Part 2: Playlist
test_playlist_basics()
test_are_equal()
test_get_status()
test_next_song()
print(“TEST RESULTS:”, passed, “/”, tests)
def test_playlist_basics():
print(“testing playlist basics”)
list1 = []
list2 = [s.Song(“Champions”, “Queen”, 220),
s.Song(“Africa”,”Toto”, 295),
s.Song(“HeyJude”, “The Beatles”, 431),
s.Song(“Like aPrayer”, “Madonna”, 319)]
list3 = [s.Song(“Someone You Loved”, “LewisCapaldi”, 182),
s.Song(“Circles”, “Post Malone”, 215),
s.Song(“TruthHurts”, “Lizzo”, 173),
s.Song(“OnlyHuman”, “Jonas Brothers”, 183),
s.Song(“Senorita”, “Shawn Mendes”, 191),
s.Song(“Beautiful People”, “Ed Sheeren”, 207),
s.Song(“Goodbyes”, “Post Malone”, 175)]
playlist1 = p.Playlist(“None”, list1)
playlist2 = p.Playlist(“Oldies”, list2)
playlist3 = p.Playlist(“Top 40”, list3)
# Part a:
print(playlist1) # what should be outputhere?
print(playlist2) # what should be outputhere?
print(playlist3) # what should be outputhere?
# Part b:
# TODO: add code here to update the nameof playlist2 to “Classics”
print(playlist2) # This output should now bedifferent
# Part c:
result = playlist1.get_duration()
print_test(“testing with playlist1”, result ==0)
# add a test for playlist2’sduration
# add a test for playlist3’s duration
# Part d:
# add a song to a playlist and test thatthe playlist
# has been updated appropriately (try addingsongs
# that already exist too). What attributes of aplaylist
# change when a song is added?
def test_are_equal():
print(“testing are_equal”)
list1 = []
list2 = [s.Song(“Champions”, “Queen”, 220),
s.Song(“Africa”,”Toto”, 295),
s.Song(“HeyJude”, “The Beatles”, 431),
s.Song(“Like aPrayer”, “Madonna”, 319)]
list3 = [s.Song(“Africa”, “Toto”, 295),
s.Song(“Champions”, “Queen”, 220),
s.Song(“Like aPrayer”, “Madonna”, 319),
s.Song(“HeyJude”, “The Beatles”, 431)]
list4 = [s.Song(“Someone You Loved”, “Lewis Capaldi”,182),
s.Song(“Circles”, “Post Malone”, 215),
s.Song(“TruthHurts”, “Lizzo”, 173),
s.Song(“OnlyHuman”, “Jonas Brothers”, 183),
s.Song(“Senorita”, “Shawn Mendes”, 191),
s.Song(“Beautiful People”, “Ed Sheeren”, 207),
s.Song(“Goodbyes”, “Post Malone”, 175)]
playlist1 = p.Playlist(“None”, list1)
playlist2 = p.Playlist(“Oldies”, list2)
playlist3 = p.Playlist(“Favs”, list3)
playlist4 = p.Playlist(“Top 40”, list4)
# TODO: Add tests to determine iftwo
# playlists are equal.
def test_get_status():
print(“Testing get_status”)
# TODO: Add tests to test the get_status
# method found in the Playlist.py class
def test_next_song():
print(“Testing next_song”)
# TODO: Add tests to test thenext_song()
# method found in the Playlist.py class
# (str, bool -> None)
# takes the name or description of a test and whether the
# test produced the expected output (True) or not (False)
# and prints out whether that test passed or failed
# NOTE: You should not have to modify this in any way.
def print_test(test_name, result_correct):
global tests
global passed
tests += 1
if(result_correct):
print(test_name + “: passed”)
passed += 1
else:
print(test_name + “: failed”)
# The following code will call your main function
if __name__ == ‘__main__’:
main()
———————————–
Playlist.py:
class Playlist:
# (str, str, (list of Song) -> None)
# constructor for the Playlist class
def __init__(self, name, songs):
self.name = name
self.songs = songs
self.duration =self.calc_duration()
# (None -> str)
# return a string with the name and duration of theplaylist
def __str__(self):
return self.name + ” (” +str(self.duration) + “)”
# (None -> str)
# return a string with the name of the playlist
def __repr__(self):
return self.name
# (Playlist -> bool)
# return True if the other playlistcontains
# all of the exact same songs, False otherwise
def __eq__(self, other):
print(“Fix me”)
# (None -> str)
# return name of the playlist
def get_name(self):
return self.name
# (str -> None)
# update the name of the playlist to new_name
def set_name(self, new_name):
self.name = new_name
# (None -> (list of Song))
# return the list of songs in the playlist
def get_songs(self):
return self.songs
# ((list of Song)) -> None)
# change the list of songs in the playlist to thegiven list
def set_songs(self, song_list):
self.songs = song_list
self.duration = calc_duration()
# (None -> int)
# return the duration of the playlist
def get_duration(self):
return self.duration
# (None -> int)
# return the sum of all song durations
def calc_duration(self):
sum = 0
for s in self.songs:
sum +=s.get_duration()
return sum
# (Song -> None)
# add new_song to the songs list if it is not alreadyin the playlist
def add_song(self, new_song):
if new_song not inself.songs:
self.songs.append(new_song)
self.duration =self.calc_duration()
# (Song -> None)
# remove a song from the songs list
def remove_song(self, song):
if song in self.songs:
self.songs.remove(song)
self.duration =self.calc_duration()
# (int -> tuple)
# given an amount of time the playlist hasbeen
# playing, return a tuple of the form (str, int)
# containing the name of the current song, and
# how many seconds the song has been playing
def get_status(self, current):
print(“Fix me!”)
# (Song -> Song)
# given a song, return the next song in theplaylist
# Assume the given song is in the playlist
def next_song(self, title):
print(“Fix me!”)
Expert Answer
Answer to USING PYTHON 3.7: Part 2: The Playlist class Exercise 3 – Exploring the Playlist class Read through the Playlist.py cl…