Home > Store

Learn More Python 3 the Hard Way: The Next Step for New Python Programmers

eBook (Watermarked)

  • Your Price: $33.11
  • List Price: $41.39
  • Includes EPUB and PDF
  • About eBook Formats
  • This eBook includes the following formats, accessible from your Account page after purchase:

    ePub EPUB The open industry format known for its reflowable content and usability on supported mobile devices.

    Adobe Reader PDF The popular standard, used most often with the free Acrobat® Reader® software.

    This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.

Also available in other formats.

Register your product to gain access to bonus material or receive a coupon.


  • Copyright 2018
  • Dimensions: 7" x 9-1/8"
  • Pages: 240
  • Edition: 1st
  • eBook (Watermarked)
  • ISBN-10: 0-13-412302-6
  • ISBN-13: 978-0-13-412302-8

Transform Your Ideas into High-Quality Python Code!

Zed Shaw has perfected the world’s best system for becoming a truly effective Python 3.x developer. Follow it and you will succeed—just like the tens of millions of programmers he’s already taught. You bring the discipline, commitment, and persistence; the author supplies everything else.

In Learn Python 3 the Hard Way, Zed Shaw taught you the basics of Programming with Python 3. Now, in Learn More Python 3 the Hard Way, you’ll go far beyond the basics by working through 52 brilliantly crafted projects. Each one helps you build a key practical skill, combining demos to get you started and challenges to deepen your understanding. Zed then teaches you even more in 12 hours of online videos, where he shows you how to break, fix, and debug your code.

First, you’ll discover how to analyze a concept, idea, or problem to implement in software. Then, step by step, you’ll learn to design solutions based on your analyses and implement them as simply and elegantly as possible. Throughout, Shaw stresses process so you can get started and build momentum, creativity to solve new problems, and quality so you’ll build code people can rely on.

  • Manage complex projects with a programmer’s text editor
  • Leverage the immense power of data structures
  • Apply algorithms to process your data structures
  • Master indispensable text parsing and processing techniques
  • Use SQL to efficiently and logically model stored data
  • Learn powerful command-line tools and skills
  • Combine multiple practices in complete projects

It’ll be hard at first. But soon, you’ll just get it—and that will feel great!

This course will reward you for every minute you put into it. Soon, you’ll go beyond merely writing code that runs: you’ll craft high-quality Python code that solves real problems. You’ll be a serious Python programmer.

Perfect for Everyone Who’s Already Started Working with Python, including Junior Developers and Seasoned Python Programmers Upgrading to Python 3.6+

Register your product at informit.com/register for convenient access to downloads, updates, and/or corrections as they become available.


Author's Site

Please visit the author's site at http://learncodethehardway.org/more-python-book/.

Sample Content

Sample Pages

Download the sample pages (includes Exercises 6, 40, and the Index)

Table of Contents

Preface xiv

Part I: Initial Knowledge 2

Exercise 0: The Setup 6

A Programmer’s Editor 6

Python 3.6 6

A Working Terminal 6

A Working pip+virtualenv Configuration 7

Lab Journal 7

A Github.com Account 7

git 7

Optional: Screen-Recording Software 8

Further Study 8

Exercise 1: On Process 10

Exercise Challenge 11

Study Drills 12

Further Study 12

Exercise 2: On Creativity 14

Exercise Challenge 14

Study Drill 15

Exercise 3: On Quality 16

Exercise Challenge 18

Study Drill 18

Part II: Quick Hacks 20


Exercise 4: Dealing with Command Line Arguments 24

Exercise Challenge 24

Solution 25

Study Drills 25

Exercise 5: cat 26

Exercise Challenge 26

Solution 27

Study Drills 27

Further Study 27

Exercise 6: find 28

Exercise Challenge 29

Study Drills 30

Further Study 30

Exercise 7: grep 32

Exercise Challenge 32

Study Drills 33

Further Study 33

Exercise 8: cut 34

Exercise Challenge 35

Study Drill 35

Further Study 35

Exercise 9: sed 36

Exercise Challenge 36

Study Drills 37

Further Study 37

Exercise 10: sort 38

Exercise Challenge 38

Study Drills 39

Further Study 39

Exercise 11: uniq 40

Exercise Challenge 40

Study Drills 41

Further Study 41

Exercise 12: Review 42

Exercise Challenge 42

Study Drills 43

Further Study 43

Part III: Data Structures 46


Exercise 13: Single Linked Lists 50

Description 50

Controller 52

Test 53

Introductory Auditing 55

Exercise Challenge 56

Auditing 56

Study Drill 56

Exercise 14: Double Linked Lists 58

Introducing Invariant Conditions 59

Exercise Challenge 60

Study Drill 61

Exercise 15: Stacks and Queues 62

Exercise Challenge 62

Breaking It 64

Further Study 64

Exercise 16: Bubble, Quick, and Merge Sort 66

Exercise Challenge 66

Study Drills 71

Exercise 17: Dictionary 74

Exercise Challenge 74

Doing a “Code Master Copy” 74

Copy the Code 75

Annotate the Code 78

Summarize the Data Structure 78

Memorize the Summary 79

Implement from Memory 80

Repeat 80

Study Drills 81

Break It 81

Exercise 18: Measuring Performance 82

The Tools 82

Analyzing Performance 84

Exercise Challenge 86

Study Drills 86

Breaking It 86

Further Study 86

Exercise 19: Improving Performance 88

Exercise Challenge 89

Further Study 90

Exercise 20: Binary Search Trees 92

BSTree Requirements 92

Deleting 93

Exercise Challenge 94

Study Drills 94

Exercise 21: Binary Search 96

Exercise Challenge 96

Study Drills 96

Further Study 97

Exercise 22: Suffix Arrays 98

Exercise Challenge 99

Study Drills 99

Further Study 99

Exercise 23: Ternary Search Trees 100

Exercise Challenge 100

Study Drills 102

Exercise 24: Fast URL Search 104

Exercise Challenge 104

Study Drills 105

Further Study 105

Part IV: Intermediate Projects 106

Exercise 25: xargs 108

Exercise Challenge 108

Study Drills 108

Exercise 26: hexdump 110

Exercise Challenge 111

Study Drill 112

Further Study 112

Exercise 27: tr 114

Exercise Challenge 114

A Criticism of 45-Minute Blocks 115

Study Drills 115

Exercise 28: sh 116

Exercise Challenge 116

Study Drill 117

Further Study 117

Exercise 29: diff and patch 118

Exercise Challenge 118

Study Drill 119

Further Study 119

Part V: Parsing Text 120

Exercise 30: Finite State Machines 122

Exercise Challenge 123

Study Drills 125

Further Study 125

Exercise 31: Regular Expressions 126

Exercise Challenge 127

Study Drills 128

Further Study 128

Exercise 32: Scanners 130

Puny Python Scanner 131

Exercise Challenge 133

Study Drills 133

Further Study 133

Exercise 33: Parsers 136

Recursive Descent Parsing 137

BNF Grammars 138

Quick Demo Hack Parser 140

Exercise Challenge 142

Study Drill 142

Further Study 142

Exercise 34: Analyzers 144

Visitor Pattern 144

A Short Puny Python Analyzer 145

Parser versus Analyzer 148

Exercise Challenge 148

Study Drills 149

Further Study 149

Exercise 35: Interpreters 150

Interpreters versus Compilers 150

Python Is Both 151

How to Write an Interpreter 151

Exercise Challenge 152

Study Drills 152

Further Study 152

Exercise 36: Simple Calculator 154

Exercise Challenge 154

Study Drills 155

Further Study 155

Exercise 37: Little BASIC 156

Exercise Challenge 156

Study Drills 157

Part VI: SQL and Object Relational Mapping 158


Exercise 38: Introduction to SQL 160

What Is SQL? 160

The Setup 161

Learning SQL Vocabulary 162

SQL Grammar 163

Further Study 163

Exercise 39: Creating with SQL 164

Creating Tables 164

Creating a Multi-table Database 165

Inserting Data 165

Insert Referential Data 166

Exercise Challenge 166

Further Study 167

Exercise 40: Reading with SQL 168

Select across Many Tables 168

Exercise Challenge 169

Further Study 170

Exercise 41: Updating with SQL 172

Updating Complex Data 172

Replacing Data 173

Exercise Challenge 173

Further Study 174

Exercise 42: Deleting with SQL 176

Deleting Using Other Tables 176

Exercise Challenge 177

Further Study 178

Exercise 43: SQL Administration 180

Destroying and Altering Tables 180

Migrating and Evolving Data 181

Exercise Challenge 182

Further Study 182

Exercise 44: Using Python’s Database API 184

Learning an API 184

Exercise Challenge 185

Further Study 185

Exercise 45: Creating an ORM 186

Exercise Challenge 186

Further Study 187

Part VII: Final Projects 188

Exercise 46: blog 190

Exercise Challenge 190

Study Drills 191

Exercise 47: bc 192

Exercise Challenge 192

Study Drill 193

Exercise 48: ed 194

Exercise Challenge 194

Study Drills 195

Exercise 49: sed 196

Exercise Challenge 197

Study Drill 197

Exercise 50: vi 198

Exercise Challenge 198

Study Drills 199

Exercise 51: lessweb 200

Exercise Challenge 200

Breaking It 200

Study Drills 201

Exercise 52: moreweb 202

Exercise Challenge 202

Breaking It 203

Further Study 203

Index 204


Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020