'New to code and bad at inheritance. Trying to make randomized tictactoe AI python3
I'm trying to make an AI that plays with the player but it keeps giving me a TypeError:
TypeError: __init__() missing 1 required positional argument: 'sign'.
from random import choice
class Player:
def __init__(self, name, sign, board = None):
self.name = name # player's name
self.sign = sign # player's sign O or X
self.board = board
def get_sign(self):
# return an instance sign
return self.sign
def get_name(self):
# return an instance name
return self.name
def choose(self, board):
# prompt the user to choose a cell
# if the user enters a valid string and the cell on the board is empty, update the board
# otherwise print a message that the input is wrong and rewrite the prompt
# use the methods board.isempty(cell), and board.set(cell, sign)
while True:
cell = input(f"{self.name}, {self.sign}: Enter a cell [A-C][1-3]:\n")
cell = cell.upper()
#checks to see if input matches to a cell and if the cell is empty
if cell == "A1" or cell == "B1" or cell == "C1" or cell == "A2" or cell == "B2" or cell == "C2" or cell == "A3" or cell == "B3" or cell == "C3":
if board.isempty(cell):
board.set(cell, self.sign)
break
else:
print("You did not choose correctly.")
else:
print("You did not choose correctly.")
class AI(Player):
def __init__(self, name, sign, board = None):
super().__init__(board)
self.sign = sign
self.name = name
def choose(self, board):
valid_moves = ["A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3"]
cell = choice(valid_moves)
board.set(cell, self.sign)
I call it in another file like this:
player1 = AI("Bob", "X", board)
Solution 1:[1]
Your problem is in the inherited class AI.
In this class, you have created __init__ with 3 parameters and inside this __init__ you are calling the __init__ of the parent class, and this parent class is Player. But if you check the Player class, you will see that its __init__ has 3 parameters of which two are mandatory: name and sign.
In the AI class, replace
super().__init__(board)
by
super().__init__(name,sign,board)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Gino Mempin |
