I am new to python and computer programming. I am trying to save the questor.py file so that it retains it's data. My problem is that I don't really understand how to do it. I have been reviewing tutorials and I have gotten this far, but the data still doesn't save. Can someone tell me what it is I am overlooking?
# questor.py
# define some constants for future use
kQuestion = 'question'
kGuess = 'guess'
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')
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
def retrieve(self, file):
self.desc = file.readline().rstrip()
self.nodetype = file.readline().rstrip()
if self.nodetype == kQuestion:
slef.nodes = {0:Qnode(''), 1:Qnode('')}
retrieve(self.nodes[0], file)
retrieve(self.nodes[1], file)
return
def save(self, file):
file.write(self.desc + "\n")
file.write(self.nodetype + "\n")
if self.nodetype == kQuestion:
save(self.nodes[0], file)
save(self.nodes[1], file)
return
# 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!"
class Qnode:
# initialization method
def __init__(self,guess):
self.nodetype = kGuess
self.desc = guess
def retrieve(self, file):
self.desc = file.readline().rstrip()
self.nodetype = file.readline().rstrip()
if self.nodetype == kQuestion:
slef.nodes = {0:Qnode(''), 1:Qnode('')}
retrieve(self.nodes[0], file)
retrieve(self.nodes[1], file)
return
def save(self, file):
file.write(self.desc + "\n")
file.write(self.nodetype + "\n")
if self.nodetype == kQuestion:
save(self.nodes[0], file)
save(self.nodes[1], file)
return
# 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 nod!
e, given
a boolean response
def nextnode(self,answer):
return self.nodes[answer]
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 ):
# 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)
newAnsNode = Qnode(newitem)
oldAnsNode = Qnode(self.desc)
# turn this node into a question node
self.nodetype = kQuestion
self.desc = question
self.nodetype = kQuestion
self.desc = question
# assign the yes and no nodes appropriately
self.nodes = {newanswer:newAnsNode, not newanswer:oldAnsNode}
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) )
# 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
try:
f = open('c:\nodetree.txt', 'r')
cont = f.readlines()
known = cont.count('guess\n')
del cont
f.seek(0)
topNode = Qnode('')
retrieve(topNode, f)
f.close()
except:
topNode = Qnode('python')
known = 1
done = 0
while not done:
# ask questions till we get to the end
result = traverse( topNode )
# if result is a node, we nee! d 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
# start with a single guess node
try:
f = open('c:\nodetree.txt', 'r')
cont = f.readlines()
known = cont.count('guess\n')
del cont
f.seek(0)
topNode = Qnode('')
retrieve(topNode, f)
f.close()
except:
topNode = Qnode('python')
known = 1
done = 0
while not done:
# ask questions till we get to the end
result = traverse( topNode )
# if result is a node, we nee! d 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
done = not yesno("Do another? ")
# immediate-mode commands, for drag-and-drop or execfile() execution
if __name__ == '__main__':
run()
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
Relax. Yahoo! Mail virus scanning helps detect nasty viruses!
-- http://mail.python.org/mailman/listinfo/python-list