def isValidMove(board, move): blankx, blanky = getBlankPosition(board) return (move == UP and blanky != len(board) - 1) or \ (move == DOWN and blanky != 0) or \ (move == LEFT and blankx != len(board) - 1) or \ (move == RIGHT and blankx != 0)
isValidMove() function is passed a board data structure and a move the player would want to make. The return value is
True if this move is possible and
False if it is not. For example, you cannot slide a tile to the left one hundred times in a row, because eventually the blank space will be at the edge and there are no more tiles to slide to the left.
Whether a move is valid or not depends on where the blank space is. This function makes a call to
getBlankPosition() to find the X and Y coordinates of the blank spot. Lines 3  to 6  are a
return statement with a single expression. The
\ slashes at the end of the first three lines tells the Python interpreter that that is not the end of the line of code (even though it is at the end of the line). This will let us split up a "line of code" across multiple lines to look pretty, rather than just have one very long unreadable line.
Because the parts of this expression in parentheses are joined by or operators, only one of them needs to be
True for the entire expression to be
True. Each of these parts checks what the intended move is and then sees if the coordinate of the blank space allows that move.