Solving problems with Python: Difference between revisions
Line 113: | Line 113: | ||
print mydata.readline() | print mydata.readline() | ||
prints a line from ''catalog.dat''. Subsequent readline()'s go through the file one line at a time. | prints a line from ''catalog.dat''. Subsequent readline()'s go through the file one line at a time. While | ||
for line in open('catalog.dat') | for line in open('catalog.dat') | ||
print line | print line | ||
prints | prints lines from the file one by one without reading it as a block. | ||
== Examples == | == Examples == |
Revision as of 06:20, 14 February 2013
Now with many useful tools in hand, let us see how to make them work together to solve problems.
Flow control
The if statement is fundamental to making decisions within a program. It works simply
x=0.1 y=10. z=0. if x > 0.: y = 1./x elif x < -1.: pass elif x == 0: print 'Cannot divide by zero.' exit() else: y = 1./x z = y
Notice that indentation (by any fixed number of spaces) is used to separate the functions within the statement, and that each branch is defined by a :. The end of a branch occurs when the indentation goes back to the previous level. Each decision is based on a logical boolean value such as (x > 0.), which is True when x is greater than 0. and False otherwise. Within the if processing, a pass is a way to do nothing, and an exit() leaves the entire program.
A while statement tests whether its argument is true, and sets up a loop that continues as long as it is. Program
flag = True x = 0. while flag: x = x + 1. if x > 10.: flag = False print x
increases x until it is 11. and then prints the value.
Loops such as this may include a try block. This enables handling an exception, such as in this program to calculate x2 with input from keyboard.
while True: try: x = int(raw_input("Please enter a number: ")) break except ValueError: print "Oops! That was no valid number. Try again..." y=x**2 print y
Here a break exits the loop from the try block unless an exception is thrown. A while statement can also test for something that is changed in the loop.
Functions
Within a Python program you can define your own functions. Here's one to take an angle in degrees and reduce it an angle between 0 and 360.
def map360(angle):
if (angle < 0.0): n = int(angle / 360.0) - 1 return (angle - float(n) * 360.0) elif (angle >= 360.0): n = int(angle / 360.0) return (angle - float(n) * 360.0) else: return (angle)
Functions may have any number of objects as arguments, of any data type. Once defined, you may use a function anywhere in a program.
Iteration
The while loop makes repeated passes through a block of code as long as a test condition is satisfied. This allows us to make sequential changes to achieve a desired outcome, such as evaluating a series until the error is acceptable, or fitting data until the fitting errors are minimized. Python also has several built-in ways to manage interation, and the most useful is the for loop.
idata = range(10) print idata fdata = [-1.] for x in idata: f = float(x)**2.0 fdata.append(f) print fdata
generates this output
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [-1.0, 0.0] [-1.0, 0.0, 1.0] [-1.0, 0.0, 1.0, 4.0] [-1.0, 0.0, 1.0, 4.0, 9.0] [-1.0, 0.0, 1.0, 4.0, 9.0, 16.0] [-1.0, 0.0, 1.0, 4.0, 9.0, 16.0, 25.0] [-1.0, 0.0, 1.0, 4.0, 9.0, 16.0, 25.0, 36.0] [-1.0, 0.0, 1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0] [-1.0, 0.0, 1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0] [-1.0, 0.0, 1.0, 4.0, 9.0, 16.0, 25.0, 36.0, 49.0, 64.0, 81.0]
In the first line, range(10) creates a list with values from 0 to 9 which is the first line of the output. We also made a floating point list with one value of -1. to start things off. The for loop interated the idata list, and for each element (now labeled x) we calculated x2.0 and appended it to the fdata floating point list. Inside the iterative loop we printed the list as it grew.
Lists and strings are iterable, and so are dictionaries and even files. An example of iterating a dictionary would be
messier = {'1' : 'planetary nebula', '2' : 'globular cluster', '51' : 'spiral galaxy' } for key in messier: if messier[key] == 'spiral galaxy': print key
which will print
51
The readline() function for a file iterates line by line through the file.
mydata = open('catalog.dat') print mydata.readline()
prints a line from catalog.dat. Subsequent readline()'s go through the file one line at a time. While
for line in open('catalog.dat') print line
prints lines from the file one by one without reading it as a block.
Examples
For examples of Python illustrating flow control, functions, and iteration, see the examples section.
Assignments
For the assigned homework to use these ideas, see the assignments section.