Overview of the Course Curriculum 
 
Our Python Coding Environment 
 
Writing the First Code! Variables and Printing 
 
Calculating the Remainder of a Division 
 
Getting a User Input in Python 
 
Booleans and Comparisons in Python 
 
Iterating over Dictionaries 
 
The Else Keyword with Loops 
 
Finding Prime Numbers with For Loops 
 
List Comprehension in Python 
 
Comprehensions with Conditional Statements 
 
Set and Dictionary Comprehensions 
 
Functions and Return Values in Python 
 
Lambda Functions in Python 
 
First Class and Higher Order Functions 
 
Installing Python on your Computer 
 
Installing PyCharm on your Computer 
 
Creating the First PyCharm Project 
 
Setting up the PyCharm Font and Display Settings 
 
Milestone Project Implementation 
 
Finding Movies and Retrieving Details 
 
Intro to Object-Oriented Programming with Python 
 
More about Classes and Objects 
 
Parameter Naming in Python 
 
The @classmethod and @staticmethod Decorators in Python 
 
More @classmethod and @staticmethod Examples 
 
Intro to Errors in Python 
 
Built-in Errors in Python 
 
Creating Errors in Python 
 
Dealing with Python Errors 
 
The On-success Block and Re-raising Exceptions 
 
Python Exercise: Copying Files 
 
Using the “with” Syntax in Python 
 
Python Relative Imports: Children 
 
Python Relative Imports: Parents 
 
Importing Errors and Running as a Python Script 
 
Intro to Milestone Project 2 
 
Milestone Project with Lists 
 
Using JSON instead of CSV 
 
Intro to Databases in Python 
 
Creating Books Table Using Python 
 
Inserting Books Using Python 
 
UPDATE and DELETE Statements 
 
Filtering using the WHERE Clause 
 
Finishing the Milestone Project 
 
Developing the Context Manager in Python 
 
Errors in Context Managers 
 
Argument mutability in Python 
 
Default values for parameters 
 
Mutable default arguments (bad idea) 
 
Argument unpacking in Python 
 
Some interesting Python collections 
 
Timing your code with Python 
 
Introduction to logging in Python 
 
Logging to a File and Other Features 
 
Understanding HTML with BeautifulSoup 
 
More Complex HTML Parsing 
 
Structuring Parsing Program Better 
 
Splitting HTML Locators out of the Python Class 
 
Understanding HTML with the Browser 
 
Scraping the First Website with Python 
 
Milestone Project 3: A Quote Scraper 
 
Quotes Project 2: Structuring a Scraping App in Python 
 
Quotes Project 3: Getting Locators 
 
Quotes Project 4: Crafting a Quote Parser 
 
Quotes Project 5: The Quotes Page 
 
Quotes Project 6: Recap of the Project 
 
Milestone Project 4: A Book Scraper + Application 
 
Books Project 2: Recap of HTML Locators 
 
Books Project 3: Creating Locators in Python 
 
Books Project 4: Creating a Page 
 
Books Project 5: Creating a Book Parser 
 
Books Project 6: Writing an App File 
 
Books Project 7: Sorting the Books 
 
Books Project 8: Constructing a Menu 
 
ASIDE: The Best Way to Write User Menus 
 
Books Project 9: Getting Multiple Pages 
 
Books Project 10: Multiple Pages in Python 
 
Books Project 11: Getting the Page Count in Python 
 
Books Project 12: Adding the Logging Module to a Python Project 
 
A Word on Scraping Pages with JavaScript 
 
Introduction to this Section 
 
Review of Quotes Scraping Code 
 
Using Chrome in Scraping Code 
 
Interacting with Drop-downs 
 
Encapsulating Logic More Simply 
 
Implicit and Explicit Waits in Selenium 
 
Adding Waits to a Program Code 
 
The Dining Philosophers Problem 
 
The Python Global Interpreter Lock (GIL) 
 
Example: Threads in Python 
 
Using Python concurrent.futures with the ThreadPoolExecutor 
 
Multiprocessing in Python 
 
Using Python concurrent.futures and the ProcessPoolExecutor 
 
Dealing with Shared State in Threads 
 
Queuing in Threads with Shared State 
 
Using Python Generators Instead of Threads 
 
First Single-threaded Task Scheduler in Python 
 
Yielding from Another Iterator in Python 
 
Receiving Data Through Yield 
 
The Async and Await Keywords 
 
More explanations and examples 
 
Making the First Async Request in Python 
 
Retrieving Multiple Pages Efficiently 
 
Using the async_timeout for Security 
 
Turning our Book Scraping Project async 
 
HTTPS with Python and Mac OS X 
 
Setting up Project with Pipenv 
 
Returning Information with Flask and Pythons 
 
Rendering HTML with Flask and Python 
 
Error Pages and Jinja2 Inheritance 
 
Rendering Forms with Flask and Python 
 
Accessing POST Form Data with Flask 
 
Adding a Form in a Single Endpoint 
 
Using Jinja2 For Loops to Create a Nice Homepage 
 
Adding Website Navigation 
 
Signing up for Openexchangerates 
 
Getting All Exchange Rates from the API 
 
Creating a Currency Exchange Library 
 
Caching Functions with Functools 
 
Performing TTLCache with Cachetools 
 
A Simple Decorator in Python 
 
Functools Wraps in Python 
 
Decorating Functions with Parameters 
 
Decorators with Parameters 
 
Functions that Accept Multiple Arguments 
 
Using Generic Decorators for any Function 
 
Using Frames for Different Layouts 
 
Starting the Text Editor Project 
 
Tkinter Notebooks and Creating Files 
 
Adding a Menu to an Application 
 
Binding Shortcuts in Tkinter 
 
Checking Tabs for Unsaved Changes 
 
Confirming Exit with Unsaved Changes 
 
Adding a Permanent Scrollbar to the Text Area 
 
Introduction to this Section 
 
Testing the Multiplication Function 
 
Writing a Printer Class for Testing 
 
Testing External Libraries 
 
Conclusion of this Section 
 
Presentation: Queues Stacks and Complexity 
 
Presentation: Binary Search 
 
Presentation: Binary Trees 
 
Presentation: Traversal of Binary Trees 
 
Presentation: Adding Elements to a Binary Tree 
 
Adding Elements to a Binary Tree in Python 
 
Recursion and In order Traversal in Python 
 
Finding Nodes in a Tree with Python 
 
Deleting Nodes from a Binary Tree 
 
Deleting Nodes in Code with Python 
 
Deleting Nodes with Two Children in a Code 
 
Python Libraries Overview 
 
Sending E-mails with smtplib 
 
Sending E-mails with Mailgun 
 
Creating a Re-usable Mailgun Library 
 
Sneak Peek: Integrated Development Environment (IDE) Setup 
 
String Formatting in Python 
 
If Statements with the “in” Keyword 
 
Function Arguments and Parameters 
 
Functions Returning Values 
 
Lambda Functions in Python 
 
Dictionary Comprehensions 
 
Unpacking Keyword Arguments 
 
Object-Oriented Programming in Python 
 
Magic methods: __str__ and __repr__ 
 
Class Methods and Static Methods 
 
Importing Files in Python 
 
Relative Imports in Python 
 
Simple Decorators in Python 
 
The “at” Syntax for Decorators 
 
Decorating Functions with Parameters 
 
Decorators with Parameters 
 
Mutable Default Parameters