Help with questor

S Streat sjstreat2002 at yahoo.com
Thu Feb 23 19:21:51 EST 2006


 
  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'
  # 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
 
 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 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
 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 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

		
---------------------------------
Relax. Yahoo! Mail virus scanning helps detect nasty viruses!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20060223/2fa3d370/attachment.html>


More information about the Python-list mailing list