[Tutor] First program -- would like comments and criticisms

Andrei project5 at redrival.net
Sat Feb 18 21:51:31 CET 2006


benmarkwell at gmail.com wrote:
> Here is my first stab at putting together a working program. It is a 
> glossary that you can add words and definitions to, or look up words and 
> their definitions.  There are a couple of problems here and there, but 
> it basically does what I set out for it to do. All comments and 
> criticisms are welcome. I attached the data file that goes with the 
> script in case anybody wanted to actually run it, so they wouldn't have 
> to make their own dictionary file to access.

I haven't executed it, but it seems quite good, certainly for a first 
working program. For small programs there's no point in overengineering, 
but here are some simple improvements you could look into:

- place a "if __name__=="__main__":" condition at the bottom and put 
your program code in there (or better yet, extract it in a function and 
call that function after the if __name__ stuff). This way the module can 
also be imported.

- make the location of the dictionary a 'constant' (which in Python 
means a variable with all-uppercase name :)). Having magic strings in 
code is bad practice.

- the menu system could be redesigned to make it more 
maintenance-friendly. At this point if you want to add/modify a choice, 
you'd have to modify a procedure and the main code. You could instead 
make a dictionary mapping each possible choice (keys) to tuples 
containing a description and a function name. Loop over the keys and 
print them with the description. Once the user makes a choice, you could 
look up the function in the dictionary and execute it. This way adding 
new functionality items only means you need to add an entry to that one 
dictionary.

- you could replace the "while num != '3':" condition with a "while 
True:" - the loop is interrupted anyway if '3' is selected, because of 
the 'break'. This way you can also remove the initialization of num.

- you could extract the actual logic (the glossary) to a class with 
methods like "load", "save", "lookup" and separate it completely from 
all the user interaction. The glossary class shouldn't print/ask for 
user input. It's overkill for such a small program, but you could then 
theoretically reuse the glossary in a different application (e.g. put a 
webbased interface onto it, or subclass it and make a glossary which can 
also do multiple language translations, or use a different storage 
backend, etc.).

<snip original code>

-- 
Yours,

Andrei

=====
Mail address in header catches spam. Real contact info:
''.join([''.join(s) for s in zip(
"poet at aao.l pmfe!Pes ontuei ulcpss  edtels,s hr' one oC.",
"rjc5wndon.Sa-re laed o s npbi ot.Ira h it oteesn edt C")])



More information about the Tutor mailing list