I am new to python and trying to run this code on VScode. It gives an error saying TypeError: validTicTacToe() missing 1 required positional argument: ‘board’. What am I doing wrong here? I am actually trying to understand how does the self works. I know c++ so if you can explain in comparison to c++ it would be of great help.
Also, this is a leetcode problem, it works good on leetcode, but looks like I have to make some changes before running it on VScode. TIA
def validTicTacToe(self, board) -> bool: X, O = self.countSymbols(board) if O > X: # Os can't be greater than Xs return False elif abs(X-O) > 1: # Difference can only be 1 return False elif X > O: # X can't have more moves than O if O is already won if self.checkTriads(board, 'O'): return False else: # X and O can't have equal moves if X is winning if self.checkTriads(board, 'X'): return False return True def countSymbols(self, board): X = 0 O = 0 for row in board: for i in row: if i == 'X': X+=1 elif i == 'O': O+=1 return X,O def checkTriads(self, board, sym='X'): # Checking for Hight triads i = 0 while i<3: if (board[0][i] == board[1][i] == board[2][i] == sym): return True i+=1 # Checking for width i=0 while i<3: if (board[i][0] == board[i][1] == board[i][2] == sym): return True i+=1 # Checking for diag. if (board[0][0] == board[1][1] == board[2][2] == sym): return True if (board[0][2] == board[1][1] == board[2][0] == sym): return True return False board=["O "," "," "] validTicTacToe(board)```
Advertisement
Answer
You defined your functions in the manner of object methods. These will always automatically receive their instance object as the first parameter. By convention, this parameter is named self
. You however didn’t declare a class to contain these methods. You can either remove the self
parameters from your functions or wrap them inside a class definition:
class TicTacToe(): def validTicTacToe(self, board) -> bool: # ... game = TicTacToe() board = ["O ", " ", " "] game.validTicTacToe(board)
To make actual use of the class mechanism, the board should be a property:
class TicTacToe(): def __init__(self, board): self.board = board def validTicTacToe(self) -> bool: # now you can use self.board instead of passing it around board = ["O ", " ", " "] game = TicTacToe(board) game.validTicTacToe()