diff -r b459053192f1 -r b7c47307e510 getting_started_with_for.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/getting_started_with_for.rst Fri Sep 17 18:38:51 2010 +0530 @@ -0,0 +1,217 @@ +.. 3.2 LO: getting started with =for= (2) [anoop] +.. ----------------------------------------------- +.. * blocks in python +.. + (indentation) +.. * blocks in ipython +.. + ... prompt +.. + hitting enter +.. * =for= with a list +.. * =range= function + +============================= +Getting started with for loop +============================= + +{{{ show welcome slide }}} + +Hello and welcome to the tutorial getting started with ``for`` loop. + +{{{ switch to next slide, outline slide }}} + +In this tutorial we will see ``for`` loops in python, and also cover +the basics of indenting code in python. + +{{{ switch to next slide, about whitespaces }}} + +In Python whitespace is significant, and the blocks are visually +separated rather than using braces or any other mechanisms for +defining blocks. And by this method Python forces the programmers to +stick on to one way of writing or beautifying the code rather than +debating over where to place the braces. This way it produces uniform +code than obscure or unreadable code. + +A block may be defined by a suitable indentation level which can be +either be a tab or few spaces. And the best practice is to indent the +code using four spaces. + +Now let us move straight into ``for`` loop. + +{{{ switch to next slide, problem statement of exercise 1 }}} + +Write a for loop which iterates through a list of numbers and find the +square root of each number. Also make a new list with the square roots +and print it at the end. +:: + + numbers are 1369, 7225, 3364, 7056, 5625, 729, 7056, 576, 2916 + +For the problem, first we need to create a ``list`` of numbers and +then iterate over the list and find the square root of each element in +it. And let us create a script, rather than typing it out in the +interpreter itself. Create a script called list_roots.py and type the +following. + +{{{ open the text editor and paste the following code there }}} +:: + + numbers = [1369, 7225, 3364, 7056, 5625, 729, 7056, 576, 2916] + square_roots = [] + for each in numbers: + sq_root = sqrt(each) + print "Square root of", each, "is", sq_root + square_roots.append(sq_root) + print + print square_roots + +{{{ save the script }}} + +Now save the script, and run it from your IPython interpreter. I +assume that you have started your IPython interpreter using ``-pylab`` +option. + +Run the script as, +:: + + %run -i list_roots.py + +{{{ run the script }}} + +So that was easy! We didn't have to find the length of the string nor +address of each element of the list one by one. All what we did was +iterate over the list element by element and then use the element for +calculation. Note that here we used three variables. One the variable +``numbers``, which is a list, another one ``each``, which is the +element of list under consideration in each cycle of the ``for`` loop, +and then a variable ``sq_root`` for storing the square root in each +cycle of the ``for`` loop. The variable names can be chosen by you. + +{{{ show the script which was created }}} + +Note that three lines after ``for`` statement, are indented using four +spaces. + +{{{ highlight the threee lines after for statement }}} + +It means that those three lines are part of the for loop. And it is +called a block of statements. And the seventh line or the immediate +line after the third line in the ``for`` loop is not indented, + +{{{ highlight the seventh line - the line just after for loop }}} + +it means that it is not part of the ``for`` loop and the lines after +that doesn't fall in the scope of the ``for`` loop. Thus each block is +separated by the indentation level. Thus marking the importance of +white-spaces in Python. + +{{{ switch to the slide which shows the problem statement of the first +problem to be tried out }}} + +Now a question for you to try, from the given numbers make a list of +perfect squares and a list of those which are not. The numbers are, +:: + + 7225, 3268, 3364, 2966, 7056, 5625, 729, 5547, 7056, 576, 2916 + +{{{ switch to next slide, problem statement of second problem in +solved exercie}}} + +Now let us try a simple one, to print the square root of numbers in +the list. And this time let us do it right in the IPython +interpreter. + +{{{ switch focus to the IPython interpreter }}} + +So let us start with making a list. Type the following +:: + + numbers = [1369, 7225, 3364, 7056, 5625, 729, 7056, 576, 2916] + for each in numbers: + +and now you will notice that, as soon as you press the return key +after for statement, the prompt changes to four dots and the cursor is +not right after the four dots but there are four spaces from the +dots. The four dots tell you that you are inside a block. Now type the +rest of the ``for`` loop, +:: + + sq_root = sqrt(each) + print "Square root of", each, "is", sq_root + +Now we have finished the statements in the block, and still the +interpreter is showing four dots, which means you are still inside the +block. To exit from the block press return key or the enter key twice +without entering anything else. It printed the square root of each +number in the list, and that is executed in a ``for`` loop. + +Now, let us generate the multiplication table of 10 from one to +ten. But this time let us try it in the vanilla version of Python +interpreter. + +Start the vanilla version of Python interpreter by issuing the command +``python`` in your terminal. + +{{{ open the python interpreter in the terminal using the command +python to start the vanilla Python interpreter }}} + +Start with, +:: + + for i in range(1,11): + +and press enter once, and we will see that this time it shows four +dots, but the cursor is close to the dots, so we have to intend the +block. So enter four spaces there and then type the following +:: + + + print "10 *",i,"=",i*10 + +Now when we hit enter, we still see the four dots, to get out of the +block type enter once. + +Okay! so the main thing here we learned is how to use Python +interpreter and IPython interpreter to specify blocks. But while we +were generating the multiplication table we used something new, +``range()`` function. ``range()`` is an inbuilt function in Python +which can be used to generate a ``list`` of integers from a starting +range to an ending range. Note that the ending number that you specify +will not be included in the ``list``. + +Now, let us print all the odd numbers from 1 to 50. Let us do it in +our IPython interpreter for ease of use. + +{{{ switch focus to ipython interpreter }}} + +{{{ switch to next slide, problem statement of the next problem in +solved exercises }}} + +Print the list of odd numbers from 1 to 50. It will be better if +you can try it out yourself. + +It is a very trivial problem and can be solved as, +:: + + print range(1,51,2) + +This time we passed three parameters to ``range()`` function unlike +the previous case where we passed only two parameters. The first two +parameters are the same in both the cases. The first parameter is the +starting number of the sequence and the second parameter is the end of +the range. Note that the sequence doesn't include the ending +number. The third parameter is for stepping through the sequence. Here +we gave two which means we are skipping every alternate element. + +{{{ switch to next slide, recap slide }}} + +Thus we come to the end of this tutorial. We learned about blocks in +Python, indentation, blocks in IPython, for loop, iterating over a +list and then the ``range()`` function. + +{{{ switch to next slide, thank you slide }}} + +Thank you! + +.. Author: Anoop Jacob Thomas + Reviewer 1: + Reviewer 2: + External reviewer: