The final exam is worth 200 points (double the midterm). I have not written this exam yet, but I expect it to be like the midterm: about 10 questions (some might have multiple parts), each covering about 1 week of material for the 10 week quarter. So, it is cumulative. Over this 120 minute test, that is about 12 minutes per question (to read and answer it). We have covered way too much material for you to re-read everything. I suggest primarily reviewing the quizzes and midterm, and then the programming assignments: not reading them in depth, but being familiar with them and their major themes. Of course you will be analyzing and writing code on the final exam, but I expect there also to be a small number of questions to be answered in English or with pictures. Here is my view of the material that we covered. ------------------------------------------------------------------------------ Preliminaries/Basics EBNF Tokenization Defining Names/Modules (and binding them to the objects they refer to) Expressions Reading Function Headers and Calling Functions from modules Operators ` Expressions (including conditional expressions, lambdas, and comprehensions) Statements if, if/else, if{/elif}/else for (with many objects to iterate over) / while (boolean-test and break) try/except return, assert, raise (used in functions) Abstraction modules (using-importing/writing-scripts and libraries) functions (using/writing) classes (using/writing: object construction+method calls including __init__) Data Types int, float, str, bool lists (sorting lists) tuple/named tuple (not used much) dict/defaultdict set combinations: e.g., lists/sets as dict values; dict keys are mostly str Special Topics Program Synthesis Debugging Functions as data: e.g., prompt functions using predicate functions Functional programming: map/filter/reduce (not on exam) Recursion (not on exam)