Giới thiệu sách Python: Python programming for teens

python programming for teens

Python programming for teens

Kenneth A.Lambert

 

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii
Chapter 1 Getting Started with Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Taking Care of Preliminaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Downloading and Installing Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
Launching and Working in the IDLE Shell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2
Obtaining Python Help. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3
Working with Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
Using Arithmetic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4
Working with Variables and Assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6
Using Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Using the math Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
Detecting Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
Working with Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
String Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12
The len, str, int, and float Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14
Input and Output Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
Indexing, Slicing, and Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
String Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
Working with Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
List Literals and Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
List Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Lists from Other Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
Lists and the random Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
Tuples as Immutable Lists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
vi

Working with Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Dictionary Literals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
Dictionary Methods and Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Chapter 2 Getting Started with Turtle Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Looking at the Turtle and Its World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Using Basic Movement Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Moving and Changing Direction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
Drawing a Square. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
Drawing an Equilateral Triangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Undoing, Clearing, and Resetting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
Setting and Examining the Turtle
s State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
The Pen Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
The Shape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
The Speed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Other Information About the Turtle
s State . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Working with Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
The Pen Color and the Background Color. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
How Computers Represent Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
Filled Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Drawing Circles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Drawing Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Using the Turtle
s Window and Canvas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Using a Configuration File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

Chapter 3 Control Structures: Sequencing, Iteration, and Selection . . . . . . . . . . 55
Repeating a Sequence of Statements: Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
The for Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
Nested Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
How the range Function Works with a for Loop . . . . . . . . . . . . . . . . . . . . . . . . .58
Loops with Strings, Lists, and Dictionaries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
Asking Questions: Boolean Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Boolean Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
Comparisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
Logical Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
Contents vii

Making Choices: Selection Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
The One-Way if Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
The Two-Way if Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
Probable Options with random.randint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
The Multiway if Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
Using Selection to Control Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
The while Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
Random Walks in Turtle Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

Chapter 4 Composing, Saving, and Running Programs. . . . . . . . . . . . . . . . . . . . . 75
Exploring the Program Development Process. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Composing a Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Program Edits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
Program Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
Docstrings and End-of-Line Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
import Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
The main Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
The if main ==
__main__Idiom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
The mainloop Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
Running a Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Using a Turtle Graphics Configuration File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
Running a Program from an IDLE Window. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
Running a Program from a Terminal Window . . . . . . . . . . . . . . . . . . . . . . . . . . .83
Using the sys Module and Command-Line Arguments. . . . . . . . . . . . . . . . . . . . .83
Looking Behind the Scenes: How Python Runs Programs . . . . . . . . . . . . . . . . . . . . 85
Computer Hardware. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
Computer Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

Chapter 5 Defining Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Basic Elements of Function Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Circles and Squares. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
Docstrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
The return Statement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .96
Testing Functions in a Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
Optional, Default, and Keyword Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
viii Contents

Functions as General Solutions to Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Regular Polygons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
Functions as Arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
Building Functions with lambda Expressions. . . . . . . . . . . . . . . . . . . . . . . . . . . .102
Modules as Libraries of Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Math Topic: Graphing Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Functions in Mathematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103
Graphing Functions in Turtle Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
Refactoring a Program with Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Simplifying the Code for the Random Walk . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
The atEdge Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108
The randomForward Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
The randomTurn Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
Another Version of the Random Walk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

Chapter 6 User Interaction with the Mouse and the Keyboard . . . . . . . . . . . . . 115
Using Dialog-Based Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Input Dialogs in Turtle Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
Input Dialogs for Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
Input Dialogs for Numbers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
Responding to Mouse Events. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Drawing Line Segments with Mouse Clicks . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
How Event Handling Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120
Freehand Drawing by Dragging the Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . .120
Responding to Keyboard Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
The onkey Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123
A Complete Retro Drawing Program. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124
Using Module Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Initializing and Using Module Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125
Tracking the History of Turtle Positions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126
Using Two Mouse Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Adding an Event-Handling Function for the Right Button. . . . . . . . . . . . . . . . .128
Example 1: Simple Drawing with Random Colors . . . . . . . . . . . . . . . . . . . . . . . .129
Example 2: Drawing and Moving. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
Example 3: Drawing, Moving, and Random Colors. . . . . . . . . . . . . . . . . . . . . . .130
Example 4: Dialogs for Shape Properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
Contents ix

Chapter 7 Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Recursive Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Top-Down Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135
Recursive Function Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
Recursive Function Call Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139
Recursive Functions and Loops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
Infinite Recursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142
Sequential Search of a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143
Binary Search of a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145
Recursive Patterns in Art: Abstract Painting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Design of the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148
Performance Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148
The drawRectangle Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149
The mondrian Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149
The main Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151
The tracer and update Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152
Recursive Patterns in Nature: Fractals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
What the Program Does. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155
Design of the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155
Code for the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

Chapter 8 Objects and Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Objects, Methods, and Classes in Turtle Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . 160
The Turtle Class and Its Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
A Random Walk with Several Turtles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
A New Class: RegularPolygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Design: Determine the Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163
Design: Determine the Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .164
Implementation: The Structure of a Class Definition . . . . . . . . . . . . . . . . . . . . .166
Implementation: The __init__ Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168
Implementation: Showing and Hiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .169
Implementation: Getting and Setting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170
Implementation: Translation, Scaling, and Rotation . . . . . . . . . . . . . . . . . . . . .171
Inheritance: Squares and Hexagons as Subclasses. . . . . . . . . . . . . . . . . . . . . . . .171
New Class: Menu Item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Design: Determine the Attributes and Behavior. . . . . . . . . . . . . . . . . . . . . . . . .173
Implementation and Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173
x Contents

Response to User Events, Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176
Whose Click Is It Anyway? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176
A Grid Class for the Game of Tic-Tac-Toe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Modeling a Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179
Defining a Class for a Tic-Tac-Toe Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181
Using Class Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .182
Stretching the Shape of a Turtle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183
Making a Move. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183
Defining a Class for the Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184
Laying Out the Grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184
Defining Methods for the Game Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185
Coding the Main Application Module. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188

Chapter 9 Animations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Animating the Turtle with a Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Using the ontimer Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190
Scheduling Actions at Regular Intervals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190
Animating Many Turtles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
What Is an Animated Turtle?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193
Using an Animated Turtle in a Shell Session . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
Defining the AnimatedTurtle Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
Sleepy and Speedy as Animated Turtles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197
Creating Custom Turtle Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Creating Simple Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199
Creating Compound Shapes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

Appendix A Turtle Graphics Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Turtle Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Turtle Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
Pen Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207
Turtle State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209
Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
Functions Related to the Window and Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Window Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211
Input Functions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
Contents xi

Appendix B Solutions to Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Exercise Solutions for Chapter 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Exercise 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213
Exercise 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213
Exercise Solutions for Chapter 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Exercise 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213
Exercise 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
Exercise Solutions for Chapter 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Exercise 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
Exercise 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
Exercise Solutions for Chapter 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Exercise 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
Exercise 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217
Exercise Solutions for Chapter 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Exercise 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218
Exercise 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218
Exercise Solutions for Chapter 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Exercise 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
Exercise 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
Exercise Solutions for Chapter 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
Exercise 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
Exercise 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
Exercise Solutions for Chapter 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Exercise 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
Exercise 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
Exercise Solutions for Chapter 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Exercise 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229
Exercise 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233