Welcome. If you're returning, we're delighted to have you. If you're just joining us for the first time, we're also glad that you're with us. At this point, we're assuming that you're comfortable with functions, with dictionaries, you can extract data from nested data structures, and that you are comfortable with Python's list comprehensions. If you're joining us for the first time, please make sure to look at the video on the Runestone environment because we'll still be using that for much of what we do here. I'm Steve Oney. I'm Paul Resnick. We're both faculty members at the University of Michigan, School of Information. In this course, you'll learn about classes. Classes are nice because they allow you to combine the methods and data that are relevant to some problem into one nice easy-to-use package. In fact, classes are so nice that some programming languages like Java, require you to use classes in order to use the language at all. Python makes classes optional, but as you'll find out in this course, they can make your code much easier to read and write. You'll also learn about Class inheritance. Class inheritance allows you to reuse code which can make your code a lot more concise and easier to read. You'll also learn about test cases in this course. It's kind of an advanced topic for an intro programming sequence, but we think it's really valuable to get into the habit of writing test cases from the very beginning of your programming career. A test case is a way of specifying what a function or a class should do. If you write some test cases, and then you implement your function, if it passes the test cases, you know that the function is implemented correctly. If it doesn't pass, you know you did something wrong with the function. You'll also learn how to handle exceptions. So, you've probably encountered runtime exceptions before. Whenever you encounter a runtime exception. So, when you have a variable that doesn't exist, when you try to divide by zero. Whenever something like that happens, then Python just stops running your program, and gives you an error message. So, we'll learn how to actually handle these kinds of runtime exceptions, and give you more control over how Python evaluates your code. In the project for this course, you'll use what you learned in write a game of "Wheel of Fortune", and you're going to use classes to represent the human player, and the computer player, and you'll use methods to specify how these players can compete against each other. Dr. Charles, Chuck Severance, will make a cameo to show you how classes and inheritance make it easy to implement web programming using the Django framework. Like previous courses, we'll mostly have screencasts with code examples, but we'll occasionally come on screen in order to introduce words of wisdom or to introduce topics. I'll offer a few more dad jokes, but not too many this time, because this course is mostly Steve. So let's get started. Bye for now.