Python Forum
is there a way to optimize my checking system? - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: is there a way to optimize my checking system? (/thread-21742.html)



is there a way to optimize my checking system? - GalaxyCoyote - Oct-12-2019

I am coding tic tac toe with lists (not 2d lists, this project was suggested by my teacher) and I want to go above and beyond, so I want to optimize my program as much as possible.

Right now, the part of the program that sticks out like a sore thumb, the checker.

Here is the code
def check(): #will check if Player One/Two has won
    R1CX = Row1.count("X") #side check
    R2CX = Row2.count("X")
    R3CX = Row3.count("X")
    R1CO = Row1.count("O")
    R2CO = Row2.count("O")
    R3CO = Row3.count("O")
    if R1CX == 3 or R2CX == 3 or R3CX == 3:
        print("X Wins!")
        
    if R1CO == 3 or R2CO == 3 or R3CO == 3:
        print("O Wins!")

        
    if Row1[2] == "X" and Row2[1] == "X" and Row3[0] == "X": #dia check
        print("X Wins!")
    if Row1[0] == "X" and Row2[1] == "X" and Row3[2] == "X":
        print("X Wins!")
        
    if Row1[2] == "O" and Row2[1] == "O" and Row3[0] == "O":
        print("O Wins!")
    if Row1[0] == "O" and Row2[1] == "O" and Row3[2] == "O":
        print("O Wins!")

    if Row1[0] == "X" and Row2[0] == "X" and Row3[0] == "X": #upanddown check
        print("X Wins!")
    if Row1[1] == "X" and Row2[1] == "X" and Row3[1] == "X":
        print("X Wins!")
    if Row1[2] == "X" and Row2[2] == "X" and Row3[2] == "X":
        print("X Wins!")

    if Row1[0] == "O" and Row2[0] == "O" and Row3[0] == "O": 
        print("O Wins!!")
    if Row1[1] == "O" and Row2[1] == "O" and Row3[1] == "O":
        print("O Wins!")
    if Row1[2] == "O" and Row2[2] == "O" and Row3[2] == "O":
        print("O Wins!")
By using count I saved myself a few lines but I don't think there is any way to check across lists (again, I have to use regular lists)

If anyone can point me in the right direction, that would be great! Thanks in advance.


RE: is there a way to optimize my checking system? - ichabod801 - Oct-12-2019

What do you mean by regular lists?


RE: is there a way to optimize my checking system? - GalaxyCoyote - Oct-12-2019

(Oct-12-2019, 01:43 PM)ichabod801 Wrote: What do you mean by regular lists?

I mean not a list of lists

e.g.
a = [items]
b = [items]
c = [items]


RE: is there a way to optimize my checking system? - ichabod801 - Oct-12-2019

Are you required to use global variables, too?


RE: is there a way to optimize my checking system? - perfringo - Oct-13-2019

For checking the winner sets might be useful. Just general idea:

>>> first = 'xoo'
>>> second = 'xxx'
>>> third = 'oox'
>>> [row[0] for row in [first, second, third] if len(set(row)) == 1]  # for rows
['x']
>>> set([row[i] for i, row in enumerate([first, second, third])])     # for main diagonal                        
{'x'}