self.word = word
self.length = length
+# exception for words containing non-alpha characters
+class WordCharsException (Exception):
+ def __init__ (self, word):
+ self.word = word
+
# exception for intersecting words
class IntersectWordException (Exception):
def __init__ (self, word, length):
def __init__ (self):
self.msg = "No words in grid"
+# exception to raise when solution is imcomplete when trying to verify it
+class IncompleteSolutionException (Exception):
+ def __init__ (self):
+ self.msg = "Solution incomplete"
+
class CrosswordPuzzle:
def __init__ (self, rows, cols):
# define number of rows and columns
# if the grid is frozen then abort
self.assert_unfrozen_grid ()
+ # if the word has non-alphabetic characters
+ if not word.isalpha ():
+ raise WordCharsException (word)
+
# if the word length greater than totalrows - startrow
if len(word) > self.rows - row:
raise TooLongWordException (word, len(word))
# if the grid is frozen then abort
self.assert_unfrozen_grid ()
+ # if the word has non-alphabetic characters
+ if not word.isalpha ():
+ raise WordCharsException (word)
+
# is the word length greater than totalcols - startcol?
if len(word) > self.cols - col:
raise TooLongWordException (word, len(word))
for col in range (self.cols):
self.data[row][col].revealed = revealed
+ # clear the guesses for the board
+ def clear_guesses (self):
+ # run through the grid and set the guesses to None
+ for row in range (self.rows):
+ for col in range (self.cols):
+ self.data[row][col].guess = None
+
+ # verify the solution - return True if all guessed characters are correct
+ # return False if some of them are wrong.
+ # if the board is not completed as yet, raise a IncompleteSolutionException
+ def is_solution_correct (self):
+ # run through the grid and check for each character in occupied cells
+ flag = True
+ for row in range (self.rows):
+ for col in range (self.cols):
+ if (self.data[row][col].occupied_across is True or
+ self.data[row][col].occupied_down is True):
+ # if there is no guess at a particular location raise
+ # the incomplete solution exception
+ if not self.data[row][col].guess:
+ raise IncompleteSolutionException
+ # if a character doesn't match, return False
+ if self.data[row][col].char <> self.data[row][col].guess:
+ flag = False
+
+ # finally return result
+ return flag