I l@ve RuBoard |
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.
I l@ve RuBoard |