Красивый и понятный код = читаемый код.
Нагугли что такое самодокументирующийся код.
Я сам начинающий, но с чего бы я начал это распутывать:
area[0][0]["text"] - тут у тебя куча раз написано примерно одно и то же, меняется только 2 числа.
Легчайшим образом переносится в функцию:
def x_here(x,y):
if area[x][y][text] == X:
return True
else:
return False
тогда одна строка в winner() уже будет вот так выглядеть:
if x_here(0,0) and x_here(0,1) and x_here(0,2):
return "X"
тут у тебя снова есть повторяющиеся элементы
во-первых, координаты для победы заранее известны
win_condition_topleft_to_botright = ((0,0),(0,1),(0,2))
у нас есть кортеж с кортежами. Если в этих координатах везде окажутся иксы - нужно вернуть X (победа). У этого кортежа понятное название (слева вверху к низу справа)
далее нам нужна функция которая примет это условие победы и проверит его:
def check_win_condition(first, second, third):
"""на вход три кортежа, являющиеся координатами игрового поля"""
if x_here(*first) and x_here(*second) and x_here(*third):
return "X"
def winner():
check_win_condition(*win_condition_topleft_to_botright)
check_win_condition(*win_condition_2)
check_win_condition(*win_condition_3)
check_win_condition(*win_condition_4)
И... видишь повторяющиеся элементы? 4 одинаковые строки, в которых меняется только один параметр?
Ah shit, here we go again
Ты знаешь что делать. Действуй.