diff --git a/driver.py b/driver.py new file mode 100644 index 000000000..5485d9f96 --- /dev/null +++ b/driver.py @@ -0,0 +1,25 @@ +from viewing_party.main import * + +janes_data = { + "watched": [ + { + "title": "Title A", + "genre": "Fantasy", + "rating": 4.8 + }, + { + "title": "Title B", + "genre": "Action", + "rating": 2.0 + }, + { + "title": "Title C", + "genre": "Intrigue", + "rating": 3.9 + } + ] + } +# Act +average = get_watched_avg_rating(janes_data) + +print(average) diff --git a/viewing_party/main.py b/viewing_party/main.py index e69de29bb..5fe2f55f4 100644 --- a/viewing_party/main.py +++ b/viewing_party/main.py @@ -0,0 +1,272 @@ +# <-------------- WAVE 1 ------------------ WAVE 1 ------------------------- > + +# test wave 1, part 1: +# create function: create_movie() +# function takes 2 parameters (title, genre, rating) +# IF title, genre and rating == true ==> return a dictionary +# ELSE (title, genre and rating == false ) ==> return None + +def create_movie(title, genre, rating): + movies = { + "title": title, + "genre": genre, + "rating": rating + } + if title and genre and rating: + print(movies) + return movies + else: + return None + +# test wave 1, part 2: +# create function: add_to_watch() +# function takes 2 parameters (user_data, movie) +# user_data ==> dictionary: key = watched; value = [] + # represents that user has NO movies in watched list +# movie ==> dictionary w/ 3 keys: title, genre, rating +# add movie to watched list inside of user_data +# return user_data + +def add_to_watched(user_data, movie): + user_data["watched"].append(movie) + return user_data + +# test wave 1, part 3: +# SAME AS PART 2, DIFF VARIABLES + +def add_to_watchlist(user_data, movie): + user_data["watchlist"].append(movie) + return user_data + +# test wave 1, part 4: +# create function watch_movie +# function takes 2 parameters: user_data, title +# user_data ==> dictionary: key: watchlist, watched; value: [] +# title ==> string (title of movie user has watched) +# IF title of movie is IN user's watchlist: + # remove movie from WATCHLIST + # ADD movie to WATCHED + # return user_data +# IF title of movie IS NOT IN user's watchlist: + # return user_data +def watch_movie(user_data, title): + for movie in user_data["watchlist"]: + if movie["title"] == title: + add_to_watched(user_data, movie) + user_data["watchlist"].remove(movie) + return user_data + + +# <-------------- WAVE 2 ------------------ WAVE 2 ------------------------- > + +# test wave 2, part 1: +# create function get_watched_avg_rating, function takes 1 parameter: user_data +# need to: access "rating" +# iterate through "rating" +# append value of "rating" into empty list +# calculate average value of rating_list +# return the average rating + +def get_watched_avg_rating(user_data): + ratings = [] + for watched, movies in user_data.items(): + for movie_details in movies: + ratings.append([movie_details][0]["rating"]) + + if len(ratings) == 0: + return 0.0 + else: + ratings_avg = (sum(ratings) / len(ratings)) + return ratings_avg + +# test wave 2, part 2: +# create function get_most_watched_genre, function takes 1 parameter: user_data +# need to access "genre" +# determine which genre is frequently occuring in the watched list +# return genre that is most frequently watched + +def get_most_watched_genre(user_data): + genre = [] + for watched, movies in user_data.items(): + for movie_details in movies: + genre.append([movie_details][0]["genre"]) + + genre_frequency = {} + for type in genre: + if type not in genre_frequency: + genre_frequency[type] = 1 + else: + genre_frequency[type] += 1 + + if user_data["watched"] == []: + return None + else: + common_genre = max(genre_frequency, key=genre_frequency.get) + return common_genre + + +# <-------------- WAVE 3 ------------------ WAVE 3 ------------------------- > + +# test wave 3, part 1: +# create function get_unique_watched, function takes 1 parameter: user_data +# determine which movies the user has watched but NONE of their friends has watched +# add list of movies of movies to unique movies list +# return unique movies + +def get_unique_watched(user_data): + unique_movies = [] + friends_movies = [] + + if not user_data["watched"]: + return [] + + for friends in user_data["friends"]: + for movie in friends["watched"]: + friends_movies.append(movie) + + for each_movie in user_data["watched"]: + if each_movie not in friends_movies: + unique_movies.append(each_movie) + + return unique_movies + +# test wave 3, part 2: +# create function get_friends_unique_watched, function takes 1 parameter: user_data +# consider the movies the user has watched and the movies their friends have watched +# determine which movies the user's friends have watched BUT the user hasn't +# return list of dictionary ==> movies that the user hasn't watched +# similar to part 1 but the reverse reverse!!! + +def get_friends_unique_watched(user_data): + user_movies = [] + friends_movies = [] + friends_unique = [] + + for friends in user_data["friends"]: + for movie in friends["watched"]: + if movie not in user_data["watched"]: + friends_movies.append(movie) + + if (len(user_data["watched"])) == 0: + for friends in user_data["friends"]: + for movie in friends["watched"]: + friends_movies.append(movie) + + friends_unique_pt2 = [] + for i in range(len(friends_movies)): + if friends_movies[i] not in friends_movies[i + 1:]: + friends_unique_pt2.append(friends_movies[i]) + + return friends_unique_pt2 + +# <-------------- WAVE 4 ------------------ WAVE 4 ------------------------- > + +# create a function named get_available_recs, function takes 1 parameter: user_data +# determine a LIST (with nested dict) of recommended movies +# movie should be added to the list IF AND ONLY IF: +# user has not watched it +# at least one of the user's friends has watched +# host of the movie is a service that is in the user's subscriptions +# return list of recommended movies + +def get_available_recs(user_data): + + friends_host = [] + user_host = (user_data["subscriptions"]) + + for friends in user_data["friends"]: + for movie in friends["watched"]: + if movie["host"] in user_host: + friends_host.append(movie) + + friends_host_pt2 = [] + for i in range(len(friends_host)): + if friends_host[i] not in friends_host[i + 1:]: + friends_host_pt2.append(friends_host[i]) + + return friends_host_pt2 + +# <-------------- WAVE 5 ------------------ WAVE 5 ------------------------- > + +# test wave 5, part 1: +# create a function get_new_rec_by_genre, function takes 1 parameter: user_data +# consider the user's most frequently watched genre THEN determine a list of recommended movies +# movie should only be added to recommended movies list IF AND ONLY IF: +# the user has not watched it +# at least one of the user's friends has watched +# genre of the movie == user's most frequent genre +# return list of recommended movies + +def get_new_rec_by_genre(user_data): + recommended_movies = [] + +# append user's watched titles into new list + user_titles = [] + for details in user_data["watched"]: + user_titles.append(details["title"]) + +# append user's genre into new list + user_genre = [] + for details in user_data["watched"]: + user_genre.append(details["genre"]) + +# create dictionary to determine user's msot frequent genre type + user_genre_frequency = {} + for type in user_genre: + if type not in user_genre_frequency: + user_genre_frequency[type] = 1 + else: + user_genre_frequency[type] += 1 + +# create variable for user's favorite genre & condition if user's watched data is empty + if user_data["watched"] == []: + return [] + else: + user_fav_genre = max(user_genre_frequency, key=user_genre_frequency.get) + +# iterate through friends watched list. Append ONLY if genre == user_fav_genre AND title is NOT IN user_titles + for friends in user_data["friends"]: + for movies in friends["watched"]: + if movies["genre"] in user_fav_genre and movies["title"] not in user_titles: + recommended_movies.append(movies) + + +# print(user_titles) +# print(user_genre) +# print(user_genre_frequency) +# print(user_fav_genre) + return recommended_movies + # print(recommended_movies) + + +# test wave 5, part 2: +# create a function get_rec_from_favorites, function takes 1 parameter: user_data +# determine a list of recommended movies +# movie should only be added to recommended movies IF AND ONLY IF: +# movie is in user's favorites +# none of the user's friends have watched it +# return list of recommended movies + +def get_rec_from_favorites(user_data): + favorite_movies = [] + +# append user's favorites to new list + user_favorites = [] + for details in user_data["favorites"]: + user_favorites.append(details) + + user_watched = [] + for titles in user_data["watched"]: + user_watched.append(titles) + + friends_watched = [] + for friends in user_data["friends"]: + for movies in friends["watched"]: + friends_watched.append(movies) + + unique_faves = [] + for title in user_watched: + if title not in friends_watched: + unique_faves.append(title) + + return unique_faves \ No newline at end of file