About the Author
About the Technical Reviewer
Brief Contents
Contents in Detail
Acknowledgments
Introduction
Who Is This Book For?
What Can You Expect to Learn?
Why Python?
Part I: Basics
Chapter 1: Getting Started
Setting Up Your Programming Environment
Python 2 and Python 3
Running Snippets of Python Code
Hello World!
Python on Different Operating Systems
Python on Linux
Python on OS X
Python on Windows
Troubleshooting Installation Issues
Running Python Programs from a Terminal
On Linux and OS X
On Windows
Exercise 1-1: python.org
Exercise 1-2: Hello World Typos
Exercsie 1-3: Infinite Skills
Summary
Chapter 2: Variables and Simple Data Types
What Really Happens When You Run hello_world.py
Variables
Naming and Using Variables
Avoiding Name Errors When Using Variables
Exercise 2-1: Simple Message
Exercise 2-2: Simple Messages
Strings
Changing Case in a String with Methods
Combining or Concatenating Strings
Adding Whitespace to Strings with Tabs or Newlines
Stripping Whitespace
Avoiding Syntax Errors with Strings
Printing in Python 2
Exercise 2-3: Personal Message
Exercise 2-4: Name Cases
Exercise 2-5: Famous Quotes
Exercise 2-6: Famous Quote 2
Exercise 2-7: Stripping Names
Numbers
Integers
Floats
Avoiding Type Errors with the str() Function
Integers in Python 2
Exercise 2-8: Number Eight
Exercise 2-9: Favorite Number
Comments
How Do You Write Comments?
What Kind of Comments Should You Write?
Exercise 2-10: Adding Comments
The Zen of Python
Exercise 2-11: Zen of Python
Summary
Chapter 3: Introducing Lists
What Is a List?
Accessing Elements in a List
Index Positions Start at 0, Not 1
Using Individual Values from a List
Exercise 3-1: Names
Exercise 3-2: Greetings
Exercise 3-3: Your Own List
Changing, Adding, and Removing Elements
Modifying Elements in a List
Adding Elements to a List
Removing Elements from a List
Exercise 3-4: Guest List
Exercise 3-5: Changing Guest List
Exercise 3-6: More Guests
Exercsie 3-7: Shrinking Guest List
Organizing a List
Sorting a List Permanently with the sort() Method
Sorting a List Temporarily with the sorted() Function
Printing a List in Reverse Order
Finding the Length of a List
Exercise 3-8: Seeing the World
Exercise 3-9: Dinner Guests
Exercise 3-10: Every Function
Avoiding Index Errors When Working with Lists
Exercise 3-11: Intentional Error
Summary
Chapter 4: Working with Lists
Looping Through an Entire List
A Closer Look at Looping
Doing More Work Within a for Loop
Doing Something After a for Loop
Avoiding Indentation Errors
Forgetting to Indent
Forgetting to Indent Additional Lines
Indenting Unnecessarily
Indenting Unnecessarily After the Loop
Forgetting the Colon
Exercise 4-1: Pizzas
Exercise 4-2: Animals
Making Numerical Lists
Using the range() Function
Using range() to Make a List of Numbers
Simple Statistics with a List of Numbers
List Comprehensions
Exercise 4-3: Counting to Twenty
Exercise 4-4: One Million
Exercise 4-5: Summing a Million
Exercise 4-6: Odd Numbers
Exercise 4-7: Threes
Exercise 4-8: Cubes
Exercise 4-9: Cube Comprehension
Working with Part of a List
Slicing a List
Looping Through a Slice
Copying a List
Exercise 4-10: Slices
Exercise 4-11: My Pizzas, Your Pizzas
Exercise 4-12: More Loops
Tuples
Defining a Tuple
Looping Through All Values in a Tuple
Writing over a Tuple
Exercise 4-13: Buffet
Styling Your Code
The Style Guide
Indentation
Line Length
Blank Lines
Other Style Guidelines
Exercise 4-14: PEP 8
Exercise 4-15: Code Review
Summary
Chapter 5: if Statements
A Simple Example
Conditional Tests
Checking for Equality
Ignoring Case When Checking for Equality
Checking for Inequality
Numerical Comparisons
Checking Multiple Conditions
Checking Whether a Value Is in a List
Checking Whether a Value Is Not in a List
Boolean Expressions
Exercise 5-1: Conditional Tests
Exercise 5-2: More Conditional Tests
if Statements
Simple if Statements
if-else Statements
The if-elif-else Chain
Using Multiple elif Blocks
Omitting the else Block
Testing Multiple Conditions
Exercise 5-3: Alien Colors #1
Exercise 5-4: Alien Colors #2
Exercise 5-5: Alien Colors #3
Exercise 5-6: Stages of Life
Exercise 5-7: Favorite Fruit
Using if Statements with Lists
Checking for Special Items
Checking That a List Is Not Empty
Using Multiple Lists
Exercise 5-8: Hello Admin
Exercise 5-9: No Users
Exercise 5-10: Checking Usernames
Exercise 5-11: Ordinal Numbers
Styling Your if Statements
Exercise 5-12: Styling if statements
Exercise 5-13: Your Ideas
Summary
Chapter 6: Dictionaries
A Simple Dictionary
Working with Dictionaries
Accessing Values in a Dictionary
Adding New Key-Value Pairs
Starting with an Empty Dictionary
Modifying Values in a Dictionary
Removing Key-Value Pairs
A Dictionary of Similar Objects
Exercise 6-1: Person
Exercise 6-2: Favorite Numbers
Exercise 6-3: Glossary
Looping Through a Dictionary
Looping Through All Key-Value Pairs
Looping Through All the Keys in a Dictionary
Looping Through a Dictionary's Keys in Order
Looping Through All Values in a Dictionary
Exercise 6-4: Glossary 2
Exercise 6-5: Rivers
Exercise 6-6: Polling
Nesting
A List of Dictionaries
A List in a Dictionary
A Dictionary in a Dictionary
Exercise 6-7: People
Exercise 6-8: Pets
Exercise 6-9: Favorite Places
Exercise 6-10: Favorite Numbers
Exercise 6-11: Cities
Exercise 6-12: Extensions
Summary
Chapter 7: User Input and while Loops
How the input() Function Works
Writing Clear Prompts
Using int() to Accept Numerical Input
The Modulo Operator
Accepting Input in Python 2.7
Exercise 7-1: Rental Car
Exercise 7-2: Restaurant Seating
Exercise 7-3: Multiples of Ten
Introducing while Loops
The while Loop in Action
Letting the User Choose When to Quit
Using a Flag
Using break to Exit a Loop
Using continue in a Loop
Avoiding Infinite Loops
Exercise 7-4: Pizza Toppings
Exercise 7-5: Movie Tickets
Exercise 7-6: Three Exits
Exercise 7-7: Infinity
Using a while Loop with Lists and Dictionaries
Moving Items from One List to Another
Removing All Instances of Specific Values from a List
Filing a Dictionary with User Input
Exercise 7-8: Deli
Exercise 7-9: No Pastrami
Exercise 7-10: Dream Vacation
Summary
Chapter 8: Functions
Defining a Function
Passing Information to a Function
Arguments and Parameters
Exercise 8-1: Message
Exercise 8-2: Favorite Book
Passing Arguments
Positional Arguments
Keyword Arguments
Default Values
Equivalent Function Calls
Avoiding Argument Errors
Exercise 8-3: T-Shirt
Exercise 8-4: Large Shirts
Exercise 8-5: Cities
Return Values
Returning a Simple Value
Making an Argument Optional
Returning a Dictionary
Using a Function with a while Loop
Exercise 8-6: City Names
Exercise 8-7: Album
Exercise 8-8: User Albums
Passing a List
Modifying a List in a Function
Preventing a Function from Modifying a List
Exercise 8-9: Magicians
Exercise 8-10: Great Magicians
Exercise 8-11: Unchanged Magicians
Passing an Arbitrary Number of Arguments
Mixing Positional and Arbitrary Arguments
Using Arbitrary Keyword Arguments
Exercise 8-12: Sandwiches
Exercise 8-13: User Profile
Exercise 8-14: Cars
Storing Your Functions in Modules
Importing an Entire Module
Importing Specific Functions
Using as to Give a Function an Alias
Using as to Give a Module an Alias
Importing All Functions in a Module
Styling Functions
Exercise 8-15: Printing Models
Exercise 8-16: Imports
Exercise 8-17: Styling Functions
Summary
Chapter 9: Classes
Creating and Using a Class
Creating the Dog Class
Making an Instance from a Class
Exercise 9-1: Restaurant
Exercise 9-2: Three Restaurants
Exercise 9-3: Users
Working with Classes and Instances
The Car Class
Setting a Default Value for an Attribute
Modifying Attribute Values
Exercise 9-4: Number Served
Exercise 9-5: Login Attempts
Inheritance
The __init__() method for a Child Class
Inheritance in Python 2.7
Defining Attributes and Methods for the Child Class
Overriding Methods from the Parent Class
Instances as Attributes
Modeling Real-World Objects
Exercise 9-6: Ice Cream Stand
Exercise 9-7: Admin
Exercise 9-8: Privileges
Exercise 9-9: Battery Upgrade
Importing Classes
Importing a Single Class
Storing Multiple Classes in a Module
Importing Multiple Classes from a Module
Importing an Entire Module
Importing All Classes from a Module
Importing a Module into a Module
Finding Your Own Workflow
Exercise 9-10: Imported Restaurant
Exercise 9-11: Imported Admin
Exercise 9-12: Multiple Modules
The Python Standard Library
Exercise 9-13: OrderedDict Rewrite
Exercise 9-14: Dice
Exercise 9-15: Python Module of the Week
Styling Classes
Summary
Chapter 10: Files and Exceptions
Reading from a File
Reading an Entire File
File Paths
Reading Line by Line
Making a List of Lines from a File
Working with a File's Contents
Large Files: One Million Digits
Is Your Birthday Contained in Pi?
Exercise 10-1: Learning Python
Exercise 10-2: Learning C
Writing to a File
Writing to an Empty File
Writing Multiple Lines
Appending to a File
Exercise 10-3: Guest
Exercise 10-4: Guest Book
Exercise 10-5: Programming Poll
Exceptions
Handling the ZeroDivisionError Exception
Using try-except Blocks
Using Exceptions to Prevent Crashes
The else Block
Handling the FileNotFoundError Exception
Analyzing Text
Working with Multiple Files
Failing Silently
Deciding Which Errors to Report
Exercise 10-6: Addition
Exercise 10-7: Addition Calculator
Exercise 10-8: Cats and Dogs
Exercise 10-9: Silent Cats and Dogs
Exercise 10-10: Common Words
Storing Data
Using json.dump() and json.load()
Saving and Reading User-Generated Data
Refactoring
Exercise 10-11: Favorite Number
Exercise 10-12: Favorite Number Revisited
Exercise 10-13: Verify User
Summary
Chapter 11: Testing Your Code
Testing a Function
Unit Tests and Test Cases
A Passing Test
A Failing Test
Responding to a Failing Test
Adding New Tests
Exercise 11-1: City, Country
Exercise 11-2: Population
Testing a Class
A Variety of Assert Methods
A Class to Test
Testing the AnonymousSurvey Class
The setUp() Method
Exercise 11-3: Employee
Summary
Part II: Projects
Project 1: Alien Invasion
Chapter 12: A Ship that Fires Bullets
Planning Your Project
Installing Pygame
Installing Python Packages with pip
Installing Pygame on Linux
Installing Pygame on OS X
Installing Pygame on Windows
Starting the Game Project
Creating a Pygame Window and Responding to User Input
Setting the Background Color
Creating a Settings Class
Adding the Ship Image
Creating the Ship Class
Drawing the Ship to the Screen
Refactoring: the game_functions Module
The check_events() Function
The update_screen() Function
Exercise 12-1: Blue Sky
Exercise 12-2: Game Character
Piloting the Ship
Responding to a Keypress
Allowing Continuous Movement
Moving Both Left and Right
Adjusting the Ship's Speed
Limiting the Ship's Range
Refactoring check_events()
A Quick Recap
alien_invasion.py
settings.py
game_functions.py
ship.py
Exercise 12-3: Rocket
Exercise 12-4: Keys
Shooting Bullets
Adding the Bullet Settings
Creating the Bullet Class
Storing Bullets in a Group
Firing Bullets
Deleting Old Bullets
Limiting the Number of Bullets
Creating the update_bullets() Function
Creating the fire_bullet() Function
Exercise 12-5: Sideways Shooter
Chapter 13: Aliens!
Reviewing Your Project
Creating the First Alien
Creating the Alien Class
Creating an Instance of the Alien
Making the Alien Appear Onscreen
Building the Alien Fleet
Determining How Many Aliens Fit in a Row
Creating Rows of Aliens
Creating the Fleet
Refactoring create_fleet()
Adding Rows
Exercise 13-1: Stars
Exercise 13-2: Better Stars
Making the Fleet Move
Moving the Aliens Right
Creating Settings for Fleet Direction
Checking to See Whether an Alien Has Hit the Edge
Dropping the Fleet and Changing Direction
Exercise 13-3: Raindrops
Exercise 13-4: Steady Rain
Shooting Aliens
Detecting Bullet Collisions
Making Larger Bullets for Testing
Repopulating the Fleet
Speeding Up the Bullets
Refactoring update_bullets()
Exercise 13-5: Catch
Ending the Game
Detecting Alien-Ship Collisions
Responding to Alien-Ship Collisions
Aliens that Reach the Bottom of the Screen
Game Over!
Identifying When Parts of the Game Should Run
Exercise 13-6: Game Over
Summary
Chapter 14: Scoring
Adding the Play Button
Creating a Button Class
Drawing the Button to the Screen
Starting the Game
Resetting the Game
Deactivating the Play Button
Hiding the Mouse Cursor
Exercise 14-1: Press P to Play
Exercise 14-2: Target Practice
Leveling Up
Modifying the Speed Settings
Resetting the Speed
Exercise 14-3: Challenging Target Practice
Scoring
Displaying the Score
Making a Scoreboard
Updating the Score as Aliens Are Shot Down
Making Sure to Score All Hits
Increasing Point Values
Rounding the Score
High Scores
Displaying the Level
Displaying the Number of Ships
Exercise 14-4: All-Time High Score
Exercise 14-5: Refactoring
Exercise 14-6: Expanding Alien Invasion
Summary
Project 2: Data Visualization
Chapter 15: Generating Data
Installing matplotlib
On Linux
On OS X
On Windows
Testing matplotlib
The matplotlib Gallery
Plotting a Simple Line Graph
Changing the Label Type and Graph Thickness
Correcting the Plot
Plotting and Styling Individual Points with scatter()
Plotting a Series of Points with scatter()
Calculating Data Automatically
Removing Outlines from Data Points
Defining Custom Colors
Using a Colormap
Saving Your Plots Automatically
Exercise 15-1: Cubes
Exercise 15-2: Colored Cubes
Random Walks
Creating the RandomWalk() Class
Choosing Directions
Plotting the Random Walk
Generating Multiple Random Walks
Styling the Walk
Coloring the Points
Plotting the Starting and Ending Points
Cleaning Up the Axes
Adding Plot Points
Altering the Size to Fill the Screen
Exercise 15-3: Molecular Motion
Exercise 15-4: Modified Random Walks
Exercise 15-5: Refactoring
Rolling Dice with Pygal
Installing Pygal
The Pygal Gallery
Creating the Die Class
Rolling the Die
Analyzing the Results
Making a Histogram
Rolling Two Dice
Rolling Dice of Different Sizes
Exercise 15-6: Automatic Labels
Exercise 15-7: Two D8s
Exercise 15-8: Three Dice
Exercise 15-9: Multiplication
Exercise 15-10: Practicing with Both Libraries
Summary
Chapter 16: Downloading Data
The CSV File Format
Parsing the CSV File Headers
Printing the Headers and Their Positions
Extracting and Reading Data
Plotting Data in a Temperature Chart
The datetime Module
Plotting Dates
Plotting a Longer Timeframe
Plotting a Second Data Series
Shading an Area in the Chart
Error-Checking
Exercise 16-1: San Francisco
Exercise 16-2: Sitka-Death Valley Comparison
Exercise 16-3: Rainfall
Exercise 16-4: Explore
Mapping Global Data Sets: JSON Format
Downloading World Population Data
Extracting Relevant Data
Converting Strings into Numerical Values
Obtaining Two-Digit Country Codes
Building a World Map
Plotting Numerical Data on a World Map
Plotting a Complete Population Map
Grouping Countries by Population
Styling World Maps in Pygal
Lightening the Color Theme
Exercise 16-5: All Countries
Exercise 16-6: Gross Domestic Product
Exercise 16-7: Choose Your Own Data
Exercise 16-8: Testing the country_codes Module
Summary
Chapter 17: Working with APIs
Using a Web API
Git and GitHub
Requesting Data Using an API Call
Installing Requests
Processing an API Response
Working with the Response Dictionary
Summarizing the Top Repositories
Monitoring API Rate Limits
Visualizing Repositories Using Pygal
Refining Pygal Charts
Adding Custom Tooltips
Plotting the Data
Adding Clickable Links to Our Graph
The Hacker News API
Exercise 17-1: Other Languages
Exercise 17-2: Active Discussions
Exercise 17-3: Testing python_repos.py
Summary
Project 3: Web Applications
Chapter 18: Getting Started with Django
Setting Up a Project
Writing a Spec
Creating a Virtual Environment
Installing virtualenv
Activating the Virtual Environment
Installing Django
Creating a Project in Django
Creating the Database
Viewing the Project
Exercise 18-1: New Projects
Starting an App
Defining Models
Activating Models
The Django Admin Site
Defining the Entry Model
Migrating the Entry Model
Registering Entry with the Admin Site
The Django Shell
Exercise 18-2: Short Entries
Exercise 18-3: The Django API
Exercise 18-4: Pizzeria
Making Pages: The Learning Log Home Page
Mapping an URL
Writing a View
Writing a Template
Exercise 18-5: Meal Planner
Exercise 18-6: Pizzeria Home Page
Building Additional Pages
Template Inheritance
The Topics Page
Individual Topic Pages
Exercise 18-7: Template Documentation
Exercise 18-8: Pizzeria Pages
Summary
Chapter 19: User Accounts
Allowing Users to Enter Data
Adding New Topics
Adding New Entries
Editing Entries
Exercise 19-1: Blog
Setting Up User Accounts
The users App
The Login Page
Logging Out
The Registration Page
Exercise 19-2: Blog Accounts
Allowing Users to Own Their Data
Restricting Access with @login_required
Connecting Data to Certain Users
Restricting Topics Access to Appropriate Users
Protecting a User's Topics
Protecting the edit_entry Page
Associating New Topics with the Current User
Exercise 19-3: Refactoring
Exercise 19-4: Protecting new_entry
Exercise 19-5: Protected Blog
Summary
Chapter 20: Styling and Deploying an App
Styling Learning Log
The django-bootstrap3 App
Using Bootstrap to Style Learning Log
Modifying base.html
Styling the Home Page Using a Jumbotron
Styling the Login Page
Styling the new_topic Page
Styling the Topics Page
Styling the Entries on the Topic Page
Exercise 20-1: Other Forms
Exercise 20-2: Stylish Blog
Deploying Learning Log
Making a Heroku Account
Installing the Heroku Toolbelt
Installing Required Packages
Creating a Packages List with a requirements.txt File
Specifying the Python Runtime
Modifying settings.py for Heroku
Making a Procfile to Start Processes
Modifying wsgi.py for Heroku
Making a Directory for Static Files
Using the gunicorn Server Locally
Using Git to Track the Project's Files
Pushing to Heroku
Setting Up the Database on Heroku
Refining the Heroku Deployment
Securing the Live Project
Committing and Pushing Changes
Creating Custom Error Pages
Ongoing Development
The SECRET_KEY Setting
Deleting a Project on Heroku
Exercise 20-3: Live Blog
Exercise 20-4: More 404s
Exercise 20-5: Extended Learning Log
Summary
Afterword
Appendix A: Installing Python
Python on Linux
Finding the Installed Version
Installing Python 3 on Linux
Python on OS X
Finding the Installed Version
Using Homebrew to Install Python 3
Python on Windows
Installing Python 3 on Windows
Finding the Python Interpreter
Adding Python to Your Path Variable
Python Keywords and Built-in Functions
Python Keywords
Python Built-in Functions
Appendix B: Text Editors
Geany
Installing Geany on Linux
Installing Geany on Windows
Running Python Programs in Geany
Customizing Geany Settings
Sublime Text
Installing Sublime Text on OS X
Installing Sublime Text on Linux
Installing Sublime Text on Windows
Running Python Programs in Sublime Text
Configuring Sublime Text
Customizing Sublime Text Settings
IDLE
Installing IDLE on Linux
Installing IDLE on OS X
Installing IDLE on Windows
Customizing IDLE Settings
Emacs and vim
Appendix C: Getting Help
First Steps
Try It Again
Take a Break
Refer to This Book's Resources
Searching Online
Stack Overflow
The Official Python Documentation
Official Library Documentation
r/learnpython
Blog Posts
IRC (Internet Relay Chat)
Make an IRC Account
Channels to Join
IRC Culture
Appendix D: Using Git for Version Control
Installing Git
Installing Git on Linux
Installing Git on OS X
Installing Git on Windows
Configuring Git
Making a Project
Ignoring Files
Initializing a Repository
Checking the Status
Adding Files to the Repository
Making a Commit
Checking the Log
The Second Commit
Reverting a Change
Checking Out Previous Commits
Deleting the Repository
Index
Resources