{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### ![](https://ga-dash.s3.amazonaws.com/production/assets/logo-9f88ae6c9c3871690e33280fcf557f33.png)\n", "\n", "# Unit 4 Lab: Carefully Adding a Bit More Logic\n", "\n", "## Overview\n", "Welcome to the Unit 4 lab!\n", "\n", "Our goal is that, at the end of the next lab (you're almost there!), your app makes it possible for users to search for a movie and print out either the Rotten Tomatoes rating or the search results.\n", "\n", "Let's get a little closer. We still have hard-coded values, but in the next lab we'll actually get the real ratings. For now, let's incorporate some intermediate variables and error-catching.\n", "\n", "Solutions from the previous lab have been provided below _as a starting point_ for this lab." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Media Class\n", "\n", "For this exercise, this class will remain untouched." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "class Media(object):\n", " \"\"\"Base class for Movie and Book objects\"\"\"\n", "\n", " def __init__(self, publisher, market):\n", " self.publisher = publisher\n", " self.market = market\n", "\n", " def get_media_info(self):\n", " \"\"\"Prints media info to stdout\"\"\"\n", " print(f'The Media object\\'s publisher is {self.publisher} \\\n", " and the market is {market}.')\n", " return None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Movie Class\n", "\n", "Augment the functionality of the `Movie` class as follows:\n", "\n", "- Modify the `get_movie_title` and `get_movie_rating` methods to catch a KeyError if a key in the input dictionary is not found\n", "- Upon such a condition, print the following to stdout\n", "```python\n", "'Key was not found in dictionary.'\n", "```" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import sys\n", "\n", "class Movie(Media):\n", " \"\"\"\n", " Movie objects contain all information about a particular movie,\n", " including the title and rating.\n", " \"\"\"\n", "\n", " def __init__(self, movie_data, publisher, market):\n", " \"\"\"\n", " Initialize Movie class, note that the init of the superclass,\n", " Media, is called with the super().__init__() call\n", " \"\"\"\n", " # Call the constructor (init) method of Media\n", " super().__init__(publisher, market)\n", " # Store the raw data in this object so that we can use the\n", " # data in the getter functions.\n", " self.movie_data = movie_data\n", "\n", " def get_movie_title(self):\n", " \"\"\"\n", " get_movie_title is a getter function that returns the movie title.\n", " \"\"\"\n", " # Return the title from the movie data.\n", " return self.movie_data[\"title\"]\n", "\n", " def get_movie_rating(self):\n", " \"\"\"\n", " get_movie_rating is a getter function that returns the rating.\n", " \"\"\"\n", " # Return the rating from the movie data.\n", " return self.movie_data[\"rating\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Functions\n", "\n", "Functions below will remain untouched for this exercise" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def return_single_movie_object(movie_title, movie_rating, publisher, market):\n", " \"\"\"\n", " Take in the movie title and rating, and return the movie object.\n", " \"\"\"\n", "\n", " return Movie({'title': movie_title, 'rating': movie_rating}, publisher, market)\n", "\n", "def print_all_ratings(movie_list):\n", " \"\"\"\n", " Take in a list of movies, create a movie object for each, and print the rating.\n", " \"\"\"\n", "\n", " for movie in movie_list:\n", " movie_object = return_single_movie_object(movie, 4, \"Universal Studios\", \"USA\")\n", " print(\"The movie\", movie_object.get_movie_title(), \"has a rating of\", movie_object.get_movie_rating())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Testing Pt. 1/2\n", "\n", "Write code that will:\n", "\n", "- Create a new `Movie` object with the following properties:\n", " - A `movie_data` dictionary with key value pairs (respectively) of:\n", " - `title` and `The Matrix`\n", " - `rating` and `10`\n", " - A `publisher` of `Roadshow Entertainment`\n", " - A `market` of `Australia`\n", " \n", " - Call the `get_movie_title` and `get_movie_rating` methods" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# A:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Testing Pt. 2/2\n", "\n", "- Repeat the instantiation of the `Movie` object with an empty dictionary for the `movie_data` argument\n", " - Call the `get_movie_title` and `get_movie_rating` methods again\n", " - Does your error handling catch your KeyError event?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# A:" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" } }, "nbformat": 4, "nbformat_minor": 2 }