Search code examples
pythonsubroutine

Creating a subroutine to tell a player when the coordinates that they have entered are already occupied


Ive created a list containing all the coordinates that are available and so my idea is that once a coordinate has been entered it is removed of the list and placed into another list called Taken_Coord.

But I just know my code can be a lot more efficient than what it is I just not sure how, if more info is needed just let me know Here is the Code:

Board = [[0, 0, 0, 0],
         [0, 0, 0, 0],
         [0, 0, 0, 0],
         [0, 0, 0, 0]]

Coordinate = 0
YCoordinate = 0
ValidMove = False
CurrentSymbol = ''
StartSymbol = ''
PlayerOneSymbol = ''
PlayerTwoSymbol = ''
Answer = ''
Aval_coordinate = ['11','12','13','21','22','23','33','32''31']
Taken_Coord = 0

def CheckValidMove(XCoordinate, YCoordinate, Board, Taken_Coord, Aval_coordinate):
ValidMove = True
Taken_Coord = (''+str(XCoordinate) + str(YCoordinate) + '')
count = Aval_coordinate.count(Taken_Coord)
if (XCoordinate < 1) or (XCoordinate > 3):
    ValidMove = False
if(YCoordinate < 1) or (YCoordinate > 3):
    ValidMove = False
elif count == 0:
    ValidMove = False
elif Taken_Coord == '11':
    Aval_coordinate.pop('11')
elif Taken_Coord == '12':
    Aval_coordinate.pop('12')
elif Taken_Coord == '13':
    Aval_coordinate.pop('13')
elif Taken_Coord == '21':
    Aval_coordinate.pop('21')
elif Taken_Coord == '22':
    Aval_coordinate.pop('22')
elif Taken_Coord == '23':
    Aval_coordinate.pop('23')
elif Taken_Coord == '33':
    Aval_coordinate.pop('33')
elif Taken_Coord == '31':
    Aval_coordinate.pop('31')
elif Taken_Coord == '32':
    Aval_coordinate.pop('32')
return ValidMove

Solution

  • Yeah something like is. Also don't use uppercase names for varibales or functions, they're used for classes. Also the list.pop() method needs the index you want to remove, not the string. Want you probably want to use is remove()

    def check_valid_move(x_coordinate, y_coordinate, board, taken_coord, aval_coordinate):
        taken_coord = f"{x_coordinate}{y_coordinate}"
        if x_coordinate and y_coordinate not in range(1,4):
            return False
        if taken_coord not in aval_coordinate:
            return False
        aval_coordinate.remove(taken_coord)
        return True