advanced-features-functions.rst
changeset 144 476ea1730aee
child 145 81a74c2aef61
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/advanced-features-functions.rst	Thu Sep 16 12:10:16 2010 +0530
@@ -0,0 +1,179 @@
+========
+ Script
+========
+
+{{{ show the welcome slide }}}
+
+Welcome to this tutorial on manipulating strings. 
+
+{{{ show the slide with outline }}} 
+
+In this tutorial we shall learn to manipulate strings, specifically
+slicing and reversing them, or replacing characters, converting from
+upper to lower case and vice-versa 
+
+#[punch: reversed returns an iterator. should we still teach it?]
+
+We have an ``ipython`` shell open, in which we are going to work,
+through out this session. 
+
+Let us consider a simple problem, and learn how to slice strings and
+get sub-strings. 
+
+Let's say the variable ``week`` has the list of the names of the days
+of the week. 
+
+::
+
+    week = ["sun", "mon", "tue", "wed", "thu", "fri", "sat"]
+
+
+Now given a string ``s``, we should be able to check if the string is a
+valid name of a day of the week or not. 
+
+::
+
+    s = saturday
+
+
+``s`` could be in any of the forms --- sat, saturday, Sat, Saturday,
+SAT, SATURDAY. We shall now be solving the problem only for the forms,
+sat and saturday. We shall solve it for the other forms, at the end of
+the tutorial. 
+
+{{{ show these forms in a slide }}}
+
+So, we need to check if the first three characters of the given string
+exists in the variable ``week``. 
+
+As, with any of the string data-types, strings can be sliced into
+sub-strings. To get the first three characters of s, we say, 
+
+::
+
+    s[0:3]
+
+Note that, we are slicing the string from the index 0 to index 3, 3
+not included. 
+
+As we already know, the last element of the string can be accessed
+using ``s[-1]``.  
+
+%%1%% Pause the video here and obtain the sub-string excluding the
+first and last characters from the string. 
+
+::
+
+    s[1:-1]
+
+gives the a substring of s, without the first and the last
+characters. 
+
+::
+
+    s = saturday
+    s[:3]
+
+Now, we just check if that substring is present in the variable
+``week``. 
+
+::
+
+    s[:3] in week          
+
+Let us now consider the problem of finding out if a given string is
+palindromic or not. First of all, a palindromic string is a string
+that remains same even when it has been reversed.
+
+Let the string given be ``malayalam``.
+
+::
+
+    s = "malayalam"
+
+Now, we need to compare this string with it's reverse. 
+
+Again, we will use a technique common to all sequence data-types,
+[::-1]
+
+So, we obtain the reverse of s, by simply saying, 
+
+::
+
+    s[::-1]
+
+Now, to check if the string is ``s`` is palindromic, we say
+::
+
+    s == s[::-1]
+
+As, expected, we get ``True``. 
+
+Now, if the string we are given is ``Malayalam`` instead of
+``malayalam``, the above comparison would return a False. So, we will
+have to convert the string to all lower case or all upper case, before
+comparing. Python provides methods, ``s.lower`` and ``s.upper`` to
+achieve this. 
+
+Let's try it out. 
+::
+
+   s = "Malayalam"
+
+   s.upper()
+
+   s
+
+   s.lower()
+
+   s.lower() == s.lower()[::-1]
+   
+Note that these methods, do not change the original string, but return
+a new string.
+
+a%% %% Pause the video here, and finish the problem of checking if
+``s`` is a valid name of a day of the week and then resume the
+video. Change the solution to this problem, to include forms like,
+SAT, SATURDAY, Saturday and Sat. 
+
+::
+
+    s.lower()[:3] in week
+
+We just convert any input string to lower case and then check if it is
+present in the list ``week``. 
+
+Now, let us consider another problem. We often encounter e-mail id's
+which have @ and periods replaced with text, something like
+info[at]fossee[dot]in. We now wish to get back proper e-mail
+addresses.  
+
+Let's say the variable email has the email address. 
+::
+
+   email = "info[at]fossee[dot]in"
+
+Now, we first replace the ``[at]`` with the ``@``, using the replace
+method of strings. 
+::
+
+   email = email.replace("[at]", "@")
+   print email
+
+%%1%% Pause the video here and replace the ``[dot]`` with ``.`` and then
+resume the video. 
+
+::
+
+   email = email.replace("[dot]", ".")        
+   print email
+
+
+That brings us to the end of the tutorial. 
+
+{{{ show summary slide }}}
+
+In this tutorial, we have learnt how to get substrings, reverse
+strings and a few useful methods, namely upper, lower and replace. 
+
+Thank You!