[Tutor] split struggle

Peter Otten __peter__ at web.de
Wed Jun 23 16:46:41 CEST 2010


Richard D. Moores wrote:

> Please see my Python 3.1 code pasted at
> <http://python.pastebin.com/T3vm9vKT>.
> 
> This does what I want, which is to do one of:
> 1. print all the elements of the list, lst.
> 2. print "Done" when "" is entered.
> 3. print the elements of lst whose indexes are entered.
> (sorry if all this is obvious)
> 
> Now, the code works, but isn't there a better way to do what I want?
> I've been away from Python for a while, and have gotten rusty.

Although the code gets slightly more complex having a look at the cmd module 
may be worthwhile. Once you have set up the bases you can add commands by 
adding a do_xxx() method assuming 'xxx' is the name of the command. Tab 
completion works (for commands) and you get a rudimentary help function for 
free.

$ cat indexes.py
import cmd

class Cmd(cmd.Cmd):
    prompt = "Enter a command -> "
    def precmd(self, line):
        if line.strip().isdigit():
            # treat a lone integer as a shortcut
            # for the 'one' command
            return "one " + line
        if not line:
            return "EOF"
        return line
    def do_all(self, line):
        "print all items"
        for i, item in enumerate(items):
            print_item(i)
    def do_one(self, line):
        i = int(line)
        print_item(i)
    def do_EOF(self, line):
        print("That's all, folks")
        return True

items = [100,101,102,103]

def print_item(i):
    print(i, "->", items[i])

Cmd().cmdloop("Enter a command or type 'help' for help")
$ python3 indexes.py
Enter a command or type 'help' for help
Enter a command -> help

Documented commands (type help <topic>):
========================================
all

Undocumented commands:
======================
EOF  help  one

Enter a command -> one 1
1 -> 101
Enter a command -> help all
print all items
Enter a command -> all
0 -> 100
1 -> 101
2 -> 102
3 -> 103
Enter a command -> 3
3 -> 103
Enter a command ->
That's all, folks
$





More information about the Tutor mailing list