469,934 Members | 2,049 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,934 developers. It's quick & easy.

Clueless with cPickle

les
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
Jul 19 '05 #1
2 2454
les wrote:
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


You defined questorfile, not questorlistfile.

--
If I have been able to see further, it was only because I stood
on the shoulders of giants. -- Isaac Newton

Roel Schroeven
Jul 19 '05 #2
les
OK, looks like it is time for a break!

Thanks for the replies!

Jul 19 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

13 posts views Thread by Drochom | last post: by
reply views Thread by Richard Kessler | last post: by
2 posts views Thread by sh | last post: by
5 posts views Thread by Alex Polite | last post: by
1 post views Thread by A.B., Khalid | last post: by
5 posts views Thread by Marcus Lowland | last post: by
1 post views Thread by Carl J. Van Arsdall | last post: by
5 posts views Thread by Victor Kryukov | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.