Cosmetic changes; added more subsections to chapter 2; new syntax (==).
diff --git a/Doc/tut.tex b/Doc/tut.tex
index 889274f..178bd5c 100644
--- a/Doc/tut.tex
+++ b/Doc/tut.tex
@@ -77,17 +77,17 @@
 built in, such as flexible arrays and dictionaries that would cost you
 days to implement efficiently in C.  Because of its more general data
 types Python is applicable to a much larger problem domain than {\em
-Awk} or even {\em Perl}, yet most simple things are at least as easy
-in Python as in those languages.
+Awk} or even {\em Perl}, yet many things are at least as easy in
+Python as in those languages.
 
 Python allows you to split up your program in modules that can be
 reused in other Python programs.  It comes with a large collection of
-standard modules that you can use as the basis of your programs ---
-or as examples to start learning to program in Python.  There are also
-built-in modules that provide things like file I/O, system calls, and
-even a generic interface to window systems (STDWIN).
+standard modules that you can use as the basis of your programs --- or
+as examples to start learning to program in Python.  There are also
+built-in modules that provide things like file I/O, system calls,
+sockets, and even a generic interface to window systems (STDWIN).
 
-Python is an interpreted language, which saves you considerable time
+Python is an interpreted language, which can save you considerable time
 during program development because no compilation and linking is
 necessary.  The interpreter can be used interactively, which makes it
 easy to experiment with features of the language, to write throw-away
@@ -116,12 +116,15 @@
 programs to libraries that may only be available in binary form (such
 as a vendor-specific graphics library).  Once you are really hooked,
 you can link the Python interpreter into an application written in C
-and use it as an extension or command language.
+and use it as an extension or command language for that application.
+
+By the way, the language is named after the BBC show ``Monty
+Python's Flying Circus'' and has nothing to do with nasty reptiles...
 
 \section{Where From Here}
 
 Now that you are all excited about Python, you'll want to examine it
-in some more detail.  Since the best introduction to a language is
+in some more detail.  Since the best way to learn a language is
 using it, you are invited here to do so.
 
 In the next chapter, the mechanics of using the interpreter are
@@ -140,16 +143,21 @@
 
 \chapter{Using the Python Interpreter}
 
+\section{Invoking the Interpreter}
+
 The Python interpreter is usually installed as {\tt /usr/local/python}
 on those machines where it is available; putting {\tt /usr/local} in
 your {\UNIX} shell's search path makes it possible to start it by
 typing the command
+
 \bcode\begin{verbatim}
 python
 \end{verbatim}\ecode
+%
 to the shell.  Since the choice of the directory where the interpreter
 lives is an installation option, other places are possible; check with
-your local Python guru or system administrator.
+your local Python guru or system administrator.  (E.g., {\tt
+/usr/local/bin/python} is a popular alternative location.)
 
 The interpreter operates somewhat like the {\UNIX} shell: when called
 with standard input connected to a tty device, it reads and executes
@@ -157,6 +165,13 @@
 a file as standard input, it reads and executes a {\em script} from
 that file.
 
+A third way of starting the interpreter is
+``{\tt python -c command [arg] ...}'', which
+executes the statement(s) in {\tt command}, analogous to the shell's
+{\tt -c} option.  Since Python statements often contain spaces or other
+characters that are special to the shell, it is best to quote {\tt
+command} in its entirety with double quotes.
+
 Note that there is a difference between ``{\tt python file}'' and
 ``{\tt python $<$file}''.  In the latter case, input requests from the
 program, such as calls to {\tt input()} and {\tt raw\_input()}, are
@@ -166,15 +181,20 @@
 usually what you want) they are satisfied from whatever file or device
 is connected to standard input of the Python interpreter.
 
-A third possibility is ``{\tt python -c command [arg] ...}'', which
-executes the statement(s) in {\tt command}, analogous to the shell's
-{\tt -c} option.  Usually {\tt command} will contain spaces or other
-characters that are special to the shell, so it is best to quote it.
+\subsection{Argument Passing}
 
-When available, the script name and additional arguments thereafter
-are passed to the script in the variable {\tt sys.argv}, which is a
-list of strings.
-When {\tt -c command} is used, {\tt sys.argv} is set to {\tt '-c'}.
+When known to the interpreter, the script name and additional
+arguments thereafter are passed to the script in the variable {\tt
+sys.argv}, which is a list of strings.  Its length is at least one;
+when no script and no arguments are given, {\tt sys.argv[0]} is an
+empty string.  When the script name is given as {\tt '-'} (meaning
+standard input), {\tt sys.argv[0]} is set to {\tt '-'}.  When {\tt -c
+command} is used, {\tt sys.argv[0]} is set to {\tt '-c'}.  Options
+found after {\tt -c command} are not consumed by the Python
+interpreter's option processing but left in {\tt sys.argv} for the
+command to handle.
+
+\subsection{Interactive Mode}
 
 When commands are read from a tty, the interpreter is said to be in
 {\em interactive\ mode}.  In this mode it prompts for the next command
@@ -184,9 +204,24 @@
 at the primary prompt causes the interpreter to exit with a zero exit
 status.
 
-When an error occurs in interactive mode, the interpreter prints a
-message and a stack trace and returns to the primary prompt; with
-input from a file, it exits with a nonzero exit status after printing
+The interpreter prints a welcome message stating its version number
+and a copyright notice before printing the first prompt, e.g.:
+
+\bcode\begin{verbatim}
+python
+Python 0.9.5 (Jan  2 1992).
+Copyright 1990, 1991, 1992 Stichting Mathematisch Centrum, Amsterdam
+>>>
+\end{verbatim}\ecode
+
+\section{The Interpreter and its Environment}
+
+\subsection{Error Handling}
+
+When an error occurs, the interpreter prints an error
+message and a stack trace.  In interactive mode, it then returns to
+the primary prompt; when input came from a file, it exits with a
+nonzero exit status after printing
 the stack trace.  (Exceptions handled by an {\tt except} clause in a
 {\tt try} statement are not errors in this context.)  Some errors are
 unconditionally fatal and cause an exit with a nonzero exit; this
@@ -195,46 +230,60 @@
 normal output from the executed commands is written to standard
 output.
 
-Typing an interrupt (normally Control-C or DEL) to the primary or
-secondary prompt cancels the input and returns to the primary prompt.
-Typing an interrupt while a command is being executed raises the {\tt
+Typing the interrupt character (usually Control-C or DEL) to the
+primary or secondary prompt cancels the input and returns to the
+primary prompt.%
+\footnote{
+	A problem with the GNU Readline package may prevent this.
+}
+Typing an interrupt while a command is executing raises the {\tt
 KeyboardInterrupt} exception, which may be handled by a {\tt try}
 statement.
 
-When a module named
-{\tt foo}
-is imported, the interpreter searches for a file named
-{\tt foo.py}
-in a list of directories specified by the environment variable
-{\tt PYTHONPATH}.
-It has the same syntax as the {\UNIX} shell variable
-{\tt PATH},
-i.e., a list of colon-separated directory names.
-When
-{\tt PYTHONPATH}
-is not set, an installation-dependent default path is used, usually
-{\tt .:/usr/local/lib/python}.
-(Modules are really searched in the list of directories given by the
-variable {\tt sys.path} which is initialized from {\tt PYTHONPATH} or
-from the installation-dependent default.  See the section on Standard
-Modules later.)
+\subsection{The Module Search Path}
 
-As an important speed-up of the start-up time for short programs, if a
-file called {\tt foo.pyc} exists in the directory where {\tt foo.py}
-is found, this is assumed to contain an already-``compiled'' version
-of the module {\tt foo}.  The last modification time of {\tt foo.py}
-is recorded in {\tt foo.pyc}, and the file is ignored if these don't
-match.  Whenever {\tt foo.py} is successfully compiled, an attempt is
-made to write the compiled version to {\tt foo.pyc}.
+When a module named {\tt foo} is imported, the interpreter searches
+for a file named {\tt foo.py} in the list of directories specified by
+the environment variable {\tt PYTHONPATH}.  It has the same syntax as
+the {\UNIX} shell variable {\tt PATH}, i.e., a list of colon-separated
+directory names.  When {\tt PYTHONPATH} is not set, an
+installation-dependent default path is used, usually {\tt
+.:/usr/local/lib/python}.
+
+Actually, modules are searched in the list of directories given by the
+variable {\tt sys.path} which is initialized from {\tt PYTHONPATH} or
+the installation-dependent default.  This allows Python programs that
+know what they're doing to modify or replace the module search path.
+See the section on Standard Modules later.
+
+\subsection{``Compiled'' Python files}
+
+As an important speed-up of the start-up time for short programs that
+use a lot of standard modules, if a file called {\tt foo.pyc} exists
+in the directory where {\tt foo.py} is found, this is assumed to
+contain an already-``compiled'' version of the module {\tt foo}.  The
+modification time of the version of {\tt foo.py} used to create {\tt
+foo.pyc} is recorded in {\tt foo.pyc}, and the file is ignored if
+these don't match.
+
+Whenever {\tt foo.py} is successfully compiled, an attempt is made to
+write the compiled version to {\tt foo.pyc}.  It is not an error if
+this attempt fails; if for any reason the file is not written
+completely, the resulting {\tt foo.pyc} file will be recognized as
+invalid and thus ignored later.
+
+\subsection{Executable Python scripts}
 
 On BSD'ish {\UNIX} systems, Python scripts can be made directly
 executable, like shell scripts, by putting the line
+
 \bcode\begin{verbatim}
 #! /usr/local/python
 \end{verbatim}\ecode
+%
 (assuming that's the name of the interpreter) at the beginning of the
-script and giving the file an executable mode.  (The {\tt \#!} must be
-the first two characters of the file.)
+script and giving the file an executable mode.  The {\tt \#!} must be
+the first two characters of the file.
 
 \section{Interactive Input Editing and History Substitution}
 
@@ -251,6 +300,8 @@
 happen, or if \verb/^P/ is echoed, you can skip the rest of this
 section.
 
+\subsection{Line Editing}
+
 If supported, input line editing is active whenever the interpreter
 prints a primary or secondary prompt.  The current line can be edited
 using the conventional Emacs control characters.  The most important
@@ -262,6 +313,8 @@
 string.  C-underscore undoes the last change you made; it can be
 repeated for cumulative effect.
 
+\subsection{History Substitution}
+
 History substitution works as follows.  All non-empty input lines
 issued are saved in a history buffer, and when a new prompt is given
 you are positioned on a new line at the bottom of this buffer.  C-P
@@ -271,17 +324,30 @@
 key passes the current line to the interpreter.  C-R starts an
 incremental reverse search; C-S starts a forward search.
 
+\subsection{Key Bindings}
+
 The key bindings and some other parameters of the Readline library can
 be customized by placing commands in an initialization file called
 {\tt \$HOME/.inputrc}.  Key bindings have the form
+
 \bcode\begin{verbatim}
 key-name: function-name
 \end{verbatim}\ecode
+%
+or
+
+\bcode\begin{verbatim}
+"string": function-name
+\end{verbatim}\ecode
+%
 and options can be set with
+
 \bcode\begin{verbatim}
 set option-name value
 \end{verbatim}\ecode
-Example:
+%
+For example:
+
 \bcode\begin{verbatim}
 # I prefer vi-style editing:
 set editing-mode vi
@@ -289,59 +355,75 @@
 set horizontal-scroll-mode On
 # Rebind some keys:
 Meta-h: backward-kill-word
-Control-u: universal-argument
+"\C-u": universal-argument
+"\C-x\C-r": re-read-init-file
 \end{verbatim}\ecode
+%
 Note that the default binding for TAB in Python is to insert a TAB
 instead of Readline's default filename completion function.  If you
 insist, you can override this by putting
+
 \bcode\begin{verbatim}
 TAB: complete
 \end{verbatim}\ecode
+%
 in your {\tt \$HOME/.inputrc}.  (Of course, this makes it hard to type
-indented continuation lines.)
+indented continuation lines...)
+
+\subsection{Commentary}
 
 This facility is an enormous step forward compared to previous
 versions of the interpreter; however, some wishes are left: It would
 be nice if the proper indentation were suggested on continuation lines
 (the parser knows if an indent token is required next).  The
 completion mechanism might use the interpreter's symbol table.  A
-function to check (or even suggest) matching parentheses, quotes etc.
+command to check (or even suggest) matching parentheses, quotes etc.
 would also be useful.
 
 \chapter{An Informal Introduction to Python}
 
 In the following examples, input and output are distinguished by the
-presence or absence of prompts ({\tt >>>} and {\tt ...}): to repeat the
-example, you must type everything after the prompt, when the prompt
-appears;
-lines that do not begin with a prompt are output from the interpreter.
+presence or absence of prompts ({\tt >>>} and {\tt ...}): to repeat
+the example, you must type everything after the prompt, when the
+prompt appears; lines that do not begin with a prompt are output from
+the interpreter.%
+\footnote{
+	I'd prefer to use different fonts to distinguish input
+	from output, but the amount of LaTeX hacking that would require
+	is currently beyond my ability.
+}
 Note that a secondary prompt on a line by itself in an example means
 you must type a blank line; this is used to end a multi-line command.
 
 \section{Using Python as a Calculator}
 
 Let's try some simple Python commands.  Start the interpreter and wait
-for the primary prompt, {\tt >>>}.
+for the primary prompt, {\tt >>>}.  (It shouldn't take long.)
+
+\subsection{Numbers}
 
 The interpreter acts as a simple calculator: you can type an
 expression at it and it will write the value.  Expression syntax is
 straightforward: the operators {\tt +}, {\tt -}, {\tt *} and {\tt /}
-work just as in most other languages (e.g., Pascal or C); parentheses
+work just like in most other languages (e.g., Pascal or C); parentheses
 can be used for grouping.  For example:
+
 \bcode\begin{verbatim}
 >>> # This is a comment
 >>> 2+2
 4
 >>> 
->>> (50-5+5*6+25)/4
-25
+>>> (50-5*6)/4
+5
 >>> # Division truncates towards zero:
 >>> 7/3
 2
 >>> 
 \end{verbatim}\ecode
-As in C, the equal sign ({\tt =}) is used to assign a value to a
+%
+Like in C, the equal sign ({\tt =}) is used to assign a value to a
 variable.  The value of an assignment is not written:
+
 \bcode\begin{verbatim}
 >>> width = 20
 >>> height = 5*9
@@ -349,21 +431,31 @@
 900
 >>> 
 \end{verbatim}\ecode
+%
 A value can be assigned to several variables simultaneously:
+
 \bcode\begin{verbatim}
 >>> # Zero x, y and z
 >>> x = y = z = 0
 >>>
 \end{verbatim}\ecode
+%
 There is full support for floating point; operators with mixed type
 operands convert the integer operand to floating point:
+
 \bcode\begin{verbatim}
 >>> 4 * 2.5 / 3.3
 3.0303030303
+>>> 7.0 / 2
+3.5
 >>> 
 \end{verbatim}\ecode
+
+\subsection{Strings}
+
 Besides numbers, Python can also manipulate strings, enclosed in
 single quotes:
+
 \bcode\begin{verbatim}
 >>> 'foo bar'
 'foo bar'
@@ -371,14 +463,16 @@
 'doesn\'t'
 >>> 
 \end{verbatim}\ecode
-Strings are written
-the same way as they are typed for input:
-inside quotes and with quotes and other funny characters escaped by
-backslashes, to show the precise value.  (There is also a way to write
-strings without quotes and escapes.)
+%
+Strings are written the same way as they are typed for input: inside
+quotes and with quotes and other funny characters escaped by
+backslashes, to show the precise value.  (The {\tt print} statement,
+described later, can be used to write strings without quotes or
+escapes.)
 
 Strings can be concatenated (glued together) with the {\tt +}
 operator, and repeated with {\tt *}:
+
 \bcode\begin{verbatim}
 >>> word = 'Help' + 'A'
 >>> word
@@ -387,12 +481,14 @@
 '<HelpAHelpAHelpAHelpAHelpA>'
 >>> 
 \end{verbatim}\ecode
-Strings can be subscripted; as in C, the first character of a string
-has subscript 0.
+%
+Strings can be subscripted (indexed); like in C, the first character of
+a string has subscript (index) 0.
 
 There is no separate character type; a character is simply a string of
-size one.  As in Icon, substrings can be specified with the {\em
-slice} notation: two subscripts (indices) separated by a colon.
+size one.  Like in Icon, substrings can be specified with the {\em
+slice} notation: two indices separated by a colon.
+
 \bcode\begin{verbatim}
 >>> word[4]
 'A'
@@ -400,19 +496,36 @@
 'He'
 >>> word[2:4]
 'lp'
->>> # Slice indices have useful defaults:
->>> word[:2]    # Take first two characters
+>>> 
+\end{verbatim}\ecode
+%
+Slice indices have useful defaults; an omitted first index defaults to
+zero, an omitted second index defaults to the size of the string being
+sliced.
+
+\bcode\begin{verbatim}
+>>> word[:2]    # The first two characters
 'He'
->>> word[2:]    # Drop first two characters
+>>> word[2:]    # All but the first two characters
 'lpA'
->>> # A useful invariant: s[:i] + s[i:] = s
+>>>
+\end{verbatim}\ecode
+%
+Here's a useful invariant of slice operations: \verb\s[:i] + s[i:]\
+equals \verb\s\.
+
+\bcode\begin{verbatim}
+>>> word[:2] + word[2:]
+'HelpA'
 >>> word[:3] + word[3:]
 'HelpA'
 >>> 
 \end{verbatim}\ecode
-Degenerate cases are handled gracefully: an index that is too large is
-replaced by the string size, an upper bound smaller than the lower
-bound returns an empty string.
+%
+Degenerate slice indices are handled gracefully: an index that is too
+large is replaced by the string size, an upper bound smaller than the
+lower bound returns an empty string.
+
 \bcode\begin{verbatim}
 >>> word[1:100]
 'elpA'
@@ -422,22 +535,47 @@
 ''
 >>> 
 \end{verbatim}\ecode
-Slice indices (but not simple subscripts) may be negative numbers, to
-start counting from the right.  For example:
+%
+Indices may be negative numbers, to start counting from the right.
+For example:
+
 \bcode\begin{verbatim}
->>> word[-2:]    # Take last two characters
+>>> word[-1]     # The last character
+'A'
+>>> word[-2]     # The last-but-one character
+'p'
+>>> word[-2:]    # The last two characters
 'pA'
->>> word[:-2]    # Drop last two characters
+>>> word[:-2]    # All but the last two characters
 'Hel'
->>> # But -0 does not count from the right!
->>> word[-0:]    # (since -0 equals 0)
+>>>
+\end{verbatim}\ecode
+%
+But note that -0 is really the same as 0, so it does not count from
+the right!
+
+\bcode\begin{verbatim}
+>>> word[-0]     # (since -0 equals 0)
+'H'
+>>>
+\end{verbatim}\ecode
+%
+Out-of-range negative slice indices are truncated, but don't try this
+for single-element (non-slice) indices:
+
+\bcode\begin{verbatim}
+>>> word[-100:]
 'HelpA'
+>>> word[-10]    # error
+Unhandled exception: IndexError: string index out of range
 >>> 
 \end{verbatim}\ecode
+%
 The best way to remember how slices work is to think of the indices as
 pointing {\em between} characters, with the left edge of the first
 character numbered 0.  Then the right edge of the last character of a
 string of {\tt n} characters has index {\tt n}, for example:
+
 \bcode\begin{verbatim}
  +---+---+---+---+---+ 
  | H | e | l | p | A |
@@ -445,40 +583,50 @@
  0   1   2   3   4   5 
 -5  -4  -3  -2  -1
 \end{verbatim}\ecode
+%
 The first row of numbers gives the position of the indices 0...5 in
 the string; the second row gives the corresponding negative indices.
-For nonnegative indices, the length of a slice is the difference of
-the indices, if both are within bounds, e.g., the length of {\tt
-word[1:3]} is 3--1 = 2.
+The slice from \verb\i\ to \verb\j\ consists of all characters between
+the edges labeled \verb\i\ and \verb\j\, respectively.
 
-The built-in function {\tt len()} computes the length of a string:
+For nonnegative indices, the length of a slice is the difference of
+the indices, if both are within bounds, e.g., the length of
+\verb\word[1:3]\ is 2.
+
+The built-in function {\tt len()} returns the length of a string:
+
 \bcode\begin{verbatim}
 >>> s = 'supercalifragilisticexpialidocious'
 >>> len(s)
 34
 >>> 
 \end{verbatim}\ecode
+
+\subsection{Lists}
+
 Python knows a number of {\em compound} data types, used to group
 together other values.  The most versatile is the {\em list}, which
-can be written as a list of comma-separated values between square
-brackets:
+can be written as a list of comma-separated values (items) between
+square brackets.  List items need not all have the same type.
+
 \bcode\begin{verbatim}
 >>> a = ['foo', 'bar', 100, 1234]
 >>> a
 ['foo', 'bar', 100, 1234]
 >>> 
 \end{verbatim}\ecode
-As for strings, list subscripts start at 0:
+%
+Like string indices, list indices start at 0, and lists can be sliced,
+concatenated and so on:
+
 \bcode\begin{verbatim}
 >>> a[0]
 'foo'
 >>> a[3]
 1234
->>> 
-\end{verbatim}\ecode
-Lists can be sliced, concatenated and so on, like strings:
-\bcode\begin{verbatim}
->>> a[1:3]
+>>> a[-2]
+100
+>>> a[1:-1]
 ['bar', 100]
 >>> a[:2] + ['bletch', 2*2]
 ['foo', 'bar', 'bletch', 4]
@@ -486,8 +634,10 @@
 ['foo', 'bar', 100, 'foo', 'bar', 100, 'foo', 'bar', 100, 'Boe!']
 >>> 
 \end{verbatim}\ecode
+%
 Unlike strings, which are {\em immutable}, it is possible to change
 individual elements of a list:
+
 \bcode\begin{verbatim}
 >>> a
 ['foo', 'bar', 100, 1234]
@@ -496,8 +646,10 @@
 ['foo', 'bar', 123, 1234]
 >>>
 \end{verbatim}\ecode
-Assignment to slices is also possible, and this may even change the size
+%
+Assignment to slices is also possible, and this can even change the size
 of the list:
+
 \bcode\begin{verbatim}
 >>> # Replace some items:
 >>> a[0:2] = [1, 12]
@@ -511,35 +663,49 @@
 >>> a[1:1] = ['bletch', 'xyzzy']
 >>> a
 [123, 'bletch', 'xyzzy', 1234]
+>>> a[:0] = a     # Insert (a copy of) itself at the beginning
+>>> a
+[123, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234]
 >>> 
 \end{verbatim}\ecode
+%
 The built-in function {\tt len()} also applies to lists:
+
 \bcode\begin{verbatim}
 >>> len(a)
-4
+8
 >>> 
 \end{verbatim}\ecode
+%
 It is possible to nest lists (create lists containing other lists),
 for example:
+
 \bcode\begin{verbatim}
->>> p = [1, [2, 3], 4]
+>>> q = [2, 3]
+>>> p = [1, q, 4]
 >>> len(p)
 3
 >>> p[1]
 [2, 3]
 >>> p[1][0]
 2
->>> p[1].append('xtra')
+>>> p[1].append('xtra')     # See section 5.1
 >>> p
 [1, [2, 3, 'xtra'], 4]
+>>> q
+[2, 3, 'xtra']
 >>>
 \end{verbatim}\ecode
+%
+Note that in the last example, {\tt p[1]} and {\tt q} really refer to
+the same object!  We'll come back to {\em object semantics} later.
 
 \section{First Steps Towards Programming}
 
 Of course, we can use Python for more complicated tasks than adding
 two and two together.  For instance, we can write an initial
 subsequence of the {\em Fibonacci} series as follows:
+
 \bcode\begin{verbatim}
 >>> # Fibonacci series:
 >>> # the sum of two elements defines the next
@@ -556,6 +722,7 @@
 8
 >>> 
 \end{verbatim}\ecode
+%
 This example introduces several new features.
 
 \begin{itemize}
@@ -569,19 +736,12 @@
 
 \item
 The {\tt while} loop executes as long as the condition (here: {\tt b <
-100}) remains true.  In Python, as in C, any non-zero integer value is
+100}) remains true.  In Python, like in C, any non-zero integer value is
 true; zero is false.  The condition may also be a string or list value,
 in fact any sequence; anything with a non-zero length is true, empty
 sequences are false.  The test used in the example is a simple
-comparison.  The standard comparison operators are written as {\tt <},
-{\tt >}, {\tt =}, {\tt <=}, {\tt >=} and {\tt <>}.%
-\footnote{
-	The ambiguity of using {\tt =}
-	for both assignment and equality is resolved by disallowing
-	unparenthesized conditions on the right hand side of assignments.
-	Parenthesized assignment is also disallowed; instead it is
-	interpreted as an equality test.
-}
+comparison.  The standard comparison operators are written the same as
+in C: {\tt <}, {\tt >}, {\tt ==}, {\tt <=}, {\tt >=} and {\tt !=}.
 
 \item
 The {\em body} of the loop is {\em indented}: indentation is Python's
@@ -601,13 +761,16 @@
 multiple expressions and strings.  Strings are written without quotes,
 and a space is inserted between items, so you can format things nicely,
 like this:
+
 \bcode\begin{verbatim}
 >>> i = 256*256
 >>> print 'The value of i is', i
 The value of i is 65536
 >>> 
 \end{verbatim}\ecode
+%
 A trailing comma avoids the newline after the output:
+
 \bcode\begin{verbatim}
 >>> a, b = 0, 1
 >>> while b < 1000:
@@ -617,6 +780,7 @@
 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
 >>> 
 \end{verbatim}\ecode
+%
 Note that the interpreter inserts a newline before it prints the next
 prompt if the last line was not completed.
 
@@ -632,18 +796,20 @@
 
 Perhaps the most well-known statement type is the {\tt if} statement.
 For example:
+
 \bcode\begin{verbatim}
 >>> if x < 0:
 ...      x = 0
 ...      print 'Negative changed to zero'
-... elif x = 0:
+... elif x == 0:
 ...      print 'Zero'
-... elif x = 1:
+... elif x == 1:
 ...      print 'Single'
 ... else:
 ...      print 'More'
 ... 
 \end{verbatim}\ecode
+%
 There can be zero or more {\tt elif} parts, and the {\tt else} part is
 optional.  The keyword `{\tt elif}' is short for `{\tt else if}', and is
 useful to avoid excessive indentation.  An {\tt if...elif...elif...}
@@ -654,11 +820,12 @@
 
 The {\tt for} statement in Python differs a bit from what you may be
 used to in C or Pascal.  Rather than always iterating over an
-arithmetic progression of numbers (as in Pascal), or leaving the user
+arithmetic progression of numbers (like in Pascal), or leaving the user
 completely free in the iteration test and step (as C), Python's {\tt
 for} statement iterates over the items of any sequence (e.g., a list
 or a string), in the order that they appear in the sequence.  For
 example (no pun intended):
+
 \bcode\begin{verbatim}
 >>> # Measure some strings:
 >>> a = ['cat', 'window', 'defenestrate']
@@ -670,11 +837,13 @@
 defenestrate 12
 >>> 
 \end{verbatim}\ecode
+%
 It is not safe to modify the sequence being iterated over in the loop
 (this can only happen for mutable sequence types, i.e., lists).  If
 you need to modify the list you are iterating over, e.g., duplicate
 selected items, you must iterate over a copy.  The slice notation
 makes this particularly convenient:
+
 \bcode\begin{verbatim}
 >>> for x in a[:]: # make a slice copy of the entire list
 ...    if len(x) > 6: a.insert(0, x)
@@ -689,15 +858,18 @@
 If you do need to iterate over a sequence of numbers, the built-in
 function {\tt range()} comes in handy.  It generates lists containing
 arithmetic progressions, e.g.:
+
 \bcode\begin{verbatim}
 >>> range(10)
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 >>> 
 \end{verbatim}\ecode
+%
 The given end point is never part of the generated list; {\tt range(10)}
 generates a list of 10 values, exactly the legal indices for items of a
 sequence of length 10.  It is possible to let the range start at another
 number, or to specify a different increment (even negative):
+
 \bcode\begin{verbatim}
 >>> range(5, 10)
 [5, 6, 7, 8, 9]
@@ -707,8 +879,10 @@
 [-10, -40, -70]
 >>> 
 \end{verbatim}\ecode
+%
 To iterate over the indices of a sequence, combine {\tt range()} and
 {\tt len()} as follows:
+
 \bcode\begin{verbatim}
 >>> a = ['Mary', 'had', 'a', 'little', 'lamb']
 >>> for i in range(len(a)):
@@ -735,10 +909,11 @@
 the condition becomes false (with {\tt while}), but not when the loop is
 terminated by a {\tt break} statement.  This is exemplified by the
 following loop, which searches for a list item of value 0:
+
 \bcode\begin{verbatim}
 >>> for n in range(2, 10):
 ...     for x in range(2, n):
-...         if n % x = 0:
+...         if n % x == 0:
 ...            print n, 'equals', x, '*', n/x
 ...            break
 ...     else:
@@ -761,6 +936,7 @@
 It can be used when a statement is required syntactically but the
 program requires no action.
 For example:
+
 \bcode\begin{verbatim}
 >>> while 1:
 ...       pass # Busy-wait for keyboard interrupt
@@ -771,6 +947,7 @@
 
 We can create a function that writes the Fibonacci series to an
 arbitrary boundary:
+
 \bcode\begin{verbatim}
 >>> def fib(n):    # write Fibonacci series up to n
 ...     a, b = 0, 1
@@ -783,6 +960,7 @@
 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
 >>> 
 \end{verbatim}\ecode
+%
 The keyword {\tt def} introduces a function {\em definition}.  It must
 be followed by the function name and the parenthesized list of formal
 parameters.  The statements that form the body of the function starts at
@@ -818,6 +996,7 @@
 function.  This value can be assigned to another name which can then
 also be used as a function.  This serves as a general renaming
 mechanism:
+
 \bcode\begin{verbatim}
 >>> fib
 <function object at 10042ed0>
@@ -826,20 +1005,24 @@
 1 1 2 3 5 8 13 21 34 55 89
 >>> 
 \end{verbatim}\ecode
+%
 You might object that {\tt fib} is not a function but a procedure.  In
-Python, as in C, procedures are just functions that don't return a
+Python, like in C, procedures are just functions that don't return a
 value.  In fact, technically speaking, procedures do return a value,
 albeit a rather boring one.  This value is called {\tt None} (it's a
 built-in name).  Writing the value {\tt None} is normally suppressed by
 the interpreter if it would be the only value written.  You can see it
 if you really want to:
+
 \bcode\begin{verbatim}
 >>> print fib(0)
 None
 >>> 
 \end{verbatim}\ecode
+%
 It is simple to write a function that returns a list of the numbers of
 the Fibonacci series, instead of printing it:
+
 \bcode\begin{verbatim}
 >>> def fib2(n): # return Fibonacci series up to n
 ...     result = []
@@ -854,6 +1037,7 @@
 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
 >>> 
 \end{verbatim}\ecode
+%
 This example, as usual, demonstrates some new Python features:
 
 \begin{itemize}
@@ -919,6 +1103,7 @@
 \end{description}
 
 An example that uses all list methods:
+
 \bcode\begin{verbatim}
 >>> a = [66.6, 333, 333, 1, 1234.5]
 >>> a.insert(2, -1)
@@ -945,6 +1130,7 @@
 of its value: the {\tt del} statement.  This can also be used to
 remove slices from a list (which we did earlier by assignment of an
 empty list to the slice).  For example:
+
 \bcode\begin{verbatim}
 >>> a
 [-1, 1, 66.6, 333, 333, 1234.5]
@@ -956,12 +1142,14 @@
 [1, 66.6, 1234.5]
 >>>
 \end{verbatim}\ecode
-
+%
 {\tt del} can also be used to delete entire variables:
+
 \bcode\begin{verbatim}
 >>> del a
 >>>
 \end{verbatim}\ecode
+%
 Referencing the name {\tt a} hereafter is an error (at least until
 another value is assigned to it).  We'll find other uses for {\tt del}
 later.
@@ -969,13 +1157,14 @@
 \section{Tuples and Sequences}
 
 We saw that lists and strings have many common properties, e.g.,
-subscripting and slicing operations.  They are two examples of {\em
-sequence} data types.  As Python is an evolving language, other
+indexinging and slicing operations.  They are two examples of {\em
+sequence} data types.  Since Python is an evolving language, other
 sequence data types may be added.  There is also another standard
 sequence data type: the {\em tuple}.
 
 A tuple consists of a number of values separated by commas, for
 instance:
+
 \bcode\begin{verbatim}
 >>> t = 12345, 54321, 'hello!'
 >>> t[0]
@@ -988,6 +1177,7 @@
 ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
 >>>
 \end{verbatim}\ecode
+%
 As you see, on output tuples are alway enclosed in parentheses, so
 that nested tuples are interpreted correctly; they may be input with
 or without surrounding parentheses, although often parentheses are
@@ -1005,6 +1195,7 @@
 one item is constructed by following a value with a comma
 (it is not sufficient to enclose a single value in parentheses).
 Ugly, but effective.  For example:
+
 \bcode\begin{verbatim}
 >>> empty = ()
 >>> singleton = 'hello',    # <-- note trailing comma
@@ -1016,15 +1207,17 @@
 ('hello',)
 >>>
 \end{verbatim}\ecode
-
+%
 The statement {\tt t = 12345, 54321, 'hello!'} is an example of {\em
 tuple packing}: the values {\tt 12345}, {\tt 54321} and {\tt 'hello!'}
 are packed together in a tuple.  The reverse operation is also
 possible, e.g.:
+
 \bcode\begin{verbatim}
 >>> x, y, z = t
 >>>
 \end{verbatim}\ecode
+%
 This is called, appropriately enough, {\em tuple unpacking}.  Tuple
 unpacking requires that the list of variables on the left has the same
 number of elements as the length of the tuple.  Note that multiple
@@ -1034,6 +1227,7 @@
 Occasionally, the corresponding operation on lists is useful: {\em list
 unpacking}.  This is supported by enclosing the list of variables in
 square brackets:
+
 \bcode\begin{verbatim}
 >>> a = ['foo', 'bar', 100, 1234]
 >>> [a1, a2, a3, a4] = a
@@ -1143,6 +1337,7 @@
 shorted sequence is the smaller one.  Lexicographical ordering for
 strings uses the ASCII ordering for individual characters.  Some
 examples of comparisons between sequences with the same types:
+
 \bcode\begin{verbatim}
 (1, 2, 3)              < (1, 2, 4)
 [1, 2, 3]              < [1, 2, 4]
@@ -1152,7 +1347,7 @@
 (1, 2, 3)              = (1.0, 2.0, 3.0)
 (1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)
 \end{verbatim}\ecode
-
+%
 Note that comparing objects of different types is legal.  The outcome
 is deterministic but arbitrary: the types are ordered by their name.
 Thus, a list is always smaller than a string, a string is always
@@ -1188,6 +1383,7 @@
 file name is the module name with the suffix {\tt .py} appended.  For
 instance, use your favorite text editor to create a file called {\tt
 fibo.py} in the current directory with the following contents:
+
 \bcode\begin{verbatim}
 # Fibonacci numbers module
 
@@ -1205,18 +1401,22 @@
           a, b = b, a+b
     return result
 \end{verbatim}\ecode
+%
 Now enter the Python interpreter and import this module with the
 following command:
+
 \bcode\begin{verbatim}
 >>> import fibo
 >>> 
 \end{verbatim}\ecode
+%
 This does not enter the names of the functions defined in
 {\tt fibo}
 directly in the current symbol table; it only enters the module name
 {\tt fibo}
 there.
 Using the module name you can access the functions:
+
 \bcode\begin{verbatim}
 >>> fibo.fib(1000)
 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
@@ -1224,7 +1424,9 @@
 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
 >>> 
 \end{verbatim}\ecode
+%
 If you intend to use a function often you can assign it to a local name:
+
 \bcode\begin{verbatim}
 >>> fib = fibo.fib
 >>> fib(500)
@@ -1268,23 +1470,27 @@
 statement that imports names from a module directly into the importing
 module's symbol table.
 For example:
+
 \bcode\begin{verbatim}
 >>> from fibo import fib, fib2
 >>> fib(500)
 1 1 2 3 5 8 13 21 34 55 89 144 233 377
 >>> 
 \end{verbatim}\ecode
+%
 This does not introduce the module name from which the imports are taken
 in the local symbol table (so in the example, {\tt fibo} is not
 defined).
 
 There is even a variant to import all names that a module defines:
+
 \bcode\begin{verbatim}
 >>> from fibo import *
 >>> fib(500)
 1 1 2 3 5 8 13 21 34 55 89 144 233 377
 >>> 
 \end{verbatim}\ecode
+%
 This imports all names except those beginning with an underscore
 ({\tt \_}).
 
@@ -1301,6 +1507,7 @@
 sys}, which is built into every Python interpreter.  The variables {\tt
 sys.ps1} and {\tt sys.ps2} define the strings used as primary and
 secondary prompts:
+
 \bcode\begin{verbatim}
 >>> import sys
 >>> sys.ps1
@@ -1312,6 +1519,7 @@
 Yuck!
 C> 
 \end{verbatim}\ecode
+%
 These two variables are only defined if the interpreter is in
 interactive mode.
 
@@ -1325,6 +1533,7 @@
 {\tt PYTHONPATH}
 is not set.
 You can modify it using standard list operations, e.g.:
+
 \bcode\begin{verbatim}
 >>> import sys
 >>> sys.path.append('/ufs/guido/lib/python')
@@ -1335,6 +1544,7 @@
 
 The built-in function {\tt dir} is used to find out which names a module
 defines.  It returns a sorted list of strings:
+
 \bcode\begin{verbatim}
 >>> import fibo, sys
 >>> dir(fibo)
@@ -1343,7 +1553,9 @@
 ['argv', 'exit', 'modules', 'path', 'ps1', 'ps2', 'stderr', 'stdin', 'stdout']
 >>>
 \end{verbatim}\ecode
+%
 Without arguments, {\tt dir()} lists the names you have defined currently:
+
 \bcode\begin{verbatim}
 >>> a = [1, 2, 3, 4, 5]
 >>> import fibo, sys
@@ -1352,11 +1564,13 @@
 ['a', 'fib', 'fibo', 'sys']
 >>>
 \end{verbatim}\ecode
+%
 Note that it lists all types of names: variables, modules, functions, etc.
 
 {\tt dir()} does not list the names of built-in functions and variables.
 If you want a list of those, they are defined in the standard module
 {\tt builtin}:
+
 \bcode\begin{verbatim}
 >>> import builtin
 >>> dir(builtin)
@@ -1385,6 +1599,7 @@
 One question remains, of course: how do you convert values to strings?
 Luckily, Python has a way to convert any value to a string: just write
 the value between reverse quotes (\verb/``/).  Some examples:
+
 \bcode\begin{verbatim}
 >>> x = 10 * 3.14
 >>> y = 200*200
@@ -1406,8 +1621,9 @@
 '(31.4, 40000, (\'foo\', \'bar\'))'
 >>>
 \end{verbatim}\ecode
-
+%
 Here is how you write a table of squares and cubes:
+
 \bcode\begin{verbatim}
 >>> import string
 >>> for x in range(1, 11):
@@ -1427,6 +1643,7 @@
 10 100 1000
 >>>
 \end{verbatim}\ecode
+%
 (Note that one space between each column was added by the way {\tt print}
 works: it always adds spaces between its arguments.)
 
@@ -1447,6 +1664,7 @@
 	Better facilities for formatting floating point numbers are
 	lacking at this moment.
 }
+
 \bcode\begin{verbatim}
 >>> string.zfill('12', 5)
 '00012'
@@ -1468,6 +1686,7 @@
 
 Syntax errors, also known as parsing errors, are perhaps the most common
 kind of complaint you get while you are still learning Python:
+
 \bcode\begin{verbatim}
 >>> while 1 print 'Hello world'
 Parsing error: file <stdin>, line 1:
@@ -1476,6 +1695,7 @@
 Unhandled exception: run-time error: syntax error
 >>> 
 \end{verbatim}\ecode
+%
 The parser repeats the offending line and displays a little `arrow'
 pointing at the earliest point in the line where the error was detected.
 The error is caused by (or at least detected at) the token
@@ -1493,6 +1713,7 @@
 not unconditionally fatal: you will soon learn how to handle them in
 Python programs.  Most exceptions are not handled by programs,
 however, and result in error messages as shown here:
+
 \bcode\small\begin{verbatim}
 >>> 10 * (1/0)
 Unhandled exception: run-time error: integer division by zero
@@ -1508,7 +1729,7 @@
   File "<stdin>", line 1
 >>> 
 \end{verbatim}\ecode
-
+%
 The first line of the error message indicates what happened.
 Exceptions come in different types, and the type is printed as part of
 the message: the types in the example are
@@ -1553,6 +1774,7 @@
 It is possible to write programs that handle selected exceptions.
 Look at the following example, which prints a table of inverses of
 some floating point numbers:
+
 \bcode\begin{verbatim}
 >>> numbers = [0.3333, 2.5, 0, 10]
 >>> for x in numbers:
@@ -1568,6 +1790,7 @@
 10 0.1
 >>> 
 \end{verbatim}\ecode
+%
 The {\tt try} statement works as follows.
 \begin{itemize}
 \item
@@ -1599,10 +1822,12 @@
 clause, not in other handlers of the same {\tt try} statement.
 An except clause may name multiple exceptions as a parenthesized list,
 e.g.:
+
 \bcode\begin{verbatim}
 ... except (RuntimeError, TypeError, NameError):
 ...     pass
 \end{verbatim}\ecode
+%
 The last except clause may omit the exception name(s), to serve as a
 wildcard.
 Use this with extreme caution!
@@ -1614,6 +1839,7 @@
 For exception types which have an argument, the except clause may
 specify a variable after the exception name (or list) to receive the
 argument's value, as follows:
+
 \bcode\begin{verbatim}
 >>> try:
 ...     foo()
@@ -1623,6 +1849,7 @@
 name foo undefined
 >>> 
 \end{verbatim}\ecode
+%
 If an exception has an argument, it is printed as the third part
 (`detail') of the message for unhandled exceptions.
 
@@ -1634,6 +1861,7 @@
 The string is printed as the second part of the message for unhandled
 exceptions.
 Their names and values are:
+
 \bcode\begin{verbatim}
 EOFError              'end-of-file read'
 KeyboardInterrupt     'keyboard interrupt'
@@ -1643,6 +1871,7 @@
 SystemError           'system error'            *
 TypeError             'type error'              *
 \end{verbatim}\ecode
+%
 The meanings should be clear enough.
 Those exceptions with a {\tt *} in the third column have an argument.
 
@@ -1650,6 +1879,7 @@
 immediately in the try clause, but also if they occur inside functions
 that are called (even indirectly) in the try clause.
 For example:
+
 \bcode\begin{verbatim}
 >>> def this_fails():
 ...     x = 1/0
@@ -1668,6 +1898,7 @@
 The {\tt raise} statement allows the programmer to force a specified
 exception to occur.
 For example:
+
 \bcode\begin{verbatim}
 >>> raise NameError, 'Hi There!'
 Unhandled exception: undefined name: Hi There!
@@ -1675,6 +1906,7 @@
   File "<stdin>", line 1
 >>> 
 \end{verbatim}\ecode
+%
 The first argument to {\tt raise} names the exception to be raised.
 The optional second argument specifies the exception's argument.
 
@@ -1683,6 +1915,7 @@
 Programs may name their own exceptions by assigning a string to a
 variable.
 For example:
+
 \bcode\begin{verbatim}
 >>> my_exc = 'nobody likes me!'
 >>> try:
@@ -1697,6 +1930,7 @@
   File "<stdin>", line 7
 >>> 
 \end{verbatim}\ecode
+%
 Many standard modules use this to report errors that may occur in
 functions they define.
 
@@ -1705,6 +1939,7 @@
 The {\tt try} statement has another optional clause which is intended to
 define clean-up actions that must be executed under all circumstances.
 For example:
+
 \bcode\begin{verbatim}
 >>> try:
 ...     raise KeyboardInterrupt
@@ -1717,6 +1952,7 @@
   File "<stdin>", line 2
 >>> 
 \end{verbatim}\ecode
+%
 The
 {\em finally\ clause}
 must follow the except clauses(s), if any.
diff --git a/Doc/tut/tut.tex b/Doc/tut/tut.tex
index 889274f..178bd5c 100644
--- a/Doc/tut/tut.tex
+++ b/Doc/tut/tut.tex
@@ -77,17 +77,17 @@
 built in, such as flexible arrays and dictionaries that would cost you
 days to implement efficiently in C.  Because of its more general data
 types Python is applicable to a much larger problem domain than {\em
-Awk} or even {\em Perl}, yet most simple things are at least as easy
-in Python as in those languages.
+Awk} or even {\em Perl}, yet many things are at least as easy in
+Python as in those languages.
 
 Python allows you to split up your program in modules that can be
 reused in other Python programs.  It comes with a large collection of
-standard modules that you can use as the basis of your programs ---
-or as examples to start learning to program in Python.  There are also
-built-in modules that provide things like file I/O, system calls, and
-even a generic interface to window systems (STDWIN).
+standard modules that you can use as the basis of your programs --- or
+as examples to start learning to program in Python.  There are also
+built-in modules that provide things like file I/O, system calls,
+sockets, and even a generic interface to window systems (STDWIN).
 
-Python is an interpreted language, which saves you considerable time
+Python is an interpreted language, which can save you considerable time
 during program development because no compilation and linking is
 necessary.  The interpreter can be used interactively, which makes it
 easy to experiment with features of the language, to write throw-away
@@ -116,12 +116,15 @@
 programs to libraries that may only be available in binary form (such
 as a vendor-specific graphics library).  Once you are really hooked,
 you can link the Python interpreter into an application written in C
-and use it as an extension or command language.
+and use it as an extension or command language for that application.
+
+By the way, the language is named after the BBC show ``Monty
+Python's Flying Circus'' and has nothing to do with nasty reptiles...
 
 \section{Where From Here}
 
 Now that you are all excited about Python, you'll want to examine it
-in some more detail.  Since the best introduction to a language is
+in some more detail.  Since the best way to learn a language is
 using it, you are invited here to do so.
 
 In the next chapter, the mechanics of using the interpreter are
@@ -140,16 +143,21 @@
 
 \chapter{Using the Python Interpreter}
 
+\section{Invoking the Interpreter}
+
 The Python interpreter is usually installed as {\tt /usr/local/python}
 on those machines where it is available; putting {\tt /usr/local} in
 your {\UNIX} shell's search path makes it possible to start it by
 typing the command
+
 \bcode\begin{verbatim}
 python
 \end{verbatim}\ecode
+%
 to the shell.  Since the choice of the directory where the interpreter
 lives is an installation option, other places are possible; check with
-your local Python guru or system administrator.
+your local Python guru or system administrator.  (E.g., {\tt
+/usr/local/bin/python} is a popular alternative location.)
 
 The interpreter operates somewhat like the {\UNIX} shell: when called
 with standard input connected to a tty device, it reads and executes
@@ -157,6 +165,13 @@
 a file as standard input, it reads and executes a {\em script} from
 that file.
 
+A third way of starting the interpreter is
+``{\tt python -c command [arg] ...}'', which
+executes the statement(s) in {\tt command}, analogous to the shell's
+{\tt -c} option.  Since Python statements often contain spaces or other
+characters that are special to the shell, it is best to quote {\tt
+command} in its entirety with double quotes.
+
 Note that there is a difference between ``{\tt python file}'' and
 ``{\tt python $<$file}''.  In the latter case, input requests from the
 program, such as calls to {\tt input()} and {\tt raw\_input()}, are
@@ -166,15 +181,20 @@
 usually what you want) they are satisfied from whatever file or device
 is connected to standard input of the Python interpreter.
 
-A third possibility is ``{\tt python -c command [arg] ...}'', which
-executes the statement(s) in {\tt command}, analogous to the shell's
-{\tt -c} option.  Usually {\tt command} will contain spaces or other
-characters that are special to the shell, so it is best to quote it.
+\subsection{Argument Passing}
 
-When available, the script name and additional arguments thereafter
-are passed to the script in the variable {\tt sys.argv}, which is a
-list of strings.
-When {\tt -c command} is used, {\tt sys.argv} is set to {\tt '-c'}.
+When known to the interpreter, the script name and additional
+arguments thereafter are passed to the script in the variable {\tt
+sys.argv}, which is a list of strings.  Its length is at least one;
+when no script and no arguments are given, {\tt sys.argv[0]} is an
+empty string.  When the script name is given as {\tt '-'} (meaning
+standard input), {\tt sys.argv[0]} is set to {\tt '-'}.  When {\tt -c
+command} is used, {\tt sys.argv[0]} is set to {\tt '-c'}.  Options
+found after {\tt -c command} are not consumed by the Python
+interpreter's option processing but left in {\tt sys.argv} for the
+command to handle.
+
+\subsection{Interactive Mode}
 
 When commands are read from a tty, the interpreter is said to be in
 {\em interactive\ mode}.  In this mode it prompts for the next command
@@ -184,9 +204,24 @@
 at the primary prompt causes the interpreter to exit with a zero exit
 status.
 
-When an error occurs in interactive mode, the interpreter prints a
-message and a stack trace and returns to the primary prompt; with
-input from a file, it exits with a nonzero exit status after printing
+The interpreter prints a welcome message stating its version number
+and a copyright notice before printing the first prompt, e.g.:
+
+\bcode\begin{verbatim}
+python
+Python 0.9.5 (Jan  2 1992).
+Copyright 1990, 1991, 1992 Stichting Mathematisch Centrum, Amsterdam
+>>>
+\end{verbatim}\ecode
+
+\section{The Interpreter and its Environment}
+
+\subsection{Error Handling}
+
+When an error occurs, the interpreter prints an error
+message and a stack trace.  In interactive mode, it then returns to
+the primary prompt; when input came from a file, it exits with a
+nonzero exit status after printing
 the stack trace.  (Exceptions handled by an {\tt except} clause in a
 {\tt try} statement are not errors in this context.)  Some errors are
 unconditionally fatal and cause an exit with a nonzero exit; this
@@ -195,46 +230,60 @@
 normal output from the executed commands is written to standard
 output.
 
-Typing an interrupt (normally Control-C or DEL) to the primary or
-secondary prompt cancels the input and returns to the primary prompt.
-Typing an interrupt while a command is being executed raises the {\tt
+Typing the interrupt character (usually Control-C or DEL) to the
+primary or secondary prompt cancels the input and returns to the
+primary prompt.%
+\footnote{
+	A problem with the GNU Readline package may prevent this.
+}
+Typing an interrupt while a command is executing raises the {\tt
 KeyboardInterrupt} exception, which may be handled by a {\tt try}
 statement.
 
-When a module named
-{\tt foo}
-is imported, the interpreter searches for a file named
-{\tt foo.py}
-in a list of directories specified by the environment variable
-{\tt PYTHONPATH}.
-It has the same syntax as the {\UNIX} shell variable
-{\tt PATH},
-i.e., a list of colon-separated directory names.
-When
-{\tt PYTHONPATH}
-is not set, an installation-dependent default path is used, usually
-{\tt .:/usr/local/lib/python}.
-(Modules are really searched in the list of directories given by the
-variable {\tt sys.path} which is initialized from {\tt PYTHONPATH} or
-from the installation-dependent default.  See the section on Standard
-Modules later.)
+\subsection{The Module Search Path}
 
-As an important speed-up of the start-up time for short programs, if a
-file called {\tt foo.pyc} exists in the directory where {\tt foo.py}
-is found, this is assumed to contain an already-``compiled'' version
-of the module {\tt foo}.  The last modification time of {\tt foo.py}
-is recorded in {\tt foo.pyc}, and the file is ignored if these don't
-match.  Whenever {\tt foo.py} is successfully compiled, an attempt is
-made to write the compiled version to {\tt foo.pyc}.
+When a module named {\tt foo} is imported, the interpreter searches
+for a file named {\tt foo.py} in the list of directories specified by
+the environment variable {\tt PYTHONPATH}.  It has the same syntax as
+the {\UNIX} shell variable {\tt PATH}, i.e., a list of colon-separated
+directory names.  When {\tt PYTHONPATH} is not set, an
+installation-dependent default path is used, usually {\tt
+.:/usr/local/lib/python}.
+
+Actually, modules are searched in the list of directories given by the
+variable {\tt sys.path} which is initialized from {\tt PYTHONPATH} or
+the installation-dependent default.  This allows Python programs that
+know what they're doing to modify or replace the module search path.
+See the section on Standard Modules later.
+
+\subsection{``Compiled'' Python files}
+
+As an important speed-up of the start-up time for short programs that
+use a lot of standard modules, if a file called {\tt foo.pyc} exists
+in the directory where {\tt foo.py} is found, this is assumed to
+contain an already-``compiled'' version of the module {\tt foo}.  The
+modification time of the version of {\tt foo.py} used to create {\tt
+foo.pyc} is recorded in {\tt foo.pyc}, and the file is ignored if
+these don't match.
+
+Whenever {\tt foo.py} is successfully compiled, an attempt is made to
+write the compiled version to {\tt foo.pyc}.  It is not an error if
+this attempt fails; if for any reason the file is not written
+completely, the resulting {\tt foo.pyc} file will be recognized as
+invalid and thus ignored later.
+
+\subsection{Executable Python scripts}
 
 On BSD'ish {\UNIX} systems, Python scripts can be made directly
 executable, like shell scripts, by putting the line
+
 \bcode\begin{verbatim}
 #! /usr/local/python
 \end{verbatim}\ecode
+%
 (assuming that's the name of the interpreter) at the beginning of the
-script and giving the file an executable mode.  (The {\tt \#!} must be
-the first two characters of the file.)
+script and giving the file an executable mode.  The {\tt \#!} must be
+the first two characters of the file.
 
 \section{Interactive Input Editing and History Substitution}
 
@@ -251,6 +300,8 @@
 happen, or if \verb/^P/ is echoed, you can skip the rest of this
 section.
 
+\subsection{Line Editing}
+
 If supported, input line editing is active whenever the interpreter
 prints a primary or secondary prompt.  The current line can be edited
 using the conventional Emacs control characters.  The most important
@@ -262,6 +313,8 @@
 string.  C-underscore undoes the last change you made; it can be
 repeated for cumulative effect.
 
+\subsection{History Substitution}
+
 History substitution works as follows.  All non-empty input lines
 issued are saved in a history buffer, and when a new prompt is given
 you are positioned on a new line at the bottom of this buffer.  C-P
@@ -271,17 +324,30 @@
 key passes the current line to the interpreter.  C-R starts an
 incremental reverse search; C-S starts a forward search.
 
+\subsection{Key Bindings}
+
 The key bindings and some other parameters of the Readline library can
 be customized by placing commands in an initialization file called
 {\tt \$HOME/.inputrc}.  Key bindings have the form
+
 \bcode\begin{verbatim}
 key-name: function-name
 \end{verbatim}\ecode
+%
+or
+
+\bcode\begin{verbatim}
+"string": function-name
+\end{verbatim}\ecode
+%
 and options can be set with
+
 \bcode\begin{verbatim}
 set option-name value
 \end{verbatim}\ecode
-Example:
+%
+For example:
+
 \bcode\begin{verbatim}
 # I prefer vi-style editing:
 set editing-mode vi
@@ -289,59 +355,75 @@
 set horizontal-scroll-mode On
 # Rebind some keys:
 Meta-h: backward-kill-word
-Control-u: universal-argument
+"\C-u": universal-argument
+"\C-x\C-r": re-read-init-file
 \end{verbatim}\ecode
+%
 Note that the default binding for TAB in Python is to insert a TAB
 instead of Readline's default filename completion function.  If you
 insist, you can override this by putting
+
 \bcode\begin{verbatim}
 TAB: complete
 \end{verbatim}\ecode
+%
 in your {\tt \$HOME/.inputrc}.  (Of course, this makes it hard to type
-indented continuation lines.)
+indented continuation lines...)
+
+\subsection{Commentary}
 
 This facility is an enormous step forward compared to previous
 versions of the interpreter; however, some wishes are left: It would
 be nice if the proper indentation were suggested on continuation lines
 (the parser knows if an indent token is required next).  The
 completion mechanism might use the interpreter's symbol table.  A
-function to check (or even suggest) matching parentheses, quotes etc.
+command to check (or even suggest) matching parentheses, quotes etc.
 would also be useful.
 
 \chapter{An Informal Introduction to Python}
 
 In the following examples, input and output are distinguished by the
-presence or absence of prompts ({\tt >>>} and {\tt ...}): to repeat the
-example, you must type everything after the prompt, when the prompt
-appears;
-lines that do not begin with a prompt are output from the interpreter.
+presence or absence of prompts ({\tt >>>} and {\tt ...}): to repeat
+the example, you must type everything after the prompt, when the
+prompt appears; lines that do not begin with a prompt are output from
+the interpreter.%
+\footnote{
+	I'd prefer to use different fonts to distinguish input
+	from output, but the amount of LaTeX hacking that would require
+	is currently beyond my ability.
+}
 Note that a secondary prompt on a line by itself in an example means
 you must type a blank line; this is used to end a multi-line command.
 
 \section{Using Python as a Calculator}
 
 Let's try some simple Python commands.  Start the interpreter and wait
-for the primary prompt, {\tt >>>}.
+for the primary prompt, {\tt >>>}.  (It shouldn't take long.)
+
+\subsection{Numbers}
 
 The interpreter acts as a simple calculator: you can type an
 expression at it and it will write the value.  Expression syntax is
 straightforward: the operators {\tt +}, {\tt -}, {\tt *} and {\tt /}
-work just as in most other languages (e.g., Pascal or C); parentheses
+work just like in most other languages (e.g., Pascal or C); parentheses
 can be used for grouping.  For example:
+
 \bcode\begin{verbatim}
 >>> # This is a comment
 >>> 2+2
 4
 >>> 
->>> (50-5+5*6+25)/4
-25
+>>> (50-5*6)/4
+5
 >>> # Division truncates towards zero:
 >>> 7/3
 2
 >>> 
 \end{verbatim}\ecode
-As in C, the equal sign ({\tt =}) is used to assign a value to a
+%
+Like in C, the equal sign ({\tt =}) is used to assign a value to a
 variable.  The value of an assignment is not written:
+
 \bcode\begin{verbatim}
 >>> width = 20
 >>> height = 5*9
@@ -349,21 +431,31 @@
 900
 >>> 
 \end{verbatim}\ecode
+%
 A value can be assigned to several variables simultaneously:
+
 \bcode\begin{verbatim}
 >>> # Zero x, y and z
 >>> x = y = z = 0
 >>>
 \end{verbatim}\ecode
+%
 There is full support for floating point; operators with mixed type
 operands convert the integer operand to floating point:
+
 \bcode\begin{verbatim}
 >>> 4 * 2.5 / 3.3
 3.0303030303
+>>> 7.0 / 2
+3.5
 >>> 
 \end{verbatim}\ecode
+
+\subsection{Strings}
+
 Besides numbers, Python can also manipulate strings, enclosed in
 single quotes:
+
 \bcode\begin{verbatim}
 >>> 'foo bar'
 'foo bar'
@@ -371,14 +463,16 @@
 'doesn\'t'
 >>> 
 \end{verbatim}\ecode
-Strings are written
-the same way as they are typed for input:
-inside quotes and with quotes and other funny characters escaped by
-backslashes, to show the precise value.  (There is also a way to write
-strings without quotes and escapes.)
+%
+Strings are written the same way as they are typed for input: inside
+quotes and with quotes and other funny characters escaped by
+backslashes, to show the precise value.  (The {\tt print} statement,
+described later, can be used to write strings without quotes or
+escapes.)
 
 Strings can be concatenated (glued together) with the {\tt +}
 operator, and repeated with {\tt *}:
+
 \bcode\begin{verbatim}
 >>> word = 'Help' + 'A'
 >>> word
@@ -387,12 +481,14 @@
 '<HelpAHelpAHelpAHelpAHelpA>'
 >>> 
 \end{verbatim}\ecode
-Strings can be subscripted; as in C, the first character of a string
-has subscript 0.
+%
+Strings can be subscripted (indexed); like in C, the first character of
+a string has subscript (index) 0.
 
 There is no separate character type; a character is simply a string of
-size one.  As in Icon, substrings can be specified with the {\em
-slice} notation: two subscripts (indices) separated by a colon.
+size one.  Like in Icon, substrings can be specified with the {\em
+slice} notation: two indices separated by a colon.
+
 \bcode\begin{verbatim}
 >>> word[4]
 'A'
@@ -400,19 +496,36 @@
 'He'
 >>> word[2:4]
 'lp'
->>> # Slice indices have useful defaults:
->>> word[:2]    # Take first two characters
+>>> 
+\end{verbatim}\ecode
+%
+Slice indices have useful defaults; an omitted first index defaults to
+zero, an omitted second index defaults to the size of the string being
+sliced.
+
+\bcode\begin{verbatim}
+>>> word[:2]    # The first two characters
 'He'
->>> word[2:]    # Drop first two characters
+>>> word[2:]    # All but the first two characters
 'lpA'
->>> # A useful invariant: s[:i] + s[i:] = s
+>>>
+\end{verbatim}\ecode
+%
+Here's a useful invariant of slice operations: \verb\s[:i] + s[i:]\
+equals \verb\s\.
+
+\bcode\begin{verbatim}
+>>> word[:2] + word[2:]
+'HelpA'
 >>> word[:3] + word[3:]
 'HelpA'
 >>> 
 \end{verbatim}\ecode
-Degenerate cases are handled gracefully: an index that is too large is
-replaced by the string size, an upper bound smaller than the lower
-bound returns an empty string.
+%
+Degenerate slice indices are handled gracefully: an index that is too
+large is replaced by the string size, an upper bound smaller than the
+lower bound returns an empty string.
+
 \bcode\begin{verbatim}
 >>> word[1:100]
 'elpA'
@@ -422,22 +535,47 @@
 ''
 >>> 
 \end{verbatim}\ecode
-Slice indices (but not simple subscripts) may be negative numbers, to
-start counting from the right.  For example:
+%
+Indices may be negative numbers, to start counting from the right.
+For example:
+
 \bcode\begin{verbatim}
->>> word[-2:]    # Take last two characters
+>>> word[-1]     # The last character
+'A'
+>>> word[-2]     # The last-but-one character
+'p'
+>>> word[-2:]    # The last two characters
 'pA'
->>> word[:-2]    # Drop last two characters
+>>> word[:-2]    # All but the last two characters
 'Hel'
->>> # But -0 does not count from the right!
->>> word[-0:]    # (since -0 equals 0)
+>>>
+\end{verbatim}\ecode
+%
+But note that -0 is really the same as 0, so it does not count from
+the right!
+
+\bcode\begin{verbatim}
+>>> word[-0]     # (since -0 equals 0)
+'H'
+>>>
+\end{verbatim}\ecode
+%
+Out-of-range negative slice indices are truncated, but don't try this
+for single-element (non-slice) indices:
+
+\bcode\begin{verbatim}
+>>> word[-100:]
 'HelpA'
+>>> word[-10]    # error
+Unhandled exception: IndexError: string index out of range
 >>> 
 \end{verbatim}\ecode
+%
 The best way to remember how slices work is to think of the indices as
 pointing {\em between} characters, with the left edge of the first
 character numbered 0.  Then the right edge of the last character of a
 string of {\tt n} characters has index {\tt n}, for example:
+
 \bcode\begin{verbatim}
  +---+---+---+---+---+ 
  | H | e | l | p | A |
@@ -445,40 +583,50 @@
  0   1   2   3   4   5 
 -5  -4  -3  -2  -1
 \end{verbatim}\ecode
+%
 The first row of numbers gives the position of the indices 0...5 in
 the string; the second row gives the corresponding negative indices.
-For nonnegative indices, the length of a slice is the difference of
-the indices, if both are within bounds, e.g., the length of {\tt
-word[1:3]} is 3--1 = 2.
+The slice from \verb\i\ to \verb\j\ consists of all characters between
+the edges labeled \verb\i\ and \verb\j\, respectively.
 
-The built-in function {\tt len()} computes the length of a string:
+For nonnegative indices, the length of a slice is the difference of
+the indices, if both are within bounds, e.g., the length of
+\verb\word[1:3]\ is 2.
+
+The built-in function {\tt len()} returns the length of a string:
+
 \bcode\begin{verbatim}
 >>> s = 'supercalifragilisticexpialidocious'
 >>> len(s)
 34
 >>> 
 \end{verbatim}\ecode
+
+\subsection{Lists}
+
 Python knows a number of {\em compound} data types, used to group
 together other values.  The most versatile is the {\em list}, which
-can be written as a list of comma-separated values between square
-brackets:
+can be written as a list of comma-separated values (items) between
+square brackets.  List items need not all have the same type.
+
 \bcode\begin{verbatim}
 >>> a = ['foo', 'bar', 100, 1234]
 >>> a
 ['foo', 'bar', 100, 1234]
 >>> 
 \end{verbatim}\ecode
-As for strings, list subscripts start at 0:
+%
+Like string indices, list indices start at 0, and lists can be sliced,
+concatenated and so on:
+
 \bcode\begin{verbatim}
 >>> a[0]
 'foo'
 >>> a[3]
 1234
->>> 
-\end{verbatim}\ecode
-Lists can be sliced, concatenated and so on, like strings:
-\bcode\begin{verbatim}
->>> a[1:3]
+>>> a[-2]
+100
+>>> a[1:-1]
 ['bar', 100]
 >>> a[:2] + ['bletch', 2*2]
 ['foo', 'bar', 'bletch', 4]
@@ -486,8 +634,10 @@
 ['foo', 'bar', 100, 'foo', 'bar', 100, 'foo', 'bar', 100, 'Boe!']
 >>> 
 \end{verbatim}\ecode
+%
 Unlike strings, which are {\em immutable}, it is possible to change
 individual elements of a list:
+
 \bcode\begin{verbatim}
 >>> a
 ['foo', 'bar', 100, 1234]
@@ -496,8 +646,10 @@
 ['foo', 'bar', 123, 1234]
 >>>
 \end{verbatim}\ecode
-Assignment to slices is also possible, and this may even change the size
+%
+Assignment to slices is also possible, and this can even change the size
 of the list:
+
 \bcode\begin{verbatim}
 >>> # Replace some items:
 >>> a[0:2] = [1, 12]
@@ -511,35 +663,49 @@
 >>> a[1:1] = ['bletch', 'xyzzy']
 >>> a
 [123, 'bletch', 'xyzzy', 1234]
+>>> a[:0] = a     # Insert (a copy of) itself at the beginning
+>>> a
+[123, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234]
 >>> 
 \end{verbatim}\ecode
+%
 The built-in function {\tt len()} also applies to lists:
+
 \bcode\begin{verbatim}
 >>> len(a)
-4
+8
 >>> 
 \end{verbatim}\ecode
+%
 It is possible to nest lists (create lists containing other lists),
 for example:
+
 \bcode\begin{verbatim}
->>> p = [1, [2, 3], 4]
+>>> q = [2, 3]
+>>> p = [1, q, 4]
 >>> len(p)
 3
 >>> p[1]
 [2, 3]
 >>> p[1][0]
 2
->>> p[1].append('xtra')
+>>> p[1].append('xtra')     # See section 5.1
 >>> p
 [1, [2, 3, 'xtra'], 4]
+>>> q
+[2, 3, 'xtra']
 >>>
 \end{verbatim}\ecode
+%
+Note that in the last example, {\tt p[1]} and {\tt q} really refer to
+the same object!  We'll come back to {\em object semantics} later.
 
 \section{First Steps Towards Programming}
 
 Of course, we can use Python for more complicated tasks than adding
 two and two together.  For instance, we can write an initial
 subsequence of the {\em Fibonacci} series as follows:
+
 \bcode\begin{verbatim}
 >>> # Fibonacci series:
 >>> # the sum of two elements defines the next
@@ -556,6 +722,7 @@
 8
 >>> 
 \end{verbatim}\ecode
+%
 This example introduces several new features.
 
 \begin{itemize}
@@ -569,19 +736,12 @@
 
 \item
 The {\tt while} loop executes as long as the condition (here: {\tt b <
-100}) remains true.  In Python, as in C, any non-zero integer value is
+100}) remains true.  In Python, like in C, any non-zero integer value is
 true; zero is false.  The condition may also be a string or list value,
 in fact any sequence; anything with a non-zero length is true, empty
 sequences are false.  The test used in the example is a simple
-comparison.  The standard comparison operators are written as {\tt <},
-{\tt >}, {\tt =}, {\tt <=}, {\tt >=} and {\tt <>}.%
-\footnote{
-	The ambiguity of using {\tt =}
-	for both assignment and equality is resolved by disallowing
-	unparenthesized conditions on the right hand side of assignments.
-	Parenthesized assignment is also disallowed; instead it is
-	interpreted as an equality test.
-}
+comparison.  The standard comparison operators are written the same as
+in C: {\tt <}, {\tt >}, {\tt ==}, {\tt <=}, {\tt >=} and {\tt !=}.
 
 \item
 The {\em body} of the loop is {\em indented}: indentation is Python's
@@ -601,13 +761,16 @@
 multiple expressions and strings.  Strings are written without quotes,
 and a space is inserted between items, so you can format things nicely,
 like this:
+
 \bcode\begin{verbatim}
 >>> i = 256*256
 >>> print 'The value of i is', i
 The value of i is 65536
 >>> 
 \end{verbatim}\ecode
+%
 A trailing comma avoids the newline after the output:
+
 \bcode\begin{verbatim}
 >>> a, b = 0, 1
 >>> while b < 1000:
@@ -617,6 +780,7 @@
 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
 >>> 
 \end{verbatim}\ecode
+%
 Note that the interpreter inserts a newline before it prints the next
 prompt if the last line was not completed.
 
@@ -632,18 +796,20 @@
 
 Perhaps the most well-known statement type is the {\tt if} statement.
 For example:
+
 \bcode\begin{verbatim}
 >>> if x < 0:
 ...      x = 0
 ...      print 'Negative changed to zero'
-... elif x = 0:
+... elif x == 0:
 ...      print 'Zero'
-... elif x = 1:
+... elif x == 1:
 ...      print 'Single'
 ... else:
 ...      print 'More'
 ... 
 \end{verbatim}\ecode
+%
 There can be zero or more {\tt elif} parts, and the {\tt else} part is
 optional.  The keyword `{\tt elif}' is short for `{\tt else if}', and is
 useful to avoid excessive indentation.  An {\tt if...elif...elif...}
@@ -654,11 +820,12 @@
 
 The {\tt for} statement in Python differs a bit from what you may be
 used to in C or Pascal.  Rather than always iterating over an
-arithmetic progression of numbers (as in Pascal), or leaving the user
+arithmetic progression of numbers (like in Pascal), or leaving the user
 completely free in the iteration test and step (as C), Python's {\tt
 for} statement iterates over the items of any sequence (e.g., a list
 or a string), in the order that they appear in the sequence.  For
 example (no pun intended):
+
 \bcode\begin{verbatim}
 >>> # Measure some strings:
 >>> a = ['cat', 'window', 'defenestrate']
@@ -670,11 +837,13 @@
 defenestrate 12
 >>> 
 \end{verbatim}\ecode
+%
 It is not safe to modify the sequence being iterated over in the loop
 (this can only happen for mutable sequence types, i.e., lists).  If
 you need to modify the list you are iterating over, e.g., duplicate
 selected items, you must iterate over a copy.  The slice notation
 makes this particularly convenient:
+
 \bcode\begin{verbatim}
 >>> for x in a[:]: # make a slice copy of the entire list
 ...    if len(x) > 6: a.insert(0, x)
@@ -689,15 +858,18 @@
 If you do need to iterate over a sequence of numbers, the built-in
 function {\tt range()} comes in handy.  It generates lists containing
 arithmetic progressions, e.g.:
+
 \bcode\begin{verbatim}
 >>> range(10)
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 >>> 
 \end{verbatim}\ecode
+%
 The given end point is never part of the generated list; {\tt range(10)}
 generates a list of 10 values, exactly the legal indices for items of a
 sequence of length 10.  It is possible to let the range start at another
 number, or to specify a different increment (even negative):
+
 \bcode\begin{verbatim}
 >>> range(5, 10)
 [5, 6, 7, 8, 9]
@@ -707,8 +879,10 @@
 [-10, -40, -70]
 >>> 
 \end{verbatim}\ecode
+%
 To iterate over the indices of a sequence, combine {\tt range()} and
 {\tt len()} as follows:
+
 \bcode\begin{verbatim}
 >>> a = ['Mary', 'had', 'a', 'little', 'lamb']
 >>> for i in range(len(a)):
@@ -735,10 +909,11 @@
 the condition becomes false (with {\tt while}), but not when the loop is
 terminated by a {\tt break} statement.  This is exemplified by the
 following loop, which searches for a list item of value 0:
+
 \bcode\begin{verbatim}
 >>> for n in range(2, 10):
 ...     for x in range(2, n):
-...         if n % x = 0:
+...         if n % x == 0:
 ...            print n, 'equals', x, '*', n/x
 ...            break
 ...     else:
@@ -761,6 +936,7 @@
 It can be used when a statement is required syntactically but the
 program requires no action.
 For example:
+
 \bcode\begin{verbatim}
 >>> while 1:
 ...       pass # Busy-wait for keyboard interrupt
@@ -771,6 +947,7 @@
 
 We can create a function that writes the Fibonacci series to an
 arbitrary boundary:
+
 \bcode\begin{verbatim}
 >>> def fib(n):    # write Fibonacci series up to n
 ...     a, b = 0, 1
@@ -783,6 +960,7 @@
 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
 >>> 
 \end{verbatim}\ecode
+%
 The keyword {\tt def} introduces a function {\em definition}.  It must
 be followed by the function name and the parenthesized list of formal
 parameters.  The statements that form the body of the function starts at
@@ -818,6 +996,7 @@
 function.  This value can be assigned to another name which can then
 also be used as a function.  This serves as a general renaming
 mechanism:
+
 \bcode\begin{verbatim}
 >>> fib
 <function object at 10042ed0>
@@ -826,20 +1005,24 @@
 1 1 2 3 5 8 13 21 34 55 89
 >>> 
 \end{verbatim}\ecode
+%
 You might object that {\tt fib} is not a function but a procedure.  In
-Python, as in C, procedures are just functions that don't return a
+Python, like in C, procedures are just functions that don't return a
 value.  In fact, technically speaking, procedures do return a value,
 albeit a rather boring one.  This value is called {\tt None} (it's a
 built-in name).  Writing the value {\tt None} is normally suppressed by
 the interpreter if it would be the only value written.  You can see it
 if you really want to:
+
 \bcode\begin{verbatim}
 >>> print fib(0)
 None
 >>> 
 \end{verbatim}\ecode
+%
 It is simple to write a function that returns a list of the numbers of
 the Fibonacci series, instead of printing it:
+
 \bcode\begin{verbatim}
 >>> def fib2(n): # return Fibonacci series up to n
 ...     result = []
@@ -854,6 +1037,7 @@
 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
 >>> 
 \end{verbatim}\ecode
+%
 This example, as usual, demonstrates some new Python features:
 
 \begin{itemize}
@@ -919,6 +1103,7 @@
 \end{description}
 
 An example that uses all list methods:
+
 \bcode\begin{verbatim}
 >>> a = [66.6, 333, 333, 1, 1234.5]
 >>> a.insert(2, -1)
@@ -945,6 +1130,7 @@
 of its value: the {\tt del} statement.  This can also be used to
 remove slices from a list (which we did earlier by assignment of an
 empty list to the slice).  For example:
+
 \bcode\begin{verbatim}
 >>> a
 [-1, 1, 66.6, 333, 333, 1234.5]
@@ -956,12 +1142,14 @@
 [1, 66.6, 1234.5]
 >>>
 \end{verbatim}\ecode
-
+%
 {\tt del} can also be used to delete entire variables:
+
 \bcode\begin{verbatim}
 >>> del a
 >>>
 \end{verbatim}\ecode
+%
 Referencing the name {\tt a} hereafter is an error (at least until
 another value is assigned to it).  We'll find other uses for {\tt del}
 later.
@@ -969,13 +1157,14 @@
 \section{Tuples and Sequences}
 
 We saw that lists and strings have many common properties, e.g.,
-subscripting and slicing operations.  They are two examples of {\em
-sequence} data types.  As Python is an evolving language, other
+indexinging and slicing operations.  They are two examples of {\em
+sequence} data types.  Since Python is an evolving language, other
 sequence data types may be added.  There is also another standard
 sequence data type: the {\em tuple}.
 
 A tuple consists of a number of values separated by commas, for
 instance:
+
 \bcode\begin{verbatim}
 >>> t = 12345, 54321, 'hello!'
 >>> t[0]
@@ -988,6 +1177,7 @@
 ((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
 >>>
 \end{verbatim}\ecode
+%
 As you see, on output tuples are alway enclosed in parentheses, so
 that nested tuples are interpreted correctly; they may be input with
 or without surrounding parentheses, although often parentheses are
@@ -1005,6 +1195,7 @@
 one item is constructed by following a value with a comma
 (it is not sufficient to enclose a single value in parentheses).
 Ugly, but effective.  For example:
+
 \bcode\begin{verbatim}
 >>> empty = ()
 >>> singleton = 'hello',    # <-- note trailing comma
@@ -1016,15 +1207,17 @@
 ('hello',)
 >>>
 \end{verbatim}\ecode
-
+%
 The statement {\tt t = 12345, 54321, 'hello!'} is an example of {\em
 tuple packing}: the values {\tt 12345}, {\tt 54321} and {\tt 'hello!'}
 are packed together in a tuple.  The reverse operation is also
 possible, e.g.:
+
 \bcode\begin{verbatim}
 >>> x, y, z = t
 >>>
 \end{verbatim}\ecode
+%
 This is called, appropriately enough, {\em tuple unpacking}.  Tuple
 unpacking requires that the list of variables on the left has the same
 number of elements as the length of the tuple.  Note that multiple
@@ -1034,6 +1227,7 @@
 Occasionally, the corresponding operation on lists is useful: {\em list
 unpacking}.  This is supported by enclosing the list of variables in
 square brackets:
+
 \bcode\begin{verbatim}
 >>> a = ['foo', 'bar', 100, 1234]
 >>> [a1, a2, a3, a4] = a
@@ -1143,6 +1337,7 @@
 shorted sequence is the smaller one.  Lexicographical ordering for
 strings uses the ASCII ordering for individual characters.  Some
 examples of comparisons between sequences with the same types:
+
 \bcode\begin{verbatim}
 (1, 2, 3)              < (1, 2, 4)
 [1, 2, 3]              < [1, 2, 4]
@@ -1152,7 +1347,7 @@
 (1, 2, 3)              = (1.0, 2.0, 3.0)
 (1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)
 \end{verbatim}\ecode
-
+%
 Note that comparing objects of different types is legal.  The outcome
 is deterministic but arbitrary: the types are ordered by their name.
 Thus, a list is always smaller than a string, a string is always
@@ -1188,6 +1383,7 @@
 file name is the module name with the suffix {\tt .py} appended.  For
 instance, use your favorite text editor to create a file called {\tt
 fibo.py} in the current directory with the following contents:
+
 \bcode\begin{verbatim}
 # Fibonacci numbers module
 
@@ -1205,18 +1401,22 @@
           a, b = b, a+b
     return result
 \end{verbatim}\ecode
+%
 Now enter the Python interpreter and import this module with the
 following command:
+
 \bcode\begin{verbatim}
 >>> import fibo
 >>> 
 \end{verbatim}\ecode
+%
 This does not enter the names of the functions defined in
 {\tt fibo}
 directly in the current symbol table; it only enters the module name
 {\tt fibo}
 there.
 Using the module name you can access the functions:
+
 \bcode\begin{verbatim}
 >>> fibo.fib(1000)
 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
@@ -1224,7 +1424,9 @@
 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
 >>> 
 \end{verbatim}\ecode
+%
 If you intend to use a function often you can assign it to a local name:
+
 \bcode\begin{verbatim}
 >>> fib = fibo.fib
 >>> fib(500)
@@ -1268,23 +1470,27 @@
 statement that imports names from a module directly into the importing
 module's symbol table.
 For example:
+
 \bcode\begin{verbatim}
 >>> from fibo import fib, fib2
 >>> fib(500)
 1 1 2 3 5 8 13 21 34 55 89 144 233 377
 >>> 
 \end{verbatim}\ecode
+%
 This does not introduce the module name from which the imports are taken
 in the local symbol table (so in the example, {\tt fibo} is not
 defined).
 
 There is even a variant to import all names that a module defines:
+
 \bcode\begin{verbatim}
 >>> from fibo import *
 >>> fib(500)
 1 1 2 3 5 8 13 21 34 55 89 144 233 377
 >>> 
 \end{verbatim}\ecode
+%
 This imports all names except those beginning with an underscore
 ({\tt \_}).
 
@@ -1301,6 +1507,7 @@
 sys}, which is built into every Python interpreter.  The variables {\tt
 sys.ps1} and {\tt sys.ps2} define the strings used as primary and
 secondary prompts:
+
 \bcode\begin{verbatim}
 >>> import sys
 >>> sys.ps1
@@ -1312,6 +1519,7 @@
 Yuck!
 C> 
 \end{verbatim}\ecode
+%
 These two variables are only defined if the interpreter is in
 interactive mode.
 
@@ -1325,6 +1533,7 @@
 {\tt PYTHONPATH}
 is not set.
 You can modify it using standard list operations, e.g.:
+
 \bcode\begin{verbatim}
 >>> import sys
 >>> sys.path.append('/ufs/guido/lib/python')
@@ -1335,6 +1544,7 @@
 
 The built-in function {\tt dir} is used to find out which names a module
 defines.  It returns a sorted list of strings:
+
 \bcode\begin{verbatim}
 >>> import fibo, sys
 >>> dir(fibo)
@@ -1343,7 +1553,9 @@
 ['argv', 'exit', 'modules', 'path', 'ps1', 'ps2', 'stderr', 'stdin', 'stdout']
 >>>
 \end{verbatim}\ecode
+%
 Without arguments, {\tt dir()} lists the names you have defined currently:
+
 \bcode\begin{verbatim}
 >>> a = [1, 2, 3, 4, 5]
 >>> import fibo, sys
@@ -1352,11 +1564,13 @@
 ['a', 'fib', 'fibo', 'sys']
 >>>
 \end{verbatim}\ecode
+%
 Note that it lists all types of names: variables, modules, functions, etc.
 
 {\tt dir()} does not list the names of built-in functions and variables.
 If you want a list of those, they are defined in the standard module
 {\tt builtin}:
+
 \bcode\begin{verbatim}
 >>> import builtin
 >>> dir(builtin)
@@ -1385,6 +1599,7 @@
 One question remains, of course: how do you convert values to strings?
 Luckily, Python has a way to convert any value to a string: just write
 the value between reverse quotes (\verb/``/).  Some examples:
+
 \bcode\begin{verbatim}
 >>> x = 10 * 3.14
 >>> y = 200*200
@@ -1406,8 +1621,9 @@
 '(31.4, 40000, (\'foo\', \'bar\'))'
 >>>
 \end{verbatim}\ecode
-
+%
 Here is how you write a table of squares and cubes:
+
 \bcode\begin{verbatim}
 >>> import string
 >>> for x in range(1, 11):
@@ -1427,6 +1643,7 @@
 10 100 1000
 >>>
 \end{verbatim}\ecode
+%
 (Note that one space between each column was added by the way {\tt print}
 works: it always adds spaces between its arguments.)
 
@@ -1447,6 +1664,7 @@
 	Better facilities for formatting floating point numbers are
 	lacking at this moment.
 }
+
 \bcode\begin{verbatim}
 >>> string.zfill('12', 5)
 '00012'
@@ -1468,6 +1686,7 @@
 
 Syntax errors, also known as parsing errors, are perhaps the most common
 kind of complaint you get while you are still learning Python:
+
 \bcode\begin{verbatim}
 >>> while 1 print 'Hello world'
 Parsing error: file <stdin>, line 1:
@@ -1476,6 +1695,7 @@
 Unhandled exception: run-time error: syntax error
 >>> 
 \end{verbatim}\ecode
+%
 The parser repeats the offending line and displays a little `arrow'
 pointing at the earliest point in the line where the error was detected.
 The error is caused by (or at least detected at) the token
@@ -1493,6 +1713,7 @@
 not unconditionally fatal: you will soon learn how to handle them in
 Python programs.  Most exceptions are not handled by programs,
 however, and result in error messages as shown here:
+
 \bcode\small\begin{verbatim}
 >>> 10 * (1/0)
 Unhandled exception: run-time error: integer division by zero
@@ -1508,7 +1729,7 @@
   File "<stdin>", line 1
 >>> 
 \end{verbatim}\ecode
-
+%
 The first line of the error message indicates what happened.
 Exceptions come in different types, and the type is printed as part of
 the message: the types in the example are
@@ -1553,6 +1774,7 @@
 It is possible to write programs that handle selected exceptions.
 Look at the following example, which prints a table of inverses of
 some floating point numbers:
+
 \bcode\begin{verbatim}
 >>> numbers = [0.3333, 2.5, 0, 10]
 >>> for x in numbers:
@@ -1568,6 +1790,7 @@
 10 0.1
 >>> 
 \end{verbatim}\ecode
+%
 The {\tt try} statement works as follows.
 \begin{itemize}
 \item
@@ -1599,10 +1822,12 @@
 clause, not in other handlers of the same {\tt try} statement.
 An except clause may name multiple exceptions as a parenthesized list,
 e.g.:
+
 \bcode\begin{verbatim}
 ... except (RuntimeError, TypeError, NameError):
 ...     pass
 \end{verbatim}\ecode
+%
 The last except clause may omit the exception name(s), to serve as a
 wildcard.
 Use this with extreme caution!
@@ -1614,6 +1839,7 @@
 For exception types which have an argument, the except clause may
 specify a variable after the exception name (or list) to receive the
 argument's value, as follows:
+
 \bcode\begin{verbatim}
 >>> try:
 ...     foo()
@@ -1623,6 +1849,7 @@
 name foo undefined
 >>> 
 \end{verbatim}\ecode
+%
 If an exception has an argument, it is printed as the third part
 (`detail') of the message for unhandled exceptions.
 
@@ -1634,6 +1861,7 @@
 The string is printed as the second part of the message for unhandled
 exceptions.
 Their names and values are:
+
 \bcode\begin{verbatim}
 EOFError              'end-of-file read'
 KeyboardInterrupt     'keyboard interrupt'
@@ -1643,6 +1871,7 @@
 SystemError           'system error'            *
 TypeError             'type error'              *
 \end{verbatim}\ecode
+%
 The meanings should be clear enough.
 Those exceptions with a {\tt *} in the third column have an argument.
 
@@ -1650,6 +1879,7 @@
 immediately in the try clause, but also if they occur inside functions
 that are called (even indirectly) in the try clause.
 For example:
+
 \bcode\begin{verbatim}
 >>> def this_fails():
 ...     x = 1/0
@@ -1668,6 +1898,7 @@
 The {\tt raise} statement allows the programmer to force a specified
 exception to occur.
 For example:
+
 \bcode\begin{verbatim}
 >>> raise NameError, 'Hi There!'
 Unhandled exception: undefined name: Hi There!
@@ -1675,6 +1906,7 @@
   File "<stdin>", line 1
 >>> 
 \end{verbatim}\ecode
+%
 The first argument to {\tt raise} names the exception to be raised.
 The optional second argument specifies the exception's argument.
 
@@ -1683,6 +1915,7 @@
 Programs may name their own exceptions by assigning a string to a
 variable.
 For example:
+
 \bcode\begin{verbatim}
 >>> my_exc = 'nobody likes me!'
 >>> try:
@@ -1697,6 +1930,7 @@
   File "<stdin>", line 7
 >>> 
 \end{verbatim}\ecode
+%
 Many standard modules use this to report errors that may occur in
 functions they define.
 
@@ -1705,6 +1939,7 @@
 The {\tt try} statement has another optional clause which is intended to
 define clean-up actions that must be executed under all circumstances.
 For example:
+
 \bcode\begin{verbatim}
 >>> try:
 ...     raise KeyboardInterrupt
@@ -1717,6 +1952,7 @@
   File "<stdin>", line 2
 >>> 
 \end{verbatim}\ecode
+%
 The
 {\em finally\ clause}
 must follow the except clauses(s), if any.