Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

primer_on_scientific_programming_with_python

.pdf
Скачиваний:
2
Добавлен:
07.04.2024
Размер:
11.31 Mб
Скачать

List of Exercises

xxiii

 

 

Exercise 6.4 Fit a polynomial to data . . . . . . . . . . . . . . . . . . . . . . 323 Exercise 6.5 Read acceleration data and find velocities . . . . . . . 324 Exercise 6.6 Read acceleration data and plot velocities . . . . . . . 325 Exercise 6.7 Find velocity from GPS coordinates . . . . . . . . . . . . 325 Exercise 6.8 Make a dictionary from a table . . . . . . . . . . . . . . . . 325 Exercise 6.9 Explore syntax di erences: lists vs. dictionaries . . 326 Exercise 6.10 Improve the program from Ch. 6.2.4 . . . . . . . . . . . . 326 Exercise 6.11 Interpret output from a program . . . . . . . . . . . . . . . 326 Exercise 6.12 Make a dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 Exercise 6.13 Make a nested dictionary . . . . . . . . . . . . . . . . . . . . . 327 Exercise 6.14 Make a nested dictionary from a file . . . . . . . . . . . . 327 Exercise 6.15 Compute the area of a triangle . . . . . . . . . . . . . . . . 327 Exercise 6.16 Compare data structures for polynomials . . . . . . . 327 Exercise 6.17 Compute the derivative of a polynomial . . . . . . . . 327 Exercise 6.18 Generalize the program from Ch. 6.2.6 . . . . . . . . . 328 Exercise 6.19 Write function data to file . . . . . . . . . . . . . . . . . . . . 328 Exercise 6.20 Specify functions on the command line . . . . . . . . . 328 Exercise 6.21 Interpret function specifications . . . . . . . . . . . . . . . . 329 Exercise 6.22 Compare average temperatures in two cities . . . . . 330 Exercise 6.23 Compare average temperatures in many cities . . . 330 Exercise 6.24 Plot the temperature in a city, 1995-today . . . . . . 331 Exercise 6.25 Plot temperatures in several cities . . . . . . . . . . . . . 332 Exercise 6.26 Try Word or OpenO ce to write a program . . . . . 332 Exercise 6.27 Evaluate objects in a boolean context . . . . . . . . . . 332 Exercise 6.28 Generate an HTML report . . . . . . . . . . . . . . . . . . . . 333 Exercise 6.29 Fit a polynomial to experimental data . . . . . . . . . . 333 Exercise 6.30 Interpret an HTML file with rainfall data . . . . . . . 334 Exercise 6.31 Generate an HTML report with figures . . . . . . . . . 334 Exercise 7.1 Make a function class . . . . . . . . . . . . . . . . . . . . . . . . 397 Exercise 7.2 Make a very simple class . . . . . . . . . . . . . . . . . . . . . . 398 Exercise 7.3 Extend the class from Ch. 7.2.1 . . . . . . . . . . . . . . . . 398 Exercise 7.4 Make classes for a rectangle and a triangle . . . . . . 398 Exercise 7.5 Make a class for straight lines . . . . . . . . . . . . . . . . . 398 Exercise 7.6 Improve the constructor in Exer. 7.5 . . . . . . . . . . . 398 Exercise 7.7 Make a class for quadratic functions . . . . . . . . . . . . 399 Exercise 7.8 Make a class for linear springs . . . . . . . . . . . . . . . . . 399 Exercise 7.9 Implement Lagrange’s interpolation formula . . . . . 399 Exercise 7.10 A very simple “Hello, World!” class . . . . . . . . . . . . . 400 Exercise 7.11 Use special methods in Exer. 7.1 . . . . . . . . . . . . . . . 400 Exercise 7.12 Modify a class for numerical di erentiation . . . . . . 400 Exercise 7.13 Make a class for nonlinear springs . . . . . . . . . . . . . . 401 Exercise 7.14 Extend the class from Ch. 7.2.1 . . . . . . . . . . . . . . . . 401 Exercise 7.15 Implement a class for numerical di erentation . . . 401 Exercise 7.16 Verify a program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 Exercise 7.17 Test methods for numerical di erentation . . . . . . . 402

xxiv

List of Exercises

 

 

Exercise 7.18 Make a class for summation of series . . . . . . . . . . . 403 Exercise 7.19 Apply the di erentiation class from Ch. 7.3.2 . . . . 403 Exercise 7.20 Use classes for computing inverse functions . . . . . . 404 Exercise 7.21 Vectorize a class for numerical integration . . . . . . . 404 Exercise 7.22 Speed up repeated integral calculations . . . . . . . . . 404 Exercise 7.23 Solve a simple ODE in two ways . . . . . . . . . . . . . . . 405 Exercise 7.24 Solve the ODE (B.36) . . . . . . . . . . . . . . . . . . . . . . . . 405 Exercise 7.25 Simulate a falling or rising body in a fluid . . . . . . . 405 Exercise 7.26 Check the solution’s limit in Exer. 7.25 . . . . . . . . . 407 Exercise 7.27 Implement the modified Euler method; function . 407 Exercise 7.28 Implement the modified Euler method; class . . . . . 408 Exercise 7.29 Increase the flexibility in Exer. 7.28 . . . . . . . . . . . . 408 Exercise 7.30 Solve an ODE specified on the command line . . . . 408 Exercise 7.31 Apply a polynomial class . . . . . . . . . . . . . . . . . . . . . 409 Exercise 7.32 Find a bug in a class for polynomials . . . . . . . . . . . 409 Exercise 7.33 Subtraction of polynomials . . . . . . . . . . . . . . . . . . . . 409 Exercise 7.34 Represent a polynomial by an array . . . . . . . . . . . . 409 Exercise 7.35 Vectorize a class for polynomials . . . . . . . . . . . . . . . 409 Exercise 7.36 Use a dict to hold polynomial coe cients; add . . . 410 Exercise 7.37 Use a dict to hold polynomial coe cients; mul . . . 410 Exercise 7.38 Extend class Vec2D to work with lists/tuples . . . . 410 Exercise 7.39 Use NumPy arrays in class Vec2D . . . . . . . . . . . . . 411 Exercise 7.40 Use classes in the program from Ch. 6.6.2 . . . . . . . 411 Exercise 7.41 Use a class in Exer. 6.28 . . . . . . . . . . . . . . . . . . . . . . 412 Exercise 7.42 Apply the class from Exer. 7.41 interactively . . . . 413 Exercise 7.43 Find the optimal production for a company . . . . . 413 Exercise 7.44 Extend the program from Exer. 7.43 . . . . . . . . . . . 415 Exercise 7.45 Model the economy of fishing . . . . . . . . . . . . . . . . . . 415 Exercise 8.1 Flip a coin N times . . . . . . . . . . . . . . . . . . . . . . . . . . 463 Exercise 8.2 Compute a probability . . . . . . . . . . . . . . . . . . . . . . . . 463 Exercise 8.3 Choose random colors . . . . . . . . . . . . . . . . . . . . . . . . 463 Exercise 8.4 Draw balls from a hat . . . . . . . . . . . . . . . . . . . . . . . . 464 Exercise 8.5 Probabilities of rolling dice . . . . . . . . . . . . . . . . . . . . 464 Exercise 8.6 Estimate the probability in a dice game . . . . . . . . . 464 Exercise 8.7 Decide if a dice game is fair . . . . . . . . . . . . . . . . . . . 464 Exercise 8.8 Adjust the game in Exer. 8.7 . . . . . . . . . . . . . . . . . . 464 Exercise 8.9 Probabilities of throwing two dice . . . . . . . . . . . . . . 465 Exercise 8.10 Compute the probability of drawing balls . . . . . . . 465 Exercise 8.11 Compute the probability of hands of cards . . . . . . 465 Exercise 8.12 Play with vectorized boolean expressions . . . . . . . . 466 Exercise 8.13 Vectorize the program from Exer. 8.1 . . . . . . . . . . . 466 Exercise 8.14 Vectorize the code in Exer. 8.2 . . . . . . . . . . . . . . . . 466 Exercise 8.15 Throw dice and compute a small probability . . . . 466 Exercise 8.16 Di erence equation for random numbers . . . . . . . . 466 Exercise 8.17 Make a class for drawing balls from a hat . . . . . . . 467

List of Exercises

xxv

 

 

Exercise 8.18 Independent vs. dependent random numbers . . . . 467 Exercise 8.19 Compute the probability of flipping a coin . . . . . . 467 Exercise 8.20 Extend Exer. 8.19 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 Exercise 8.21 Simulate the problems in Exer. 3.26 . . . . . . . . . . . . 468 Exercise 8.22 Simulate a poker game . . . . . . . . . . . . . . . . . . . . . . . 468 Exercise 8.23 Write a non-vectorized version of a code . . . . . . . . 469 Exercise 8.24 Estimate growth in a simulation model . . . . . . . . . 469 Exercise 8.25 Investigate guessing strategies for Ch. 8.4.1 . . . . . 469 Exercise 8.26 Make a vectorized solution to Exer. 8.7 . . . . . . . . . 469 Exercise 8.27 Compare two playing strategies . . . . . . . . . . . . . . . . 470 Exercise 8.28 Solve Exercise 8.27 with di erent no. of dice . . . . . 470 Exercise 8.29 Extend Exercise 8.28 . . . . . . . . . . . . . . . . . . . . . . . . . 470 Exercise 8.30 Compute π by a Monte Carlo method . . . . . . . . . . 470 Exercise 8.31 Do a variant of Exer. 8.30 . . . . . . . . . . . . . . . . . . . . . 470 Exercise 8.32 Compute π by a random sum . . . . . . . . . . . . . . . . . 470 Exercise 8.33 1D random walk with drift . . . . . . . . . . . . . . . . . . . . 470 Exercise 8.34 1D random walk until a point is hit . . . . . . . . . . . . 471 Exercise 8.35 Make a class for 2D random walk . . . . . . . . . . . . . . 471 Exercise 8.36 Vectorize the class code from Exer. 8.35 . . . . . . . . 471 Exercise 8.37 2D random walk with walls; scalar version . . . . . . 472 Exercise 8.38 2D random walk with walls; vectorized version . . 472 Exercise 8.39 Simulate the mixture of gas molecules . . . . . . . . . . 472 Exercise 8.40 Simulate the mixture of gas molecules . . . . . . . . . . 473 Exercise 8.41 Guess beer brands . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 Exercise 8.42 Simulate stock prices . . . . . . . . . . . . . . . . . . . . . . . . . 473 Exercise 8.43 Compute with option prices in finance . . . . . . . . . . 474 Exercise 8.44 Compute velocity and acceleration . . . . . . . . . . . . . 475 Exercise 8.45 Numerical di erentiation of noisy signals . . . . . . . . 475 Exercise 8.46 Model the noise in the data in Exer. 8.44 . . . . . . . 476 Exercise 8.47 Reduce the noise in Exer. 8.44 . . . . . . . . . . . . . . . . . 477 Exercise 8.48 Find the expected waiting time in tra c lights . . 477 Exercise 9.1 Demonstrate the magic of inheritance . . . . . . . . . . 546 Exercise 9.2 Inherit from classes in Ch. 9.1 . . . . . . . . . . . . . . . . . 546 Exercise 9.3 Inherit more from classes in Ch. 9.1 . . . . . . . . . . . . 547 Exercise 9.4 Reverse the class hierarchy from Ch. 9.1 . . . . . . . . 547 Exercise 9.5 Superand subclass for a point . . . . . . . . . . . . . . . . 547 Exercise 9.6 Modify a function class by subclassing . . . . . . . . . . 547 Exercise 9.7 Explore the accuracy of di erence formulas . . . . . . 548 Exercise 9.8 Implement a subclass . . . . . . . . . . . . . . . . . . . . . . . . . 548 Exercise 9.9 Make classes for numerical di erentiation . . . . . . . 548 Exercise 9.10 Implement a new subclass for di erentiation . . . . . 548 Exercise 9.11 Understand if a class can be used recursively . . . . 549 Exercise 9.12 Represent people by a class hierarchy . . . . . . . . . . . 549 Exercise 9.13 Add a new class in a class hierarchy . . . . . . . . . . . . 550 Exercise 9.14 Change the user interface of a class hierarchy . . . . 550

xxvi

 

List of Exercises

Exercise 9.15

Compute convergence rates of numerical

 

 

integration methods . . . . . . . . . . . . . . . . . . . . . . . . . .

550

Exercise 9.16

Add common functionality in a class hierarchy . .

551

Exercise 9.17

Make a class hierarchy for root finding . . . . . . . . . .

552

Exercise 9.18

Use the ODESolver hierarchy to solve a simple

 

 

ODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

552

Exercise 9.19

Use the 4th-order Runge-Kutta on (B.34) . . . . . . .

552

Exercise 9.20

Solve an ODE until constant solution . . . . . . . . . . .

552

Exercise 9.21

Use classes in Exer. 9.20 . . . . . . . . . . . . . . . . . . . . . .

553

Exercise 9.22

Scale away parameters in Exer. 9.20 . . . . . . . . . . . .

553

Exercise 9.23

Compare ODE methods . . . . . . . . . . . . . . . . . . . . . .

553

Exercise 9.24

Solve two coupled ODEs for radioactive decay . . .

554

Exercise 9.25

Compare methods for solving the ODE (B.36) . . .

554

Exercise 9.26

Code a 2nd-order Runge-Kutta method; function

554

Exercise 9.27

Code a 2nd-order Runge-Kutta method; class . . .

555

Exercise 9.28

Implement a midpoint method for ODEs . . . . . . . .

555

Exercise 9.29

Implement a modified Euler method for ODEs . . .

555

Exercise 9.30

Improve the implementation in Exer. 7.25 . . . . . . .

555

Exercise 9.31

Visualize the di erent forces in Exer. 9.30 . . . . . . .

556

Exercise 9.32

Find the body’s position in Exer. 9.30 . . . . . . . . . .

556

Exercise 9.33

Compare methods for solving (B.37)–(B.38) . . . . .

556

Exercise 9.34

Add the e ect of air resistance on a ball . . . . . . . .

557

Exercise 9.35

Make a class for drawing an arrow . . . . . . . . . . . . .

557

Exercise 9.36

Make a class for drawing a person . . . . . . . . . . . . . .

557

Exercise 9.37

Animate a person with waving hands . . . . . . . . . . .

558

Exercise 9.38

Make a class for drawing a car . . . . . . . . . . . . . . . . .

558

Exercise 9.39

Make a car roll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

558

Exercise 9.40

Make a class for di erentiating noisy data . . . . . . .

558

Exercise 9.41

Find local and global extrema of a function . . . . .

559

Exercise 9.42

Improve the accuracy in Exer. 9.41 . . . . . . . . . . . . .

560

Exercise 9.43

Make a calculus calculator class . . . . . . . . . . . . . . . .

561

Exercise 9.44

Extend Exer. 9.43 . . . . . . . . . . . . . . . . . . . . . . . . . . . .

561

Exercise 9.45

Formulate a 2nd-order ODE as a system . . . . . . . .

562

Exercise 9.46

Solve the system in Exer. 9.45 in a special case . .

563

Exercise 9.47

Enhance the code from Exer. 9.46 . . . . . . . . . . . . . .

563

Exercise 9.48

Make a tool for analyzing oscillatory solutions . . .

565

Exercise 9.49

Replace functions by class in Exer. 9.46 . . . . . . . . .

566

Exercise 9.50

Allow flexible choice of functions in Exer. 9.49 . . .

569

Exercise 9.51

Use the modules from Exer. 9.49 and 9.50 . . . . . . .

570

Exercise 9.52

Use the modules from Exer. 9.49 and 9.50 . . . . . . .

571

Exercise A.1

Interpolate a discrete function . . . . . . . . . . . . . . . . .

599

Exercise A.2

Study a function for di erent parameter values . .

599

Exercise A.3

Study a function and its derivative . . . . . . . . . . . . .

600

Exercise A.4

Use the Trapezoidal method . . . . . . . . . . . . . . . . . . .

600

Exercise A.5

Compute a sequence of integrals . . . . . . . . . . . . . . .

601

List of Exercises

xxvii

 

 

Exercise A.6 Use the Trapezoidal method . . . . . . . . . . . . . . . . . . . 601 Exercise A.7 Trigonometric integrals . . . . . . . . . . . . . . . . . . . . . . . 602 Exercise A.8 Plot functions and their derivatives . . . . . . . . . . . . 602 Exercise A.9 Use the Trapezoidal method . . . . . . . . . . . . . . . . . . . 603 Exercise B.1 Solve a nonhomogeneous linear ODE . . . . . . . . . . . 621 Exercise B.2 Solve a nonlinear ODE . . . . . . . . . . . . . . . . . . . . . . . 621 Exercise B.3 Solve an ODE for y(x) . . . . . . . . . . . . . . . . . . . . . . . 621 Exercise B.4 Experience instability of an ODE . . . . . . . . . . . . . . 622 Exercise B.5 Solve an ODE for the arc length . . . . . . . . . . . . . . . 622 Exercise B.6 Solve an ODE with time-varying growth . . . . . . . . 622 Exercise B.7 Solve an ODE for emptying a tank . . . . . . . . . . . . . 623 Exercise B.8 Solve an ODE system for an electric circuit . . . . . 623 Exercise C.1 Use a w function with a step . . . . . . . . . . . . . . . . . . 649 Exercise C.2 Make a callback function in Exercise C.1 . . . . . . . . 649 Exercise C.3 Improve input to the simulation program . . . . . . . 650

Computing with Formulas

1

 

 

 

Our first examples on computer programming involve programs that evaluate mathematical formulas. You will learn how to write and run a Python program, how to work with variables, how to compute with mathematical functions such as ex and sin x, and how to use Python for interactive calculations.

We assume that you are somewhat familiar with computers so that you know what files and folders1 are, how you move between folders, how you change file and folder names, and how you write text and save it in a file.

All the program examples associated with this chapter can be found as files in the folder src/formulas. We refer to the preface for how to download the folder tree src containing all the program files for this book.

1.1 The First Programming Encounter: A Formula

The first formula we shall consider concerns the vertical motion of a ball thrown up in the air. From Newton’s second law of motion one can set up a mathematical model for the motion of the ball and find that the vertical position of the ball, called y, varies with time t according to the following formula2:

y(t) = v0t −

1

 

2 gt2 .

(1.1)

1 Another frequent word for folder is directory.

2This formula neglects air resistance, which is usually small unless v0 is large – see Exercise 1.10.

1

2

1 Computing with Formulas

 

 

Here, v0 is the initial velocity of the ball, g is the acceleration of gravity, and t is time. Observe that the y axis is chosen such that the ball starts at y = 0 when t = 0.

To get an overview of the time it takes for the ball to move upwards and return to y = 0 again, we can look for solutions to the equation y = 0:

v0t −

1

gt2 = t(v0

1

gt) = 0 : t = 0 or t = 2v0

/g .

2

2

That is, the ball returns after 2v0/g seconds, and it is therefore reasonable to restrict the interest of (1.1) to t [0, 2v0/g].

1.1.1 Using a Program as a Calculator

Our first program will evaluate (1.1) for a specific choice of v0, g, and t. Choosing v0 = 5 m/s and g = 9.81 m/s2 makes the ball come back after t = 2v0/g ≈ 1 s. This means that we are basically interested in the time interval [0, 1]. Say we want to compute the height of the ball at time t = 0.6 s. From (1.1) we have

y = 5 · 0.6 − 12 · 9.81 · 0.62

This arithmetic expression can be evaluated and its value can be printed by a very simple one-line Python program:

print 5*0.6 - 0.5*9.81*0.6**2

The four standard arithmetic operators are written as +, -, *, and / in Python and most other computer languages. The exponentiation employs a double asterisk notation in Python, e.g., 0.62 is written as

0.6**2.

Our task now is to create the program and run it, and this will be described next.

1.1.2 About Programs and Programming

A computer program is just a sequence of instructions to the computer, written in a computer language. Most computer languages look somewhat similar to English, but they are very much simpler. The number of words and associated instructions is very limited, so to perform a complicated operation we must combine a large number of di erent types of instructions. The program text, containing the sequence of instructions, is stored in one or more files. The computer can only do exactly what the program tells the computer to do.

1.1 The First Programming Encounter: A Formula

3

 

 

Another perception of the word “program” is a file that can be run (“double-clicked”) to perform a task. Sometimes this is a file with textual instructions (which is the case with Python), and sometimes this file is a translation of all the program text to a more e cient and computer-friendly language that is quite di cult to read for a human. All the programs in this chapter consist of short text stored in a single file. Other programs that you have used frequently, for instance Firefox or Internet Explorer for reading web pages, consist of program text distributed over a large number of files, written by a large number of people over many years. One single file contains the machine-e cient translation of the whole program, and this is normally the file that you “double-click” on when starting the program. In general, the word “program” means either this single file or the collection of files with textual instructions.

Programming is obviously about writing programs, but this process is more than writing the correct instructions in a file. First, we must understand how a problem can be solved by giving a sequence of instructions to the computer. This is usually the most di cult thing with programming. Second, we must express this sequence of instructions correctly in a computer language and store the corresponding text in a file (the program). Third, we must run the program, check the validity of the results, and usually enter a fourth phase where errors in the program must be found and corrected. Mastering this process requires a lot of training, which implies making a large number of programs (exercises in this book, for instance) and getting the programs to work.

1.1.3 Tools for Writing Programs

Since programs consist of plain text, we need to write this text with the help of another program that can store the text in a file. You have most likely extensive experience with writing text on a computer, but for writing your own programs you need special programs, called editors, which preserve exactly the characters you type. The widespread word processors, Microsoft Word being a primary example3, are aimed at producing nice-looking reports. These programs format the text and are not good tools for writing your own programs, even though they can save the document in a pure text format. Spaces are often important in Python programs, and editors for plain text give you complete control of the spaces and all other characters in the program file.

3Other examples are OpenO ce, TextEdit, iWork Pages, and BBEdit. Chapter 6.1.3 gives some insight into why such programs are not suitable for writing your own Python programs.

4

1 Computing with Formulas

 

 

Emacs, XEmacs, and Vim are popular editors for writing programs on Linux or Unix systems, including Mac4 computers. On Windows we recommend Notepad++ or the Window versions of Emacs or Vim. None of these programs are part of a standard Windows installation.

A special editor for Python programs comes with the Python software. This editor is called Idle and is usually installed under the name idle (or idle-python) on Linux/Unix and Mac. On Windows, it is reachable from the Python entry in the Start menu. Idle has a gentle learning curve, but is mainly restricted to writing Python programs. Completely general editors, such as Emacs and Vim, have a steeper learning curve and can be used for any text files, including reports in student projects.

1.1.4 Using Idle to Write the Program

Let us explain in detail how we can use Idle to write our one-line program from Chapter 1.1.1. Idle may not become your favorite editor for writing Python programs, yet we recommend to follow the steps below to get in touch with Idle and try it out. You can simply replace the Idle instructions by similar actions in your favorite editor, Emacs for instance.

First, create a folder where your Python programs can be located. Here we choose a folder name py1st under your home folder (note that the third character is the number 1, not the letter l – the name reflects your 1st try of Python). To write and run Python programs, you will need a terminal window on Linux/Unix or Mac, sometimes called a console window, or a DOS window on Windows. Launch such a window and use the cd (change directory) command to move to the py1st folder. If you have not made the folder with a graphical file & folder manager you must create the folder by the command mkdir py1st (mkdir stands for make directory).

The next step is to start Idle. This can be done by writing idle& (Linux) or start idle (Windows) in the terminal window. Alternatively, you can launch Idle from the Start menu on Windows. Figure 1.1 displays a terminal window where we create the folder, move to the folder, and start Idle5.

If a window now appears on the screen, with “Python Shell” in the title bar of the window, go to its File menu and choose New Window.

4On Mac, you may want to download a more “Mac-like” editor such as the Really Simple Text program.

5The ampersand after idle is Linux specific. On Windows you have to write start idle instead. The ampersand postfix or the start prefix makes it possible to continue with other commands in the terminal window while the program, here Idle, is running. This is important for program testing where we often do a lot of edit- and-run cycles, which means that we frequently switch between the editor and the terminal window.

1.1 The First Programming Encounter: A Formula

5

 

 

Fig. 1.1 A terminal window on a Linux/Unix/Mac machine where we create a folder (mkdir), move to the folder (cd), and start Idle.

The window that now pops up is the Idle editor (having the window name “Untitled”). Move the cursor inside this window and write the line

print 5*0.6 - 0.5*9.81*0.6**2

followed by pressing the Return key. The Idle window looks as in Figure 1.2.

Fig. 1.2 An Idle editor window containing our first one-line program.

Your program is now in the Idle editor, but before you can run it, the program text must be saved in a file. Choose File and then Save As. As usual, such a command launches a new window where you can fill in the name of the file where the program is to be stored. And as always, you must first check that you are in the right folder, or directory which is Idle’s word for the same thing. The upper line in the file dialog window contains the folder name. Clicking on the bar to the right (after the directory/folder name), gives a possibility to move upwards in the folder hierarchy, and clicking on the folder icon to the right of the bar, moves just one folder upwards. To go down in the folder tree, you simply double-click a folder icon in the main window of this dialog. You must now navigate to the py1st folder under your home folder. If you started Idle from the terminal window, there