The Artima Developer Community
Sponsored Link

Python Answers Forum
Help with Questor.py code

0 replies on 1 page.

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 0 replies on 1 page
corey

Posts: 1
Nickname: cassie2002
Registered: Aug, 2005

Help with Questor.py code Posted: Aug 23, 2005 11:46 PM
Reply to this message Reply
Advertisement
Hi I would like some help with the following code. I have tried everything but can't figure out how to make this simple program store the input of a user into a file and retrieve it the next time it is opened. I have it where it stores all the data in the file but only retrieves part of that file. Any advice would be great.


#!/usr/bin/Python
#Filename: questor.py

# define some constants for future use

import cPickle as p
#import pickle as p
questionsfile = 'questions.data'

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')
# if len(questionsfile) != 0:
f = file(questionsfile)
if f.read(1) != "":
f.seek(0)
storedquestions = p.load(f)
topNode = storedquestions
else:
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
f = file(questionsfile, 'a')
questions = result
p.dump(questions, f) # dump the object to a file
f.close()
print

done = not yesno("Do another? ")
# Write to the file

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)"

Topic: can't find a needed method in ftplib Previous Topic   Next Topic Topic: Python 2.1 and MySQL connection problem

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use