Mark Fanty wrote: > No nesting, but the while is misleading since I'm not looping and this > is a bit awkward. I don't mind a few more key strokes, but I'd like > clarity. I wish I could do > > if m = re.search(r'add (\d+) (\d+)', $line): > do_add(m.group(1), m.group(2)) > elif m = re.search(r'mult (\d+) (\d+)', $line): > do_mult(m.group(1), m.group(2)) > else m = re.search(r'help (\w+)', $line): > show_help(m.group(1)) > > Now that's what I'm looking for, but I can't put the assignment in an > expression. Any recommendations? Less "tricky" is better.
Try thinking along the following lines. It is longer, but clearer and easily extended to more commands. For more complete command processing use the 'cmd' module. import sys class Command: def do_add(self, a, b): '''add <number> <number>''' return int(a)+int(b) def do_mult(self, a, b): '''mult <number> <number>''' return int(a)*int(b) def do_help(self, *what): '''help [words] - give some help''' if not what: what = sorted(s[3:] for s in dir(self) if s.startswith('do_')) def error(): '''Unknown command''' for w in what: cmd = getattr(self, 'do_'+w, error) print "Help for %r:\n%s\n" % (w, cmd.__doc__) def do_exit(self): '''exit - the program''' sys.exit(0) def __call__(self, line): words = line.split() if not words: return command = words.pop(0) cmdfn = getattr(self, 'do_'+command, None) if not cmdfn: print "Unknown command %r. Use 'help' for help" % command return result = None try: result = cmdfn(*words) except TypeError, msg: print msg if result is not None: print "result is",result cmd = Command() while 1: cmd(sys.stdin.readline()) -- http://mail.python.org/mailman/listinfo/python-list