Hi there,

I am currently working on a noughts and crosses program to try and teach 
myself some very simple AI programming and also to start to use OOP in 
Python.

I am currently writing the framework for the game so I can then write a 
number of functions or a class to deal with the strategy side of things.

I'm stuck trying to write a method which will only accept a legal move 
and will keep asking until it gets a legal answer. I can see that 
working out how to do this efficiently will be very useful in my future 
programming as well.

I currently have the following code.

while 1:
     try:
         xpos = input ("Where do you want to go? ")
         gameboard.addx(xpos)
         gameboard.draw()
         break
     except cantgo:
         print "You can't go there!"

which calls the following method:

     def addx(self,pos):
         if pos in range(1,10) and self.state[pos-1] == "":
             self.state[pos-1] = "X"
         else:
             raise cantgo

The cells of the game are referenced by the numbers 1 to 9. The code 
gave the following error:

Traceback (most recent call last):
   File "noughts_and_crosses.py", line 49, in <module>
     except cantgo:
NameError: name 'cantgo' is not defined

Interesting the first pass of the code above did not return an error but 
the second pass did. Currently I have the same code twice for X's and 
O's. Next, I defined the error using:

cantgo = "can't go"

And now I get:

noughts_and_crosses.py:33: DeprecationWarning: raising a string 
exception is deprecated
   raise cantgo
You can't go there!

But the program will not let me enter any (valid) move at all now. This 
looks like it is not breaking out of the while loop correctly, which, 
when I look back at my code, is to be expected.

Is there a typical 'Pythonic' way of dealing with this situation.




_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to