Python/Program Flow and Logicals

From ECLR
Revision as of 15:30, 9 October 2013 by Jb (talk | contribs)
Jump to: navigation, search

Preliminaries

One essential thing to understand when programming in Python is correct indenting of code is essential. The Python programming language was designed with readability in mind, and as a result forces you to indent code blocks, e.g.

  • while and for loops
  • if, elif, else constructs
  • functions

The indent for each block must be the same, the Python programming language also requires you to mark the start of a block with a colon. So where MATLAB used end to mark the end of a block of code, Python uses a change in indent. Other than this, simple Python programmes aren't dissimilar to those in MATLAB.

For example, the simplest case of an if conditional statement in Python would look something like this

if condition:
   statement1
   statement2
   ...

where the code in lines statement1, statement2, ... is executed only if condition is true. Sharp sighted readers might spot another difference to MATLAB, in Python there is no need to add a semicolon at the end of a line to suppress output.

The condition can be built up using relational and logical operators. Relational operators in Python are similar to those in MATLAB, e.g. == tests for equality, > and >= test for greater than and greater than or equal to respectively. The main difference is that!= tests for inequality in Python, compared to ~= in MATLAB. Relational operators return boolean values of either True or False.

And Python's logical operators are and, or and not, which are hopefully self explanatory.

The if functionality can be expanded using else as follows

if condition:
   statement1
   statement2
   ...
else:
   statement1a
   statement2a
   ...

where statement1, statement2, ... is executed if condition is true, and statement1a, statement2a, ... is executed if condition is false. Note that the code block after the else starts with a colon, and this code block is also indented.

Finally, the most general form of this programming construct introduces the elif keyword (in contrast to elseif in MATLAB) to give

if condition1:
   statement1
   statement2
   ...
elif condition2:
   statement1a
   statement2a
   ...
   ...
   ...
elif conditionN:
   statement1b
   statement2b
   ...
else:
   statement1c
   statement2c
   ...

Like MATLAB, Python has while and for loops. Unconditional for loops iterate over a list of values

for CounterVariable in ListOfValues:
   statement1
   statement2
   ...

and repeat for as many times as there are elements in the ListOfValues, each time assigning the next element in the list to the CounterVariable. The code block associated with the loop is identified by a colon and indenting as described above.

There are various ways of creating a Python list. The range function can be used to create sequences of numbers with a defined start, stop and step value. For example to create a list containing the 4 values [1 4 7 10] use range(1,3,11), noting that the stop value is not included in the list, i.e. range(1,3,10) would produce only the numbers [1 4 7].

Python lists can also be created using a sequence of values separated by commas within square brackets, e.g. MyList = [1.0, "hello", 1] creates a list called MyList containing 3 values, a floating point number 1.0, the string hello and an integer 1. This example demonstrates that Python lists are general purpose containers, and the elements don't have to be the same class.

To add: Python equivalent of break and continue.

Conditional while loops are identified with the while keyword, so

while condition:
   statement1
   statement2
   ...

will repeatedly execute the code block for as long as condition is true.

for

We now look at the Python equivalents of the MATLAB code discussed in Program_Flow_and_Logicals, for brevity a description of the mathematics and the algorithm are not repeated here. When vector e is known in advance, the MATLAB code is

  T=size(e,1);
  y=zeros(T,1);
  y0=phi0/(1-phi1);
  y(1)=phi0+phi1*y0+e(1);
  for i=2:T
    y(i)=phi0+phi1*y(i-1)+e(i);
  end

A naive Python equivalent is

T=len(e)
y=[0.]*T
y0=phi0/(1-phi1)
y[0]=phi0+phi1*y0+e[0]
for i in range(1,T):
   y[i]=phi0+phi1*y[i-1]+e[i]

if else

while