The
Python Workshop

Built by a team of experts to help you unlock your next promotion, reboot your career, or kick off your latest side project.

Enter Early Access

You'll be up and running with Python in no time at all.

  • $89.00

    $89.00The Python Workshop

    Buy today and access modules as they're released!
    Pre-order Now

Engineered for Success

Nobody likes going through hundreds of pages of dry theory, or struggling with uninteresting examples that don’t compile. We've got you covered. Any time, any device.

  • Learn by doing real-world development, supported by detailed step-by-step examples, screencasts and knowledge checks.

  • Become a verified practitioner, building your credentials by completing exercises, activities and assessment checks.

  • Manage your learning based on your personal schedule, with content structured to easily let you pause and progress at will.

Learn By Doing

You know you want to learn Python, and the best way to learn Python is to learn by doing.

The Python Workshop focuses on building up your practical skills so that you can work towards building your skills as a data scientist, write scripts that help automate your life and save you time, or even create your own games and desktop applications.

On Your Terms

Build up and reinforce key skills in a way that feels rewarding.

You won't have to sit through any unnecessary theory. If you're short on time you can jump into a single exercise each day or spend an entire weekend learning about scripting. It's your choice.

An Ideal Start

Fast-paced and direct, The Python Workshop is the ideal companion for newcomers.

You'll build and iterate on your code like a software developer, learning along the way. This process means that you'll find that your new skills stick, embedded as best practice. A solid foundation for the years ahead.

Begin Your Journey

A simple, straightforward and pain-free way to learn Python.

  • $89.00

    $89.00The Python Workshop

    Enter early access and get started right away!
    Pre-order Now

Everything You Need

Every Workshop includes free access to a whole host of bonus downloadable content. No hidden fees or annoying DRM policies. Just pure, top-quality content.

  • Download a text-only version of the entire Workshop. Perfect for those moments where your WiFi connection is a bit spotty. Available as PDF or EPUB, and always DRM-free.

  • Save any of our step-by-step screencasts directly from our interactive player. You can rest easy knowing that you'll always have a live example to hand.

Get Build-Ready

Every Workshop includes a whole host of features that work together to help you get the job done. You’ll be ready to tackle real-world development in no time.
  • Hack Your Brain

    We've applied the latest pedagogical techniques to deliver a truly multimodal experience. It'll keep you engaged and make the learning stick. It's science!

  • Build Real Things

    Nobody likes wasting their time. We cut right to the action and get you building real skills that real, working developers value. The perfect approach for a career move.

  • Learn From Experts

    We've paired technical experts with top editorial talent. They've worked hard to deliver you the maximum impact for each minute you spend learning. It's our secret sauce.

  • Verify Your Credentials

    Prove yourself by taking the final challenge. We use the blockchain to cryptographically certify your newly vetted skill. It's perfect for sharing on social media. Hello LinkedIn!

  • Receive Free Updates

    Technology keeps changing, and so do we. We keep versions updated independently, so you'll always have access. No more worrying about third-party release cycles.

  • Access Anywhere

    All you need is an internet connection. We've built every course so that it works on desktop and mobile, giving you options that fit within your schedule.

What's Inside

From A to Z, we've got you covered!

  • 1

    Early Access: The Python Workshop

    • Installation and Setup
    • Pre-Course Assessment
  • 2

    1. Vital Python: Math, Strings, Conditionals, and Loops

    • Overview
    • Numbers: Operations, Types, and Variables
    • Python as a Calculator
    • Exercise 1: Step-by-Step
    • Exercise 1: Getting to Know the Order of Operations
    • Spacing in Python
    • Exercise 2: Step-by-Step
    • Exercise 2: Integer and Float Types
    • Complex Number Types
    • Errors in Python
    • Exercise 3: Step-by-Step
    • Exercise 3: Assigning Variables
    • Changing Types
    • Activity 1: Step-by-Step
    • Activity 1: Assigning Values to Variables
    • Variable Names
    • Exercise 4: Step-by-Step
    • Exercise 4: Variable Names
    • Exercise 5: Step-by-Step
    • Exercise 5: Multiple Variables in Python
    • Exercise 6: Step-by-Step
    • Exercise 6: Comments in Python
    • Docstrings
    • Activity 2: Step-by-Step
    • Activity 2: Finding a Solution Using Pythagorean Theorem in Python
    • Strings: Concatenation, Methods, and input()
    • Exercise 7: Step-by-Step
    • Exercise 7: String Error Syntax
    • Escape Sequences with Quotes
    • Exercise 8: Step-by-Step
    • Exercise 8: Displaying Strings
    • Exercise 9: Step-by-Step
    • Exercise 9: String Concatenation
    • String Interpolation
    • Exercise 10: Step-by-Step
    • Exercise 10: String Methods
    • Exercise 11: Step-by-Step
    • Exercise 11: Types and Casting
    • Exercise 12: Step-by-Step
    • Exercise 12: The input() Function
    • Activity 3: Step-by-Step
    • Activity 3: Using the input() Function to Rate You Day
    • String Indexing and Slicing
    • Slicing
    • Booleans and Conditionals
    • Exercise 13: Step-by-Step
    • Exercise 13: Boolean Variables
    • Logical Operators and Comparison Operators
    • Exercise 14: Step-by-Step
    • Exercise 14: Comparison Operators
    • Exercise 15: Step-by-Step
    • Exercise 15: Comparing Strings
    • Conditionals
    • Exercise 16: Step-by-Step
    • Exercise 16: Using the if Syntax
    • Exercise 17: Step-by-Step
    • Exercise 17: Using the if-else Syntax
    • The elif Statement
    • Loops
    • Activity 4: Step-by-Step
    • Activity 4: Finding the Least Common Multiple (LCM)
    • Programs
    • Exercise 18: Step-by-Step
    • Exercise 18: Calculating Perfect Squares
    • Exercise 19: Step-by-Step
    • Exercise 19: Real Estate Offer
    • Exercise 20: Step-by-Step
    • Exercise 20: Using for Loops
    • Activity 5: Step-by-Step
    • Activity 5: Building Conversational Bots Using Python
    • The continue Keyword
    • Quiz 1
    • Summary
  • 3

    2. Python Structures

    • Overview
    • The Power of Lists
    • Exercise 21: Step-by-Step
    • Exercise 21: Working with Python Lists
    • Matrices as Nested Lists
    • Exercise 22: Step-by-Step
    • Exercise 22: Using a Nested List to Store Data from a Matrix
    • Activity 6: Step-by-Step
    • Activity 6: Using a Nested List to Store Employee Data
    • Matrix Operations
    • Exercise 23: Step-by-Step
    • Exercise 23: Implementing Matrix Operations Addition and Subtraction
    • Matrix Multiplication Operations
    • Exercise 24: Step-by-Step
    • Exercise 24: Implementing Matrix Operations Multiplication
    • Exercise 25: Step-by-Step
    • Exercise 25: Basic List Operations
    • Exercise 26: Step-by-Step
    • Exercise 26: Accessing an Item from Shopping List Data
    • Exercise 27: Step-by-Step
    • Exercise 27: Adding Items to Our Shopping List
    • Dictionary Keys and Values, Methods, Tuples, A Survey of Sets and Choosing Types
    • Exercise 28: Step-by-Step
    • Exercise 28: Using a Dictionary to Store a Movie Record
    • Activity 7: Step-by-Step
    • Activity 7: Storing Company Employee Table Data Using a List and a Dictionary
    • Exercise 29: Step-by-Step
    • Exercise 29: Using the zip() Method to Manipulate Dictionaries
    • Exercise 30: Step-by-Step
    • Exercise 30: Accessing a Dictionary Using Dictionary Methods
    • Tuples
    • Exercise 31: Step-by-Step
    • Exercise 31: Exploring Tuple Properties in Our Shopping List
    • A Survey of Sets
    • Exercise 32: Step-by-Step
    • Exercise 32: Using Sets in Python
    • Set Operations
    • Exercise 33: Step-by-Step
    • Exercise 33: Implementing Set Operations
    • Choosing Types
    • Summary
    • Quiz 2
  • 4

    3. Executing Python: Programs, Algorithms, and Functions

    • Overview
    • Python Scripts and Modules
    • Exercise 34: Step-by-Step
    • Exercise 34: Writing and Executing our First Script
    • Exercise 35: Step-by-Step
    • Exercise 35: Writing and Importing our First Module
    • Exercise 36: Step-by-Step
    • Exercise 36: Adding a Docstring to my_module.py
    • Exercise 37: Step-by-Step
    • Exercise 37: Finding the System Date
    • Activity 8: Step-by-Step
    • Activity 8: What's the Time?
    • Python Algorithms
    • Exercise 38: Step-by-Step
    • Exercise 38: The Maximum Number
    • Exercise 39: Step-by-Step
    • Exercise 39: Using Bubble Sort in Python
    • Exercise 40: Step-by-Step
    • Exercise 40: Linear Search in Python
    • Exercise 41: Step-by-Step
    • Exercise 41: Binary Search in Python
    • Exercise 42: Step-by-Step
    • Basic, Iterative and Recursive Functions
    • Exercise 42: Defining and Calling the Function in Shell
    • Exercise 43: Step-by-Step
    • Exercise 43: Defining and Calling the Function in Python Script
    • Exercise 44: Step-by-Step
    • Exercise 44: Importing and Calling the Function from the Shell
    • Exercise 45: Step-by-Step
    • Exercise 45: Defining the Function with Keyword Arguments
    • Exercise 46: Step-by-Step
    • Exercise 46: Defining the Function with Positional and Keyword Arguments
    • Exercise 47: Step-by-Step
    • Exercise 47: Using **kwargs
    • Activity 9: Step-by-Step
    • Activity 9: Formatting Customer Names
    • Exercise 48: Step-by-Step
    • Exercise 48: A Simple Function with a For Loop
    • Exercise 49: Step-by-Step
    • Exercise 49: Exiting the Function During the For Loop
    • Activity 10: Step-by-Step
    • Activity 10: The Fibonacci Function with an Iteration
    • Exercise 50: Step-by-Step
    • Exercise 50: Recursive Countdown
    • Exercise 51: Step-by-Step
    • Exercise 51: Factorials with Iteration and Recursion
    • Activity 11: Step-by-Step
    • Activity 11: The Fibonacci Function with Recursion
    • Dynamic Programming and Helper Functions
    • Exercise 52: Step-by-Step
    • Exercise 52: Summing Integers
    • Exercise 53: Step-by-Step
    • Exercise 53: Timing Your Code
    • Activity 12: Step-by-Step
    • Activity 12: The Fibonacci Function with Dynamic Programming
    • Exercise 54: Step-by-Step
    • Exercise 54: Helper Currency Conversion
    • Variable Scope
    • Lambda Functions
    • Exercise 55: Step-by-Step
    • Exercise 55: The First Item in a List
    • Exercise 56: Step-by-Step
    • Exercise 56: Mapping with a Logistic Transform
    • Exercise 57: Step-by-Step
    • Exercise 57: Using the Filter Lambda
    • Summary
    • Quiz 3
  • 5

    4. Extending Python, Files, Errors, and Graphs

    • Overview
    • Reading, Writing Files and Preparing for Debugging (Defensive Code)
    • Exercise 58: Step-by-Step
    • Exercise 58: Reading a Text File Using Python
    • Exercise 59: Step-by-Step
    • Exercise 59: Reading Partial Content from a Text File
    • Exercise 60: Step-by-Step
    • Exercise 60: Creating and Writing Content to Files to Record the Date and Time in a Text File
    • Exercise 61: Step-by-Step
    • Exercise 61: Working with Incorrect Parameters to Find the Average Using Assert with Functions
    • Plotting Techniques
    • Exercise 62: Step-by-Step
    • Exercise 62: Drawing a Scatter Plot to Study the Data between Ice Cream Sales versus Temperature
    • Exercise 63: Step-by-Step
    • Exercise 63: Drawing a Line Chart to Find the Growth in Stock Prices
    • Exercise 64: Plotting Bar Plots to Grade Students
    • Exercise 64: Step-by-Step
    • Exercise 65: Creating a Pie Chart to Visualize the Number of Votes in a School
    • Exercise 65: Step-by-Step
    • Exercise 66: Step-by-Step
    • Exercise 66: Generating a Heatmap to Visualize the Grades of Students
    • Exercise 67: Step-by-Step
    • Exercise 67: Generating a Density Plot to Visualize the Score of Students
    • Exercise 68: Step-by-Step
    • Exercise 68: Creating a Contour Plot
    • Exercise 69: Generating 3D plots to Plot a Sine Wave
    • Exercise 69: Step-by-Step
    • The Don'ts of Plotting Graphs
    • Activity 13: Step-by-Step
    • Activity 13: Visualizing the Titanic Dataset Using a Pie Chart and Bar Plots
    • Quiz 4
  • 6

    5. Constructing Python: Classes and Methods

    • Overview
    • Classes and Objects
    • Exercise 70: Step-by-Step
    • Exercise 70: Exploring Strings
    • Exercise 71: Step-by-Step
    • Exercise 71: Creating a Pet Class
    • Exercise 72: Step-by-Step
    • Exercise 72: Creating a Circle Class
    • Exercise 73: The Country Class with Keyword Arguments
    • Exercise 73: Step-by-Step
    • Methods
    • Exercise 74: Step-by-Step
    • Exercise 74: Adding an Instance Method to Our Pet Class
    • Exercise 75: Computing the Size of Our Country
    • Exercise 75: Step-by-Step
    • Exercise 76: Adding a __str__ Method to the Country Class
    • Exercise 76: Step-by-Step
    • Exercise 77: Refactoring Instance Methods Using a Static Method
    • Exercise 77: Step-by-Step
    • Exercise 78: Extending Our Pet Class with Class Methods
    • Exercise 78: Step-by-Step
    • Properties
    • Exercise 79: Step-by-Step
    • Exercise 79: The Full Name Property
    • Exercise 80: Writing a Setter Method
    • Exercise 80: Step-by-Step
    • Inheritance
    • Exercise 81: Inheriting from the Person Class
    • Exercise 81: Step-by-Step
    • Exercise 82: Sub-Classing the datetime.date Class
    • Exercise 82: Step-by-Step
    • Exercise 83: Overriding Methods Using super()
    • Exercise 83: Step-by-Step
    • Exercise 84: Creating Organized Adults and Babies
    • Exercise 84: Step-by-Step
    • Activity 14: Creating Classes and Inheriting from a Parent Class
    • Activity 14: Step-by-Step
    • Summary
    • Quiz 5
  • 7

    6. The Standard Library

    • Overview
    • The Importance of the Standard Library
    • Exercise 85: Step-by-Step
    • Exercise 85: Using the dataclass Module
    • Exercise 86: Step-by-Step
    • Exercise 86: Extending the echo.py Example
    • Dates and Times
    • Exercise 87: Step-by-Step
    • Exercise 87: Comparing datetime across Time Zones
    • Exercise 88: Step-by-Step
    • Exercise 88: Calculating the Time Delta between Two datetime Objects
    • Exercise 89: Step-by-Step
    • Exercise 89: Calculating the Unix Epoch Time
    • Activity 15: Step-by-Step
    • Activity 15: Calculating the Time Elapsed to Run a Loop
    • Interacting with the OS and Using the Subprocess Module
    • Exercise 90: Step-by-Step
    • Exercise 90: Inspecting the Current Process Information
    • Exercise 91: Using the glob Pattern to List Files within a Directory
    • Exercise 91: Step-by-Step
    • Exercise 92: Customizing Child Processes with env vars
    • Exercise 92: Step-by-Step
    • Activity 16: Step-by-Step
    • Activity 16: Testing Python Code
    • Logging
    • Exercise 93: Using a logger Object
    • Exercise 93: Step-by-Step
    • Exercise 94: Step-by-Step
    • Exercise 94: Confguring the Logging Stack
    • Collections
    • Exercise 95: Step-by-Step
    • Exercise 95: Counting Words in a Text Document
    • Exercise 96: Step-by-Step
    • Exercise 96: Refactoring Code with defaultdict
    • Functools
    • Exercise 97: Using lru_cache to Speed Up Our Code
    • Exercise 97: Step-by-Step
    • Exercise 98: Step-by-Step
    • Exercise 98: Creating a print Function That Writes to stderr
    • Activity 17: Using partial on class Methods
    • Activity 17: Step-by-Step
    • Summary
    • Quiz 6
  • 8

    7. Becoming Pythonic

    • Overview
    • List, Set and Dictionary Comprehensions
    • Exercise 99: Step-by-Step
    • Exercise 99: Introducing List Comprehensions
    • Exercise 100: Step-by-Step
    • Exercise 100: Using Multiple Input Lists
    • Activity 18: Building a Chess Tournament
    • Activity 18: Step-by-Step
    • Exercise 101: Using Set Comprehensions
    • Exercise 101: Step-by-Step
    • Exercise 102: Using Dictionary Comprehensions
    • Exercise 102: Step-by-Step
    • Activity 19: Building a Scorecard Using Dictionary Comprehensions and Multiple Lists
    • Activity 19: Step-by-Step
    • Exercise 103: Step-by-Step
    • Exercise 103: Adopting a Default Dict
    • Iterators, Itertools and Generators
    • Exercise 104: Step-by-Step
    • Exercise 104: The Simplest Iterator
    • Exercise 105: A Custom Iterator
    • Exercise 105: Step-by-Step
    • Exercise 106: Controlling the Iteration
    • Exercise 106: Step-by-Step
    • Exercise 107: Step-by-Step
    • Exercise 107: Using Infnite Sequences and takewhile
    • Exercise 108: Step-by-Step
    • Exercise 108: Turning a Finite Sequence into an Infnite One, and Back Again
    • Exercise 109: Step-by-Step
    • Exercise 109: Generating a Sieve
    • Activity 20: Using Random Numbers to Find the Value of Pi
    • Activity 20: Step-by-Step
    • Regular Expressions
    • Exercise 110: Matching Text with Regular Expressions
    • Exercise 110: Step-by-Step
    • Exercise 111: Step-by-Step
    • Exercise 111: Using Regular Expressions to Replace Text
    • Activity 21: Regular Expressions
    • Activity 21: Regular Expressions
    • Summary
    • Quiz 7
  • 9

    8. Software Development

    • Overview
    • Debugging
    • Exercise 112: Step-by-Step
    • Exercise 112: Debugging a Salary Calculator
    • Activity 22: Step-by-Step
    • Activity 22: Debugging Sample Python Code for an Application
    • Automated Testing
    • Exercise 113: Step-by-Step
    • Exercise 113: Checking Sample Code with Unit Testing
    • Creating a PIP Package
    • Exercise 114: Step-by-Step
    • Exercise 114: Creating a Distribution That Includes Multiple Files within a Package
    • Creating Documentation the Easy Way
    • Exercise 115: Documenting a Divisible Code File
    • Exercise 115: Step-by-Step
    • Source Management
    • Exercise 116: Step-by-Step
    • Exercise 116: Making a Change in CPython Using git
    • Summary
    • Quiz 8
  • 10

    9. Practical Python: Advanced Topics

    • Overview
    • Developing Collaboratively
    • Exercise 117: Step-by-Step
    • Exercise 117: Writing Python on GitHub as a Team
    • Dependency Management
    • Exercise 118: Step-by-Step
    • Exercise 118: Creating and Setting Up a conda Virtual Environment to Install numpy and pandas
    • Exercise 119: Step-by-Step
    • Exercise 119: Sharing Environments between a conda Server and Your Local System
    • Deploying Code into Production
    • Exercise 120: Step-by-Step
    • Exercise 120: Dockerizing Your Fizzbuzz Tool
    • Multiprocessing
    • Exercise 121: Step-by-Step
    • Exercise 121: Working with execnet to Execute a Simple Python Squaring
    • Exercise 122: Using the Multiprocessing Package to Execute a Simple Python Program
    • Exercise 122: Step-by-Step
    • Exercise 123: Using the Threading Package
    • Exercise 123: Step-by-Step
    • Parsing Command-Line Arguments in Scripts
    • Exercise 124: Step-by-Step
    • Exercise 124: Introducing argparse to Accept Input from the User
    • Exercise 125: Using Positional Arguments to Accept Source and Destination Inputs_from_a_User
    • Exercise 125: Step-by-Step
    • Performance and Profiling
    • Exercise 126: Using PyPy to Find the Time to Get a List of Prime Numbers
    • Exercise 126: Step-by-Step
    • Profiling
    • Exercise 127: Step-by-Step
    • Exercise 127: Adopting Cython to Find the Time Taken to get a List of Prime Numbers
    • Activity 23: Generating a List of Random Numbers in a Python Virtual Environment
    • Activity 23: Step-by-Step
    • Summary
    • Quiz 9
  • 11

    10. Data Analytics with pandas and NumPy

    • Overview
    • NumPy and Basic Stats
    • Exercise 128: Step-by-Step
    • Exercise 128: Converting Lists to NumPy Arrays
    • Exercise 129: Step-by-Step
    • Exercise 129: Calculating the Mean of the Test Score
    • Exercise 130: Step-by-Step
    • Exercise 130: Finding the Median from a Collection of Income Data
    • Exercise 131: Finding the Standard Deviation from Income Data
    • Exercise 131: Step-by-Step
    • Matrices
    • Exercise 132: Matrices
    • Exercise 132: Step-by-Step
    • Exercise 133: Creating an Array to Implement NumPy Computations
    • Exercise 133: Step-by-Step
    • The pandas Library
    • Exercise 134: Step-by-Step
    • Exercise 134: Using DataFrames to Manipulate Stored Student testscore Data
    • Exercise 135: DataFrame Computations with the Student testscore Data
    • Exercise 135: Step-by-Step
    • Exercise 136: Computing DataFrames within DataFrames
    • Exercise 136: Step-by-Step
    • Exercise 137: Concatenating and Finding the Mean with Null Values for Our testscore Data
    • Exercise 137: Step-by-Step
    • Data
    • Exercise 138: Reading and Viewing the Boston Housing Dataset
    • Exercise 138: Step-by-Step
    • Exercise 139: Gaining Data Insights on the Boston Housing Dataset
    • Exercise 139: Step-by-Step
    • Null Values
    • Exercise 140: Null Value Operations on the Dataset
    • Exercise 140: Step-by-Step
    • Visual Analysis
    • Exercise 141: Creating a Histogram Using the Boston Housing Dataset
    • Exercise 141: Step-by-Step
    • Exercise 142: Creating a Scatter Plot for the Boston Housing Dataset
    • Exercise 142: Step-by-Step
    • Exercise 143: Correlation Values from the Dataset
    • Exercise 143: Step-by-Step
    • Exercise 144: Box Plots
    • Exercise 144: Step-by-Step
    • Activity 24: Data Analysis to Find the Outliers in Pay versus the Salary Report in the UK Statistics Dataset
    • Activity 24: Step-by-Step
    • Summary
    • Quiz 10
  • 12

    11. Machine Learning

    • Overview
    • Introduction to Linear Regression
    • Exercise 145: Step-by-Step
    • Exercise 145: Using Linear Regression to Predict the Accuracy of the Median Values of Our Dataset
    • Cross-Validation
    • Exercise 146: Step-by-Step
    • Exercise 146: Using the cross_val_score Function to Get Accurate Results on the Dataset
    • K-Nearest Neighbors, Decision Trees, and Random Forests
    • Exercise 147: Step-by-Step
    • Exercise 147: Using K-Nearest Neighbors to Find the Median Value of the Dataset
    • Exercise 148: K-Nearest Neighbors with GridSearchCV to Find the Optimal Number of Neighbors
    • Exercise 148: Step-by-Step
    • Exercise 149: Step-by-Step
    • Exercise 149: Decision Trees and Random Forests
    • Exercise 150: Random Forest Tuned to Improve the Prediction on Our Dataset
    • Exercise 150: Step-by-Step
    • Classification Models
    • Exercise 151: Preparing the Pulsar Dataset and Checking for Null Values
    • Exercise 151: Step-by-Step
    • Exercise 152: Step-by-Step
    • Exercise 152: Using Logistic Regression to Predict Data Accuracy
    • Exercise 153: Step-by-Step
    • Exercise 153: Using GaussianNB, KneighborsClassifer, DecisionTreeClassifer, and RandomForestClassifier to Predict Accuracy in Our Dataset
    • Exercise 154: Finding the Pulsar Percentage from the Dataset
    • Exercise 154: Step-by-Step
    • Exercise 155: Step-by-Step
    • Exercise 155: Confusion Matrix and Classifcation Report for the Pulsar Dataset
    • Boosting Methods
    • Exercise 156: Using AdaBoost to Predict the Best Optimal Values
    • Exercise 156: Step-by-Step
    • Activity 25: Step-by-Step
    • Activity 25: Using Machine Learning to Predict Customer Return Return Rate Accuracy
    • Summary
    • Quiz 11
  • 13

    Post-Course Assessment

    • Post-Course Assessment

Verify Your Skill

Complete The Python Workshop to unlock your secure credential.

We seal a record of your certification on the public Bitcoin blockchain. This immortalizes your achievement and lets employers authenticate your status with Packt. Our credentials are easy to share, and are ideal for displaying on your LinkedIn profile.

Take A Step Forward

There has never been a better time to start learning Python.

Already Know Python?

Don't worry, we've got your back with other languages and frameworks too!

Show me my options!