This chapter is full of programs we encourage you to type in and play with. However, if you really want exercises, here are a few more challenging ones:
Redirecting stdout. Modify the
mygrep.py
script to output to the last file
specified on the command line instead of to the console.
Writing a shell. Using the
Cmd
class in the cmd
module and
the functions listed in Chapter 8 for manipulating
files and directories, write a little shell that accepts the standard
Unix commands (or DOS commands if you’d rather):
ls
(dir
) for listing the
current directory, cd
for changing directory,
mv
(or ren
) for moving/renaming
a file, and cp
(copy
) for
copying a file.
Understanding map, reduce, and filter. The
map
, reduce
, and
filter
functions are somewhat difficult to
understand if it’s the first time you’ve encountered this
type of function, partly because they involve passing functions as
arguments, and partly because they do a lot even with such small
names. One good way to ensure you know how they work is to rewrite
them; in this exercise, write three functions
(map2
, reduce2
,
filter2
), that do the same thing as
map
, filter
, and
reduce
, respectively, at least as far as
we’ve described how they work:
map2
takes two arguments. The first should be a function accepting two arguments, or None
. The second should be a sequence. If the first argument is a function, that function is called with each element of the sequence, and the resulting values are returned in a list. If the first argument is None
, the sequence is converted to a list, and that list is returned.
reduce2
takes two arguments. The first must be a function accepting two arguments, and the second must be a sequence. The first two arguments of the sequence are used as arguments to the function, and the result of that call is sent as the first argument to the function again, with the third element to the sequence as the second argument, and so on, until all elements of the sequence have been used as arguments to the function. The last returned value from the function is then the return value for the reduce2
call.
filter2
takes two arguments. The first can be None
or a function accepting two arguments. The second must be a sequence. If the first argument is None
, filter2
returns the subset of the elements in the sequence that tests true. If the first argument is a function, filter2
is called with every element in the sequence in turn, and only those elements for which the return value of the function applied to them is true are returned by filter2
.