#100DaysOfCode: Learn Python with 100 Days of Exercises Course

Course Summary

#100DaysOfCode in Python is your perfect companion to take the 100 days of code challenge and be successful. This course is 1-part video lesson, 2-parts guided projects. You will be amazed at how many Python technologies and libraries you learn on this journey. Join the course and get started.

What students are saying

Make no mistake, this is not for true beginners. I am by no means a python expert and while I might be considered an intermediate user, I don't feel like one. But I'm also not starting from square one either. So some basic fundamental skills in Python and it's key concepts are definitely helpful before beginning the course. [...] Once you start and make the public commitment to the 100 day challenge, you really start to get in a groove.
-- Bronson E.

Source code and course GitHub repository

github.com/talkpython/100daysofcode-with-python-course

What's this course about and how is it different?

100 days of code is not just about the commitment. The true power and effectiveness is in having a guide and pursuing the "right-sized" projects. That’s why we have 33 deeply practical projects. Each paired with 20-40 minute lessons at the beginning of the project.

Just a small sampling of the projects you’ll work on include:

  • Understating basic Python data structures
  • Searching large text corpuses with regular expressions
  • Consume HTTP services including the Twitter and GitHub APIs among others
  • Visual data with graphs using plotly
  • Convert your Python CLI (command line interface) app to a GUI application
  • Program against Excel in Python to automate your spreadsheet data
  • Build a text-based game and learn object-oriented programming
  • Automate multi-step web processes using selenium
  • Test your code with pytest and unit testing
  • Create a basic web app with Flask
  • Create a JSON-based online game service using Flask too
  • And 22 more projects!

View the full course outline.

Who is this course for?

This course is for anyone who wants to immerse themselves in Python for 100 days worth of learning and hands-on projects.

We don’t start from absolute zero in terms of programming but if you are new to Python we have a language appendix and we start somewhat slow. By the end of the course, we get into intermediate-level Python projects.

Course flow and the 33 projects

This course is 1-part video lessons and 2-parts hands-on exercises.

Course flow

We have broken the 100 days worth of coding into 33 3-day segments. As you can see, the first day is largely learning the new topics (HTTP APIs, web scraping, databases, etc.). The following two days have some guidance but is much more hands-on than the first day.

Hands-on exercises for almost every chapter

#100DaysOfCode is literally about doing some coding every day. That's why this course has practical hands-on exercises for every single one of the 100 days.

These exercises range in length from 10 minutes to about 1-hour a day.

Here is the 3-day project for the error handling chapter.

Hands on exercises

Concepts backed by concise visuals

While exploring a topic interactively with demos and live code is very engaging, it can lose the forest for the trees. That's why when we hit a new topic, we stop and discuss it with concise and clear visuals.

Here's an example of concepts reviewing the converting a standard CLI Python app to a GUI app using the Gooey framework.

Example: Concepts backed by concise visuals

You might also like our other #100DaysOfCode course

If you'd rather jump straight to web development in Python rather than diving into Python foundations, check out our other course: #100DaysOfWeb in Python.

#100DaysOfWeb in Python course

Follow along with subtitles and transcripts

Each course comes with subtitles and full transcripts. The transcripts are available as a separate searchable page for each lecture. They also are available in course-wide search results to help you find just the right lecture.

Each course has subtitles available in the video player.

Who we are and why should you take our course?

Meet Michael Kennedy:

Who is Michael Kennedy?

My name is Michael, nice to meet you. ;) There are a couple of reasons I'm especially qualified to teach you Python.

 1. I'm the host of the #1 podcast on Python called Talk Python To Me. Over there, I've interviewed many of the leaders and creators in the Python community. I bring that perspective to all the courses I create.

 2. I've been a professional software trainer for over 10 years. I have taught literally thousands of professional developers in hundreds of courses throughout the world.

 3. Students have loved my courses. Here are just a few quotes from past students of mine.

"Michael is super knowledgeable, loves his craft, and he conveys it all well. I would highly recommend his training class anytime." - Robert F.
"Michael is simply an outstanding instructor." - Kevin R.
"Michael was an encyclopedia for the deep inner workings of Python. Very impressive." - Neal L.

Meet Bob Belderbos:

Who is Bob Belderbos?

Hey there, my name is Bob Belderbos, a passionate Pythonista and software developer. Thanks for considering this course. It's aim is to make you a well rounded Python developer. For some it might even be a career changer.

I am excited to teach you this course for several reasons:

  1. During my 10+ years of programming I have come to know how immensely gratifying it is to build software to make somebody else's (or my own) life easier. I can only wish for you to experience the same once you gain the necessary skills.
  2. I have grown from a support engineer and self-taught website creator into a full-time software developer at Oracle, a career switch that makes me wake up every day energized and hungry to expand my knowledge and skills (sometimes challenging but surely exciting). Do you want to upgrade your job or even switch your career? This course will give you a solid foundation to draw from.
  3. Since co-founding PyBites end of 2016 I made great strides in my Python skills. We published many challenges and articles and built a Code Challenge platform from scratch. We have a growing community of passionate Pythonistas that are improving their Python skills with us. We love to share/teach our learning and mentor other developers.

I am both honored and stoked to teach you Python using this 100 Days format. We did it ourselves and we know it works. The hard work won't go away but we can definitely make it easier, more accessible and fun!

Meet Julian Sequeira:

Who is Julian Sequeira?

G'day! I'm Julian Sequeira, a self-taught Python fan(atic) and a #100daysofcode survivor.

It's safe to say that the 100 days of code challenge was instrumental in pushing my Python skills to the next level.

This is why I'm so excited to work with and guide you through the process!

The diversity in the code and concepts you'll be exposed to in this course is staggering. It may seem like a lot but it ensures you'll stay interested and motivated to get through to the highly coveted Day 100.

When I'm not working in my AWS Data Center keeping the Cloud up and running, you'll find me in two places:

  1. Writing articles on Python, contributing to and running PyBites with co-founder Bob. This site is a labour of love and the core motivator for me to keep learning more Python. It's my baby!
  2. Teaching on Udemy! My Python Flask introductory course has been incredibly well received by my students. If you didn't know, I have a not-so-secret love affair with Flask so this is just icing on the cake.

Cheers to your 100 Days of Code in Python journey!

Free office hours keep you from getting stuck

One of the challenges of self-paced online learning is getting stuck. It can be hard to get the help you need to get unstuck.

That's why at Talk Python Training, we offer live, online office hours. You drop in and join a group of fellow students to chat about your course progress and see solutions via screen sharing.

Just visit your account page to see the upcoming office hour schedule.

Is this course based on Python 3 or Python 2?

This course is based upon Python 3. Python 2 is officially unsupported as of January 1st, 2020 and we believe that it would be ill-advised to teach or learn Python 2. This course is, and has always been, built around Python 3.

The time to act is now

The #100DaysOfCode challenge is an epic adventure. Don't got it alone. Take our course and we'll be your guide with both lessons and projects.

Course Outline: Chapters and Lectures

Welcome to the course
31:41
Welcome to the course
2:54
The rules of #100DaysOfCode
1:05
Topics covered
3:06
Why Python for #100DaysOfCode
2:05
Course flow
1:33
Meet your instructors
1:46
Need a Python primer?
0:39
Get the source code
2:09
Three devs are better than one
1:42
Julian's setup
2:43
Bob's setup
3:58
Michael's tool's and setup
2:46
PyBites code challenge platform
3:10
Video player: A quick feature tour
2:05
Days 1-3: Playing with Datetimes
20:34
Lesson introduction
0:40
Your 3 day overview
1:33
Learning datetime and date
8:12
Datetime timedelta usage
6:07
Concepts: what did we learn
4:02
Days 4-6: Collections module
17:10
Lesson introduction
0:40
Namedtuples: more readable code
2:05
Defaultdicts: factory for data structures
3:01
Counter: don't reinvent the wheel
1:21
Deque: when lists become slow
3:27
Concepts: what did we learn
0:54
Second day: use collections on movie data
4:39
Third day: get more practice
1:03
Days 7-9: Python Data Structures
24:41
Introduction to Data Structures
0:25
Your 3 day overview
2:47
Manipulating Lists
7:35
Immutability and Tuples
3:07
Creating and Parsing Dictionaries
7:21
Concepts: what did we learn
3:26
Days 10-12: Testing your code with pytest
43:49
Lesson introduction
0:48
The importance of testing
2:07
Setup and a guessing game to test
3:21
Hello test world - unittest vs pytest
3:17
Mocking randomness / pytest-cov
5:29
Mocking user input and exceptions
5:06
Testing a program's stdout with capfd
4:50
Testing (simulating) the game end-to-end
7:22
A TDD primer writing Fizz buzz
5:06
Concepts: what did we learn
2:27
Second day: use pytest on your code
2:20
Third day: writing pytest fixtures
1:36
Days 13-15: Text-based games (and classes)
27:09
Introduction to the chapter
1:33
Modeling concepts: Inheritance, classes, and objects
3:00
Demo: Initial project structure
2:43
Demo: Building our classes
9:02
Demo: Implementing the game play
5:17
Concept: Classes
0:55
Your turn: Day 1
1:37
Your turn: Day 2
1:55
Your turn: Day 3
1:07
Days 16-18: List comprehensions and generators
22:10
Lesson introduction
1:19
Writing a simple list comprehension
3:25
Cleaning data with list comprehensions
3:33
Generators - the basics
1:56
Use generators to build a sequence
1:29
List vs generator performance
1:37
Concepts: what did we learn
1:31
Second day: a practical exercise
0:58
Third day: solution and islice
5:05
Third day: more code challenges
1:17
Days 19-21: Iteration with itertools
35:42
Introduction to the lesson
0:30
Your 3 day overview
2:51
Iteration Refresher
4:53
Itertools - Cycle
5:34
Itertools - Product
4:45
Combinations and Permutations
3:54
Traffic Lights Project
8:28
Concepts: what did we learn?
4:47
Days 22-24: Decorators
17:02
Lesson introduction
0:40
Quick primer on decorators
2:37
Function argument types: args and kwargs
3:54
Write a timeit decorator (wraps)
2:08
More abstraction: stacking decorators
1:55
Examples of real life decorators
1:29
Concepts: what did we learn
2:00
Second day: a practical exercise
0:45
Third day: write your own decorator
1:34
Days 25-27: Error handling
15:01
Introducing Python's error handling
1:00
Demo: The starter app skeleton
2:36
Demo: try-except blocks
2:30
Demo: Error types
4:04
Concepts: Error handling and exceptions
1:42
Your turn: Day 1
1:18
Your turn: Day 2
1:00
Your turn: Day 3
0:51
Days 28-30: Regular Expressions
24:11
Lesson introduction
0:35
When not to use regexes
1:55
Comparing re.search and re.match
1:49
String capturing parenthesis
2:16
findall is your friend
3:20
Compiling regexes with re.VERBOSE
5:23
Using re.sub for string replacing
2:54
Concepts: what did we learn
1:58
Second day: write your own regexes
2:08
Third day: more regex exercises
1:53
Days 31-33: Logging
26:06
Introduction to logging
3:24
Logging with Logbook
1:18
Demo: Introducing our app
2:13
Demo: Configuring logging
4:31
Demo: Writing the log messages
4:44
Demo: Logging a the API level
2:26
Demo: File logging
2:31
Concepts: Logging
2:30
Your turn: Day 1
0:37
Your turn: Day 2
0:31
Your turn: Day 3
1:21
Days 34-36: Refactoring / Pythonic code
36:16
Lesson introduction
1:21
Refactoring 1: if-elif-else horror
3:00
Refactoring 2: loop counting == enumerate
1:30
Refactoring 3: with statement (context managers)
2:24
Refactoring 4: use built-ins / standard library
3:14
Refactoring 5: tuple unpacking and namedtuples
3:34
Refactoring 6: list comprehensions and generators
2:54
Refactoring 7: string formatting and concatenation
3:11
Refactoring 8: PEP8 and Zen of Python
0:47
Refactoring 9: be explicit in your exceptions
2:54
Refactoring 10: quality code best practices
2:34
Refactoring / code quality resources
2:11
Concepts: what did we learn
5:11
Your turn: Day 2 and 3
1:31
Days 37-39: Using CSV data
32:08
Introduction to CSV programming
0:35
Some amazing data sets
2:18
Our data
1:03
Demo: Getting started with CSV processing
3:38
Demo: Reading the CSV file contents
4:19
Demo: Parsing the CSV file
2:28
Demo: Converting our CSV data to a usable form
6:59
Demo: Answer the questions
6:35
Concepts: CSV programming
1:44
Your turn: Day 1
1:43
Your turn: Day 2
0:16
Your turn: Day 3
0:30
Days 40-42: JSON in Python
25:36
Introduction to JSON
1:11
Your 3 day overview
1:59
Inspecting JSON schema
2:08
Request JSON data from an API
5:36
Parsing nested dicts in JSON
8:58
Concepts: what did we learn
5:44
Days 43-45: Consuming HTTP services
23:50
Introduction to HTTP APIs
1:11
Exploring the service
1:47
Introducing the Postman app
1:20
The requests package
0:56
Demo: Building the program structure
4:07
Demo: Downloading search results
2:23
Demo: Data version one: dicts
2:30
Demo: Data version two: Better results
5:04
Concepts
1:26
Your turn: Day 1
0:44
Your turn: Day 2
1:43
Your turn: Day 3
0:39
Days 46-48: Web Scraping with BeautifulSoup4
34:05
Introduction to BeautifulSoup4
0:42
Your 3 day overview
2:46
Setting up the environment
1:09
A quick BS4 overview
2:08
Building your first BS4 scraper
9:39
Requests best practice
1:50
Detailed BS4 scraping and searching
10:20
Concepts: what did we learn
5:31
Days 49-51: Measuring performance
31:01
Introduction to profiling
0:50
Intuition fail
1:11
Demo: Getting started
4:14
Demo: Focus on our code
1:51
Demo: Fine-tuning collection with the API
3:22
Demo: Even more focused collection
3:53
Demo: Faster with less data processed
6:19
PyCharm's profiling
3:03
Concepts: Profiling
1:37
A quantum warning
1:59
Your turn: Day 1
0:46
Your turn: Day 2
0:58
Your turn: Day 3
0:58
Days 52-54: Parsing RSS feeds with Feedparser
17:57
Lesson introduction
0:34
Your 3 day overview
1:47
Setting up our Feedparser environment
1:16
Pulling the feed with Requests
3:12
Parsing XML with Feedparser
5:24
Feedparser Sanity Check
2:44
Concepts: what did we learn
3:00
Days 55-57: Structured API clients with uplink
32:25
Introducing uplink
1:09
A glimpse at an API
2:07
Use the official API if available
1:01
Demo: Getting started
3:08
Demo: Exploring the service
1:40
Demo: Creating the client
4:22
Demo: Getting a individual post
3:20
Demo: Only success responses
2:51
Demo: Writing a new post
4:42
Demo: Better wrappers and helpers
3:21
Concepts: uplink
1:55
Your turn: Day 1
1:14
Your turn: Day 2
0:58
Your turn: Day 3
0:37
Days 58-60: Twitter data analysis with Python
21:51
Lesson introduction
0:55
Create a Twitter app
0:43
Virtual environment and env variables
2:40
Get all tweets with tweepy.Cursor
2:59
Identify the most popular tweets
2:46
Most common hashtags and mentions
2:13
Build a Twitter wordcloud
3:49
Concepts: what did we learn
2:10
Second + third day: practice projects
3:36
Days 61-63: Using the Github API with Python
24:59
Lesson introduction
0:52
Setup and creating a Github user object
3:30
Quick detour: getting help in Python
2:16
Ranking user's repos by popularity
4:14
Creating a gist with the Github API
4:44
Inspecting Github objects with pdb
3:50
Concepts: what did we learn
2:03
Second day: examples / get practice
2:00
Third day: more practice / requests-cache
1:30
Days 64-66: Sending emails with smtplib
29:49
Introduction to sending Emails
0:48
Your 3 day overview
1:45
Obtaining your Gmail App ID
2:56
Email Project Setup
0:55
Sending an Email with smtplib
6:55
Getting into MIME
8:26
Emailing with BCC
3:33
Concepts: what did we learn
4:31
Days 67-69: Copy and Paste with Pyperclip
20:45
Lesson introduction
0:49
Your 3 day overview
1:44
Setup: Install Pyperclip and your env
0:52
Pyperclip Usage
2:34
Demo: Affiliate script
5:26
Demo: Pyperclip text replacer
6:15
Concepts: what did we learn
3:05
Days 70-72: Excel automation with openpyxl
33:29
Lesson introduction
0:39
Your 3 day overview
1:58
Setup: install openpyxl and your env
0:58
Understanding workbooks and worksheets in openpyxl
4:05
Working with cell values
6:42
Using maxrow
4:01
Inserting data into a worksheet
8:09
Concepts: what did we learn
6:57
Days 73-75: Automate tasks with Selenium
22:24
Lesson introduction
1:07
Setup: install Selenium and ChromeDriver
2:04
Hello world Selenium: search python.org
1:11
Demo 1: access my Packt ebook collection
6:48
Demo 2: automating PyBites banner creation
6:58
Concepts: what did we learn
1:54
Your turn: Day 2
1:16
Your turn: Day 3
1:06
Days 76-78: Getting Started with Python Flask
23:35
Flask introduction
0:43
Your 3 day overview
1:56
Setting up the environment
1:55
Creating your first Flask app!
6:30
Dict data in Flask
9:47
Concepts: what did we learn
2:44
Days 79-81: Basic Database Access with SQLite3
32:10
A brief intro to SQLite3 Databases
1:03
Your 3 day overview
2:08
Installing SQLite DB Browser
1:13
Creating a simple SQLite3 address book
7:13
Analysing the DB with SQLite DB Browser
0:47
Demo: Script to Generate a DB
4:28
Inserting data into the address book
2:48
Demo: Script to populate the address book
6:22
Pulling data with SELECT
2:25
Concepts: what did we learn
3:43
Days 82-84: Data visualization with Plotly
27:30
Lesson introduction
0:59
Installing feedparser and plotly
2:17
Prep 1: parse PyBites RSS feed data
5:53
Prep 2: useful data structures for plotting
4:28
Prep 3: transpose data and init Plotly
2:22
Creating bar and pie charts with Plotly
3:11
Other data visualization libraries
1:54
Concepts: what did we learn
3:29
Second day: build your own graphs
1:56
Third day: extra inspiration / keep coding
1:01
Days 85-87: Fullstack web apps made easy
1:02:30
Fullstack web introduction
0:46
What is fullstack development?
2:20
What app will we build?
1:00
Introducing Anvil
0:54
Anvil building blocks
2:41
Creating a new project in Anvil
2:09
Adding navigation
2:28
Subforms
2:06
Linking the forms
4:20
Building the Add new document form
2:08
Processing add new document
4:44
Data tables
2:32
Anvil server code
3:26
Creating the document
2:53
Add document finale
4:52
All docs
6:55
A refactoring
1:32
Adding filtering
3:04
Document details form
2:48
Publishing our web app
1:55
Anvil concepts
2:55
Your turn: Day 1
1:49
Your turn: Day 2
1:07
Your turn: Day 3
1:06
Days 88-90: Home Inventory App
31:40
Lesson Introduction
0:48
Your 3 day overview
2:36
Writing and working the main menu
6:06
SQLite3 database usage
4:37
Scrub function - SQLite3 workaround
5:46
Home Inventory app run through
5:01
Bug and functionality fixes
5:40
Your Turn! - Fix the app
1:06
Days 91-93: Database access with SQLAlchemy
37:06
Introducing SQLAlchemy
1:18
Demo: Introducing our app
2:38
Demo: The app skeleton
2:17
Demo: Defining database classes
3:01
Demo: Defining columns (via classes)
4:56
Demo: Connecting to the database
6:24
Demo: Using the data access layer (DAL)
7:34
Demo: The final game
0:55
Demo: Seeing the database
1:25
Concepts: SQLAlchemy
3:18
Your turn: Day 1
0:55
Your turn: Day 2
1:45
Your turn: Day 3
0:40
Days 94-96: Rich GUI apps in Python
23:34
Introduction to Python UIs
2:50
Demo: Where we are starting
2:49
Demo: Refactoring to isolate user input
2:15
Demo: Adding Gooey to our app
5:25
Demo: Packaging our app for redistribution
4:47
Concepts: Gooey
1:24
Your turn: Day 1
1:58
Your turn: Day 2
1:03
Your turn: Day 3
1:03
Days 97-99: Building JSON APIs
1:01:31
Introducing our online game server
3:41
What API operations are required?
2:45
Getting started: Program structures
3:06
Adding the Flask basics
2:04
Defining JSON methods in Flask
2:58
Migrating our SQLAlchemy models
1:47
Ensuring starter data
4:24
Defining the API methods in Flask
4:55
Exercising the API
1:36
Implementing the all-rolls method
1:25
Implementing the create-game method
1:24
Implementing the find-user method
2:58
Implementing the create-user method
4:06
Implementing the game-status method
2:37
Implementing the top-scores method
1:31
Implementing the play-round method
4:14
Refactoring our web code for single responsibility
4:17
Implementing the client
2:36
Making the client self-validating
1:25
Writing the full client
0:45
Implementing the game (client-side)
3:09
Your turn: Day 1
1:44
Your turn: Day 2
0:45
Your turn: Day 3
1:19
Day 100
0:45
The final day
0:45
Course conclusion
5:50
You've done it!
0:30
What you've learned
1:21
Make sure you have the source
0:28
Stay immersed in Python
1:07
Continue to challenge yourself with PyBites
1:12
Thanks and goodbye
1:12
Appendix: Python language concepts
46:30
Concept: The shape of a program
1:25
Concept: Variables
0:51
Concept: Truthiness
1:47
Concept: if else
1:24
Concept: Complex conditionals
1:31
Concept: for-in
1:41
Concept: Calling functions
0:59
Concept: Creating functions
1:33
Concept: File I/O
1:20
Concept: Imports and importing modules
1:59
Concept: Python package index
1:54
Concept: pip
2:26
Concept: Virtual environments
3:53
Concept: Slicing
2:53
Concept: Tuples
1:43
Concept: Named tuples
1:44
Concept: Classes
2:01
Concept: objects vs. classes
1:44
Concept: Inheritance
1:49
Concept: Polymorphism
0:53
Concept: Dictionaries
2:30
Concept: Error handling
2:38
Concept: lambdas
2:09
Concept: list comprehensions
2:57
Concept: Want more foundational Python?
0:46
Buy for $79 + tax Bundle and save 85% Team Gift

Questions? Send us an email: contact@talkpython.fm

Talk Python's Mastodon Michael Kennedy's Mastodon