PYTHON CRASH COURSE
A Hands-On, Project-Based Introduction to Programming
Eric Matthes
San Francisco
PYTHON CRASH COURSE. Copyright 2016 by Eric Matthes.
All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher.
First printing
19 18 17 16 15 1 2 3 4 5 6 7 8 9
ISBN-10: 1-59327-603-6
ISBN-13: 978-1-59327-603-4
Publisher: William Pollock
Production Editor: Riley Hoffman
Cover Illustration: Josh Ellingson
Interior Design: Octopod Studios
Developmental Editors: William Pollock, Liz Chadwick, and Leslie Shen
Technical Reviewer: Kenneth Love
Copyeditor: Anne Marie Walker
Compositor: Riley Hoffman
Proofreader: James Fraleigh
For information on distribution, translations, or bulk sales, please contact No Starch Press, Inc. directly:
No Starch Press, Inc.
245 8th Street, San Francisco, CA 94103
phone: 415.863.9900;
www.nostarch.com
Library of Congress Cataloging-in-Publication Data
Matthes, Eric, 1972-
Python crash course : a hands-on, project-based introduction to programming / by Eric Matthes.
pages cm
Includes index.
Summary: "A project-based introduction to programming in Python, with exercises. Covers general
programming concepts, Python fundamentals, and problem solving. Includes three projects - how to
create a simple video game, use data visualization techniques to make graphs and charts, and build
an interactive web application"-- Provided by publisher.
ISBN 978-1-59327-603-4 -- ISBN 1-59327-603-6
1 . Python (Computer program language) I. Title.
QA76.73.P98M38 2015
00 5.13'3--dc23
2015018135
No Starch Press and the No Starch Press logo are registered trademarks of No Starch Press, Inc. Other product and company names mentioned herein may be the trademarks of their respective owners. Rather than use a trademark symbol with every occurrence of a trademarked name, we are using the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark.
The information in this book is distributed on an As Is basis, without warranty. While every precaution has been taken in the preparation of this work, neither the author nor No Starch Press, Inc. shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in it.
About the Author
Eric Matthes is a high school science and math teacher living in Alaska, where he teaches an introductory Python course. He has been writing programs since he was five years old. Eric currently focuses on writing software that addresses inefficiencies in education and brings the benefits of open source software to the field of education. In his spare time he enjoys climbing mountains and spending time with his family.
About the Technical Reviewer
Kenneth Love has been a Python programmer and teacher for many years. He has given talks and tutorials at conferences, done professional trainings, been a Python and Django freelancer, and now teaches for an online education company. Kenneth is also the co-creator of the django-braces package, which provides several handy mixins for Djangos class-based views. You can keep up with him on Twitter at @kennethlove.
For my father, who always made time to answer my questions about programming, and for Ever, who is just beginning to ask me his questions
CONTENTS IN DETAIL
GETTING STARTED
VARIABLES AND SIMPLE DATA TYPES
INTRODUCING LISTS
WORKING WITH LISTS
IF STATEMENTS
DICTIONARIES
USER INPUT AND WHILE LOOPS
FUNCTIONS
CLASSES
FILES AND EXCEPTIONS
TESTING YOUR CODE
A SHIP THAT FIRES BULLETS
ALIENS!
SCORING
GENERATING DATA
DOWNLOADING DATA
WORKING WITH APIS
GETTING STARTED WITH DJANGO
USER ACCOUNTS
STYLING AND DEPLOYING AN APP
A
INSTALLING PYTHON
B
TEXT EDITORS
C
GETTING HELP
D
USING GIT FOR VERSION CONTROL
ACKNOWLEDGMENTS
This book would not have been possible without the wonderful and extremely professional staff at No Starch Press. Bill Pollock invited me to write an introductory book, and I deeply appreciate that original offer. Tyler Ortman helped shape my thinking in the early stages of drafting. Liz Chadwicks and Leslie Shens initial feedback on each chapter was invaluable, and Anne Marie Walker helped to clarify many parts of the book. Riley Hoffman answered every question I had about the process of assembling a complete book and patiently turned my work into a beautiful finished product.
Id like to thank Kenneth Love, the technical reviewer for Python Crash Course. I met Kenneth at PyCon one year, and his enthusiasm for the language and the Python community has been a constant source of professional inspiration ever since. Kenneth went beyond simple fact-checking and reviewed the book with the goal of helping beginning programmers develop a solid understanding of the Python language and programming in general. That said, any inaccuracies that remain are completely my own.
Id like to thank my father for introducing me to programming at a young age and for not being afraid that Id break his equipment. Id like to thank my wife, Erin, for supporting and encouraging me through the writing of this book, and Id like to thank my son, Ever, whose curiosity inspires me every single day.
INTRODUCTION
Every programmer has a story about how they learned to write their first program. I started learning as a child when my father was working for Digital Equipment Corporation, one of the pioneering companies of the modern computing era. I wrote my first program on a kit computer my dad had assembled in our basement. The computer consisted of nothing more than a bare motherboard connected to a keyboard without a case, and it had a bare cathode ray tube for a monitor. My initial program was a simple number guessing game, which looked something like this:
I'm thinking of a number! Try to guess the number I'm thinking of:
Too low! Guess again:
Too high! Guess again:
That's it! Would you like to play again? (yes/no) no
Thanks for playing!
Ill always remember how satisfied I felt watching my family play a game that I created and that worked as I intended it to.
That early experience had a lasting impact. There is real satisfaction in building something with a purpose, something that solves a problem. The software I write now meets a more significant need than my childhood efforts, but the sense of satisfaction I get from creating a program that works is still largely the same.