Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Python Game won't save

Status
Not open for further replies.

teknoob

IS-IT--Management
Aug 28, 2010
2
US
I got my game to work but I when I run it and answer the first question it says Could not save.
Why is my game not saving.
It does create the save game file but it is always empty.
Please Help!!!

# 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

# 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:eek:ldAnsNode}


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 = file('questor.dat', 'r')
topNode = pickle.load(f)
f.close()
except:
topNode = Qnode('python')

done = 0
while not done:
try:
f = file('questor.dat', 'w')
pickle.dump(topNode, f)
f.close()
except:
print "Could not save!"
# 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
 
You get the exceprion "Could not save!"
in the function run() when you try to do
Code:
pickle.dump(topNode, f)
here:
Code:
         try:
            f = file('questor.dat', 'w')
            [highlight]pickle.dump(topNode, f)[/highlight]
            f.close()
         except:
            [highlight]print "Could not save!"[/highlight]
pickle is a python module and you forgot to import it before usage.

Import the pickle module on beginning of your code for example here
Code:
# questor.py 
[highlight]import pickle[/highlight] 
# define some constants for future use
...
and it will be ok.
 
Wow, I'm dumb,
I completely overlooked that
Thank you So much
Have a great Day!
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top