I am working on a homework assignment and trying to use cPickle to store the answers from questor.py I believe I have the syntax correct but am not sure if I am placing everything where it needs to be. Any help would be greatly appreciated. When I attempt to run what I have I end up with the following:
Traceback (most recent call last): File "/home/les/workspace/Module 2/questor.py", line 18, in ? f = file(questorlistfile) NameError: name 'questorlistfile' is not defined I thought that I had defined questorlistfile on the 4th line below # define some constants for future use import cPickle as p #import pickle as p questorfile = 'questor.data' # the name of the file where we will store the object questorlist = [] # Write to the file f = file(questorfile, 'w') p.dump(questorlist, f) # dump the object to a file f.close() del questorlist # remove the shoplist # Read back from the storage f = file(questorlistfile) storedlist = p.load(f) print storedlist kQuestion = 'question' kGuess = 'guess' # define a function for asking yes/no questions def yesno(prompt): ans = raw_input(prompt) return (ans[0]=='y' or ans[0]=='Y') # define a node in the question tree (either question or guess) class Qnode: # initialization method def __init__(self,guess): self.nodetype = kGuess self.desc = guess # get the question to ask def query(self): if (self.nodetype == kQuestion): return self.desc + " " elif (self.nodetype == kGuess): return "Is it a " + self.desc + "? " else: return "Error: invalid node type!" # return new node, given a boolean response def nextnode(self,answer): return self.nodes[answer] # turn a guess node into a question node and add new item # give a question, the new item, and the answer for that item def makeQuest( self, question, newitem, newanswer ): # create new nodes for the new answer and old answer newAnsNode = Qnode(newitem) oldAnsNode = Qnode(self.desc) # turn this node into a question node self.nodetype = kQuestion self.desc = question # assign the yes and no nodes appropriately self.nodes = {newanswer:newAnsNode, not newanswer:oldAnsNode} def traverse(fromNode): # ask the question yes = yesno( fromNode.query() ) # if this is a guess node, then did we get it right? if (fromNode.nodetype == kGuess): if (yes): print "I'm a genius!!!" return # if we didn't get it right, return the node return fromNode # if it's a question node, then ask another question return traverse( fromNode.nextnode(yes) ) def run(): # start with a single guess node topNode = Qnode('python') done = 0 while not done: # ask questions till we get to the end result = traverse( topNode ) # if result is a node, we need to add a question if (result): item = raw_input("OK, what were you thinking of? ") print "Enter a question that distinguishes a", print item, "from a", result.desc + ":" q = raw_input() ans = yesno("What is the answer for " + item + "? ") result.makeQuest( q, item, ans ) print "Got it." # repeat until done print done = not yesno("Do another? ") print # immediate-mode commands, for drag-and-drop or execfile() execution if __name__ == '__main__': run() print raw_input("press Return>") else: print "Module questor imported." print "To run, type: questor.run()" print "To reload after changes to the source, type: reload(questor)" # end of questor.py -- http://mail.python.org/mailman/listinfo/python-list