Transcription

A Practical Introduction toPython ProgrammingBrian HeinoldDepartment of Mathematics and Computer ScienceMount St. Mary’s University

ii 2012 Brian HeinoldLicensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License

ContentsIBasics11Getting Started1.1 Installing Python1.2 IDLE . . . . . . . .1.3 A first program .1.4 Typing things in .1.5 Getting input . . .1.6 Printing . . . . . .1.7 Variables . . . . .1.8 Exercises . . . . .234.333456679For loops2.1 Examples . . . . . . .2.2 The loop variable . .2.3 The range function2.4 A Trickier Example .2.5 Exercises . . . . . . .111113131415.Numbers3.1 Integers and Decimal Numbers3.2 Math Operators . . . . . . . . . . .3.3 Order of operations . . . . . . . .3.4 Random numbers . . . . . . . . .3.5 Math functions . . . . . . . . . . .3.6 Getting help from Python . . . .3.7 Using the Shell as a Calculator .3.8 Exercises . . . . . . . . . . . . . . .191919212121222223If statements4.1 A Simple Example . .4.2 Conditional operators4.3 Common Mistakes . .4.4 elif . . . . . . . . . . .4.5 Exercises . . . . . . . .272728282930.iii

iv5678CONTENTSMiscellaneous Topics I5.1 Counting . . . . . .5.2 Summing . . . . . .5.3 Swapping . . . . . .5.4 Flag variables . . .5.5 Maxes and mins . .5.6 Comments . . . . .5.7 Simple debugging5.8 Example programs5.9 Exercises . . . . . .Strings6.1 Basics . . . . . . . . . . . . . . . . . . . . . . . . .6.2 Concatenation and repetition . . . . . . . . .6.3 The in operator . . . . . . . . . . . . . . . . . .6.4 Indexing . . . . . . . . . . . . . . . . . . . . . . .6.5 Slices . . . . . . . . . . . . . . . . . . . . . . . . .6.6 Changing individual characters of a string6.7 Looping . . . . . . . . . . . . . . . . . . . . . . .6.8 String methods . . . . . . . . . . . . . . . . . .6.9 Escape characters . . . . . . . . . . . . . . . . .6.10 Examples . . . . . . . . . . . . . . . . . . . . . .6.11 Exercises . . . . . . . . . . . . . . . . . . . . . .Lists7.1 Basics . . . . . . . . . . .7.2 Similarities to strings7.3 Built-in functions . . .7.4 List methods . . . . . .7.5 Miscellaneous . . . . .7.6 Examples . . . . . . . .7.7 Exercises . . . . . . . .More with Lists8.1 Lists and the random module8.2 split . . . . . . . . . . . . . . . .8.3 join . . . . . . . . . . . . . . . . .8.4 List comprehensions . . . . . . .8.5 Using list comprehensions . . .8.6 Two-dimensional lists . . . . . .8.7 Exercises . . . . . . . . . . . . . 7585959606062.6565666768697072

CONTENTS9vWhile loops9.1 Examples . . . . . . . . . . . . . . . . . . .9.2 Infinite loops . . . . . . . . . . . . . . . . .9.3 The break statement . . . . . . . . . . .9.4 The else statement . . . . . . . . . . . . .9.5 The guessing game, more nicely done9.6 Exercises . . . . . . . . . . . . . . . . . . .10 Miscellaneous Topics II10.1 str, int, float, and list10.2 Booleans . . . . . . . . . . . . . . .10.3 Shortcuts . . . . . . . . . . . . . .10.4 Short-circuiting . . . . . . . . . .10.5 Continuation . . . . . . . . . . . .10.6 pass . . . . . . . . . . . . . . . . .10.7 String formatting . . . . . . . . .10.8 Nested loops . . . . . . . . . . . .10.9 Exercises . . . . . . . . . . . . . .75757878798083.8787899091919192939511 Dictionaries11.1 Basics . . . . . . . . . . . . . .11.2 Dictionary examples . . . .11.3 Working with dictionaries11.4 Counting words . . . . . . .11.5 Exercises . . . . . . . . . . .999910010110210412 Text Files12.1 Reading from files12.2 Writing to files . . .12.3 Examples . . . . . .12.4 Wordplay . . . . . .12.5 Exercises . . . . . .10910911011011111313 Functions13.1 Basics . . . . . . . . . . . . . . . . . . . . . . . . . .13.2 Arguments . . . . . . . . . . . . . . . . . . . . . .13.3 Returning values . . . . . . . . . . . . . . . . . .13.4 Default arguments and keyword arguments13.5 Local variables . . . . . . . . . . . . . . . . . . .13.6 Exercises . . . . . . . . . . . . . . . . . . . . . . .11911912012112212312514 Object-Oriented Programming14.1 Python is objected-oriented14.2 Creating your own classes .14.3 Inheritance . . . . . . . . . . .14.4 A playing-card example . .129129130132133.

viCONTENTS14.5 A Tic-tac-toe example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13614.6 Further topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13814.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138IIGraphics15 GUI Programming with Tkinter15.1 Basics . . . . . . . . . . . . . . .15.2 Labels . . . . . . . . . . . . . .15.3 grid . . . . . . . . . . . . . . .15.4 Entry boxes . . . . . . . . . . .15.5 Buttons . . . . . . . . . . . . .15.6 Global variables . . . . . . . .15.7 Tic-tac-toe . . . . . . . . . . . .141.14314314414514614614814916 GUI Programming II16.1 Frames . . . . . . . . . . . . . . . . . .16.2 Colors . . . . . . . . . . . . . . . . . .16.3 Images . . . . . . . . . . . . . . . . . .16.4 Canvases . . . . . . . . . . . . . . . .16.5 Check buttons and Radio buttons16.6 Text widget . . . . . . . . . . . . . .16.7 Scale widget . . . . . . . . . . . . .16.8 GUI Events . . . . . . . . . . . . . . .16.9 Event examples . . . . . . . . . . . .15515515615715815916016116216417 GUI Programming III17.1 Title bar . . . . . . . . . . . . . .17.2 Disabling things . . . . . . . . .17.3 Getting the state of a widget .17.4 Message boxes . . . . . . . . . .17.5 Destroying things . . . . . . . .17.6 Updating . . . . . . . . . . . . .17.7 Dialogs . . . . . . . . . . . . . .17.8 Menu bars . . . . . . . . . . . .17.9 New windows . . . . . . . . . .17.10 pack . . . . . . . . . . . . . . . .17.11 StringVar . . . . . . . . . . .17.12More with GUIs . . . . . . . . .169169169169170171171172174174175175176.18 Further Graphical Programming17718.1 Python 2 vs Python 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17718.2 The Python Imaging Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17918.3 Pygame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

CONTENTSIIIviiIntermediate Topics18319 Miscellaneous topics III19.1 Mutability and References . . . . . . . . . . . . . . . . . .19.2 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19.3 Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19.4 Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19.5 sorted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19.6 if-else operator . . . . . . . . . . . . . . . . . . . . . . .19.7 continue . . . . . . . . . . . . . . . . . . . . . . . . . . . .19.8 eval and exec . . . . . . . . . . . . . . . . . . . . . . . .19.9 enumerate and zip . . . . . . . . . . . . . . . . . . . .19.10 copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19.11More with strings . . . . . . . . . . . . . . . . . . . . . . . .19.12Miscellaneous tips and tricks . . . . . . . . . . . . . . . .19.13Running your Python programs on other 9620 Useful modules20.1 Importing modules . . . . . . . . . .20.2 Dates and times . . . . . . . . . . . . .20.3 Working with files and directories .20.4 Running and quitting programs . .20.5 Zip files . . . . . . . . . . . . . . . . . .20.6 Getting files from the internet . . . .20.7 Sound . . . . . . . . . . . . . . . . . . .20.8 Your own modules . . . . . . . . . . .19919920020220420420520520621 Regular expressions21.1 Introduction . .21.2 Syntax . . . . . .21.3 Summary . . . .21.4 Groups . . . . . .21.5 Other functions21.6 Examples . . . .20720720821221421421622 Math22.1 The math module . . . . . . . . . . .22.2 Scientific notation . . . . . . . . . . .22.3 Comparing floating point numbers22.4 Fractions . . . . . . . . . . . . . . . . .22.5 The decimal module . . . . . . . .22.6 Complex numbers . . . . . . . . . . .22.7 More with lists and arrays . . . . . .22.8 Random numbers . . . . . . . . . . .22.9 Miscellaneous topics . . . . . . . . . .219219220221221222224226226228.

viiiCONTENTS22.10Using the Python shell as a calculator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22923 Working with functions23.1 First-class functions . . . . . . . . . . . . . . . . . . . .23.2 Anonymous functions . . . . . . . . . . . . . . . . . . .23.3 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . .23.4 map, filter, reduce, and list comprehensions23.5 The operator module . . . . . . . . . . . . . . . . .23.6 More about function arguments . . . . . . . . . . . .23123123223323423523524 The itertools and collections modules24.1 Permutations and combinations . . . . . . . .24.2 Cartesian product . . . . . . . . . . . . . . . . .24.3 Grouping things . . . . . . . . . . . . . . . . . .24.4 Miscellaneous things from itertools . .24.5 Counting things . . . . . . . . . . . . . . . . . . .24.6 defaultdict . . . . . . . . . . . . . . . . . . .237237238239240241242.24524524624724725 Exceptions25.1 Basics . . . . . . . . . . . . . . . . . .25.2 Try/except/else . . . . . . .25.3 try/finally and with/as25.4 More with exceptions . . . . . . .Bibliography249Index249

PrefaceMy goal here is for something that is partly a tutorial and partly a reference book. I like howtutorials get you up and running quickly, but they can often be a little wordy and disorganized.Reference books contain a lot of good information, but they are often too terse, and they don’toften give you a sense of what is important. My aim here is for something in the spirit of a tutorialbut still useful as a reference. I summarize information in tables and give a lot of short exampleprograms. I also like to jump right into things and fill in background information as I go, ratherthan covering the background material first.This book started out as about 30 pages of notes for students in my introductory programming classat Mount St. Mary’s University. Most of these students have no prior programming experience, andthat has affected my approach. I leave out a lot of technical details and sometimes I oversimplifythings. Some of these details are filled in later in the book, though other details are never filled in.But this book is not designed to cover everything, and I recommend reading other books and thePython documentation to fill in the gaps.The style of programming in this book is geared towards the kinds of programming things I like todo—short programs, often of a mathematical nature, small utilities to make my life easier, and smallcomputer games. In fact, the things I cover in the book are the things that I have found most usefulor interesting in my programming experience, and this book serves partly to document those thingsfor myself. This book is not designed as a thorough preparation for a career in software engineering.Interested readers should progress from this book to a book that has more on computer science andthe design and organization of large programs.In terms of structuring a course around this book or learning on your own, the basis is most ofPart I. The first four chapters are critically important. Chapter 5 is useful, but not all of it is critical.Chapter 6 (strings) should be done before Chapter 7 (lists). Chapter 8 contains some more advancedlist topics. Much of this can be skipped, though it is all interesting and useful. In particular, thatchapter covers list comprehensions, which I use extensively later in the book. While you can getaway without using list comprehensions, they provide an elegant and efficient way of doing things.Chapter 9 (while loops) is important. Chapter 10 contains a bunch of miscellaneous topics, all ofwhich are useful, but many can be skipped if need be. The final four chapters of Part I are aboutdictionaries, text files, functions, and object-oriented programming.Part II is about graphics, mostly GUI programming with Tkinter. You can very quickly write somenice programs using Tkinter. For instance, Section 15.7 presents a 20-line working (though notix

xCONTENTSperfect) tic-tac-toe game. The final chapter of Part II covers a bit about the Python Imaging Library.Part III contains a lot of the fun and interesting things you can do with Python. If you are structuring a one-semester course around this book, you might want to pick a few topics in Part III to goover. This part of the book could also serve as a reference or as a place for interested and motivatedstudents to learn more. All of the topics in this part of the book are things that I have found usefulat one point or another.Though this book was designed to be used in an introductory programming course, it is also usefulfor those with prior programming experience looking to learn Python. If you are one of thosepeople, you should be able to breeze through the first several chapters. You should find Part II tobe a concise, but not superficial, treatment on GUI programming. Part III contains information onthe features of Python that allow you to accomplish big things with surprisingly little code.In preparing this book the Python documentation at www.python.org was indispensable. Thisbook was composed entirely in LATEX. There are a number of LATEXpackages, particularly listingsand hyperref, that were particulary helpful. LATEXcode from http://blog.miliauskas.lt/ helpedme get the listings package to nicely highlight the Python code.Listings for the longer programs are available at https://www.brianheinold.net/python/. Textfiles used in the text and exercises are available at I don’t have solutions available to the exercises here, but there is a separate set of a few hundredexercises and solutions at https://www.brianheinold.net/python/worked exercises.html.Please send comments, corrections, and suggestions to [email protected] updated March 18, 2022.

Part IBasics1

Chapter 1Getting StartedThis chapter will get you up and running with Python, from downloading it to writing simpleprograms.1.1Installing PythonGo to www.python.org and download the latest version of Python (version 3.5 as of this writing).It should be painless to install. If you have a Mac or Linux, you may already have Python on yourcomputer, though it may be an older version. If it is version 2.7 or earlier, then you should installthe latest version, as many of the programs in this book will not work correctly on older versions.1.2IDLEIDLE is a simple integrated development environment (IDE) that comes with Python. It’s a program that allows you to type in your programs and run them. There are other IDEs for Python, butfor now I would suggest sticking with IDLE as it is simple to use. You can find IDLE in the Python3.4 folder on your computer.When you first start IDLE, it starts up in the shell, which is an interactive window where you cantype in Python code and see the output in the same window. I often use the shell in place of mycalculator or to try out small pieces of code. But most of the time you will want to open up a newwindow and type the program in there.Note At least on Windows, if you click on a Python file on your desktop, your system will run theprogram, but not show the code, which is probably not what you want. Instead, if you right-clickon the file, there should be an option called Edit with Idle. To edit an existing Python file,3

4CHAPTER 1. GETTING STARTEDeither do that or start up IDLE and open the file through the File menu.Keyboard shortcuts The following keystrokes work in IDLE and can really speed up your work.1.3KeystrokeResultCTRL CCopy selected textCTRL XCut selected textCTRL VPasteCTRL ZUndo the last keystroke or group of keystrokesCTRL SHIFT ZRedo the last keystroke or group of keystrokesF5Run moduleA first programStart IDLE and open up a new window (choose New Window under the File Menu). Type in thefollowing program.temp eval(input( 'Enter a temperature in Celsius: '))print( 'In Fahrenheit, that is ', 9/5*temp 32)Then, under the Run menu, choose Run Module (or press F5). IDLE will ask you to save the file,and you should do so. Be sure to append .py to the filename as IDLE will not automatically appendit. This will tell IDLE to use colors to make your program easier to read.Once you’ve saved the program, it will run in the shell window. The program will ask you for atemperature. Type in 20 and press enter. The program’s output looks something like this:Enter a temperature in Celsius: 20In Fahrenheit, that is 68.0Let’s examine how the program does what it does. The first line asks the user to enter a temperature. The input function’s job is to ask the user to type something in and to capture what the usertypes. The part in quotes is the prompt that the user sees. It is called a string and it will appear tothe program’s user exactly as it appears in the code itself. The eval function is something we usehere, but it won’t be clear exactly why until later. So for now, just remember that we use it whenwe’re getting numerical input.We need to give a name to the value that the user enters so that the program can remember it anduse it in the second line. The name we use is temp and we use the equals sign to assign the user’svalue to temp.The second line uses the print function to print out the conversion. The part in quotes is anotherstring and will appear to your program’s user exactly as it appears in quotes here. The second

1.4. TYPING THINGS IN5argument to the print function is the calculation. Python will do the calculation and print out thenumerical result.This program may seem too short and simple to be of much use, but there are many websites thathave little utilities that do similar conversions, and their code is not much more complicated thanthe code here.A second programenters:Here is a program that computes the average of two numbers that the usernum1 eval(input( 'Enter the first number: '))num2 eval(input( 'Enter the second number: '))print( 'The average of the numbers you entered is ', (num1 num2)/2)For this program we need to get two numbers from the user. There are ways to do that in one line,but for now we’ll keep things simple. We get the numbers one at a time and give each numberits own name. The only other thing to note is the parentheses in the average calculation. Thisis because of the order of operations. All multiplications and divisions are performed before anyadditions and subtractions, so we have to use parentheses to get Python to do the addition first.1.4Typing things inCase Case matters. To Python, print, Print, and PRINT are all different things. For now, stickwith lowercase as most Python statements are in lowercase.Spaces Spaces matter at the beginning of lines, but not elsewhere. For example, the code belowwill not work.temp eval(input( 'Enter a temperature in Celsius: '))print( 'In Fahrenheit, that is ', 9/5*temp 32)Python uses indentation of lines for things we’ll learn about soon. On the other hand, spaces inmost other places don’t matter. For instance, the following lines have the same effect:print( 'Hello world! ')print ( 'Hello world! ')print( 'Hello world! ' )Basically, computers will only do what you tell them, and they often take things very literally.Python itself totally relies on things like the placement of commas and parentheses so it knowswhat’s what. It is not very good at figuring out what you mean, so you have to be precise. It willbe very frustrating at first, trying to get all of the parentheses and commas in the right places, butafter a while it will become more natural. Still, even after you’ve programmed for a long time, youwill still miss something. Fortunately, the Python interpreter is pretty good about helping you findyour mistakes.

61.5CHAPTER 1. GETTING STARTEDGetting inputThe input function is a simple way for your program to get information from people using yourprogram. Here is an example:name input( 'Enter your name: ')print( 'Hello, ', name)The basic structure isvariable name input(message to user)The above works for getting text from the user. To get numbers from the user to use in calculations,we need to do something extra. Here is an example:num eval(input( 'Enter a number: '))print( 'Your number squared: ', num*num)The eval function converts the text entered by the user into a number. One nice feature of this isyou can enter expressions, like 3*12 5, and eval will compute them for you.Note If you run your program and nothing seems to be happening, try pressing enter. There is abit of a glitch in IDLE that occasionally happens with input statements.1.6PrintingHere is a simple example:print( 'Hi there ')The print function requires parenthesis around its arguments. In the program above, its onlyargument is the string 'Hi there'. Anything inside quotes will (with a few exceptions) be printedexactly as it appears. In the following, the first statement will output 3 4, while the second willoutput 7.print( '3 4 ')print(3 4)To print several things at once, separate them by commas. Python will automatically insert spacesbetween them. Below is an example and the output it produces.print( 'The value of 3 4 is ', 3 4)print( 'A ', 1, 'XYZ ', 2)The value of 3 4 is 7A 1 XYZ 2

1.7. VARIABLES7Optional argumentsThere are two optional arguments to the print function. They are not overly important at thisstage of the game, so you can safely skip over this section, but they are useful for making youroutput look nice.sep Python will insert a space between each of the arguments of the print function. There is anoptional argument called sep, short for separator, that you can use to change that space to something else. For example, using sep ':' would separate the arguments by a colon and sep '##'would separate the arguments by two pound signs.One particularly useful possibility is to have nothing inside the quotes, as in sep ''. This says toput no separation between the arguments. Here is an example where sep is useful for getting theoutput to look nice:print ( 'The value of 3 4 is ', 3 4, '. ')print ( 'The value of 3 4 is ', 3 4, '. ', sep '')The value of 3 4 is 7 .The value of 3 4 is 7.end The print function will automatically advance to the next line. For instance, the followingwill print on two lines:print( 'On the first line ')print( 'On the second line ')On the first lineOn the second lineThere is an optional argument called end that you can use to keep the print function from advancing to the next line. Here is an example:print( 'On the first line ', end '')print( 'On the second line ')On the first lineOn the second lineOf course, this could be accomplished better with a single print, but we will see later that there areinteresting uses for the end argument.1.7VariablesLooking back at our first program, we see the use of a variable called temp:

8CHAPTER 1. GETTING STARTEDtemp eval(input( 'Enter a temperature in Celsius: '))print( 'In Fahrenheit, that is ', 9/5*temp 32)One of the major purposes of a variable is to remember a value from one part of a program so thatit can be used in another part of the program. In the case above, the variable temp stores the valuethat the user enters so that we can do a calculation with it in the next line.In the example below, we perform a calculation and need to use the result of the calculation inseveral places in the program. If we save the result of the calculation in a variable, then we onlyneed to do the calculation once. This also helps to make the program more readable.temp eval(input( 'Enter

Mar 18, 2022 · This chapter will get you up and running with Python, from downloading it to writing simple programs. 1.1 Installing Python Go towww.python.organd download the latest version of Python (version 3.5 as of this writing). It should be painless to install. If you have a Mac or Li