ThinkPython book exercises