Пламена обнови решението на 29.11.2022 17:36 (преди почти 3 години)
+class ChessException(Exception):
Можеш да минеш и само с един pass в тялото на класа, защото този инициализатор реално не прави нищо.
+    def __init__(self, message):
+        self.message = message
+        super().__init__(self.message)
+
+
+class ChessPosition:
+    def __init__(self, fen):
+        self.fen = fen
+        self.board = []
+
+        def fen_to_board():
Не е уместно да дефинираш функция в инициализатора си. По-добре я извади като отделен метод на класа.
+            for row in self.fen.split('/'):
+                brow = []
+                for c in row:
+                    if c == ' ':
+                        break
+                    elif c in '12345678':
+                        brow.extend(['--'] * int(c))
+                    else:
+                        brow.append(c)
+                self.board.append(brow)
+            return self.board
+        self.board = fen_to_board()
+        for i, x in enumerate(self.board):
+            if 'k' in x:
+                index = x.index('k')
+                if 'K' in [self.board[i-1][index-1:index+1], self.board[i][index-1], self.board[i][index+1], self.board[i+1][index-1:index+1]]:
+                    raise ChessException('kings')
+        countw, countb = 0, 0
+        for row in self.board:
+            for c in row:
+                if c == 'K':
+                    countw += 1
+                if c == 'k':
+                    countb += 1
+        if countw != 1 or countb != 1:
+            raise ChessException('kings')
+        if 'P' in self.board[7] or 'p' in self.board[0]:
+            raise ChessException('pawns')
+
+    def get_white_score(self):
+        list_of_whites = []
+        for row in self.board:
+            for c in row:
+                if c.isupper():
+                    list_of_whites.append(c.lower())
+        return ChessScore(list_of_whites)
+
+    def get_black_score(self):
+        list_of_blacks = []
+        for row in self.board:
+            for c in row:
+                if c.islower():
+                    list_of_blacks.append(c)
+        return ChessScore(list_of_blacks)
+
+    def white_is_winning(self):
+        return bool(self.get_white_score() > self.get_black_score())
Не е нужно да използваш bool.
+
+    def black_is_winning(self):
+        return not self.white_is_winning()
+
+    def is_equal(self):
+        return bool(self.get_white_score() == self.get_black_score())
+
+    def __repr__(self):
+        return f"ChessPosition {self.fen}"
+
+    def __str__(self):
+        return f"{self.fen}"
+
+    def __len__(self):
+        count_pieces = 0
+        for r in self.board:
+            for c in r:
+                if c.lower() in {'r', 'n', 'b', 'q', 'k', 'p'}:
+                    count_pieces += 1
+        return count_pieces
+
+    def __position__(self, string_position):
+        index1 = ord(string_position[0]) - 64
+        index2 = string_position[1]
+        return self.board[index2-1][index1-1]
+
+
+class ChessScore:
+    def __init__(self, pieces):
+        self.pieces = pieces
+
+    def __int__(self):
+        count = 0
+        for piece in self.pieces:
+            if piece == 'r':
+                count += 5
+            elif piece == 'n':
+                count += 3
+            elif piece == 'b':
+                count += 3
+            elif piece == 'q':
+                count += 9
+            elif piece == 'k':
+                count += 4
+            elif piece == 'p':
+                count += 1
+        return count
+
+    def __add__(self, other):
+        return int(self)+int(other)
Моля слагай интервали около равното.
+
+    def __sub__(self, other):
+        return int(self)-int(other)
+
+    def __lt__(self, other):
+        return int(self) < int(other)
+
+    def __le__(self, other):
+        return int(self) <= int(other)
+
+    def __eq__(self, other):
+        return int(self) == int(other)
+
+    def __ne__(self, other):
+        return int(self) != int(other)
+
+    def __gt__(self, other):
+        return int(self) > int(other)
+
+    def __ge__(self, other):
+        return int(self) >= int(other)

Можеш да минеш и само с един
passв тялото на класа, защото този инициализатор реално не прави нищо.Не е уместно да дефинираш функция в инициализатора си. По-добре я извади като отделен метод на класа.
Не е нужно да използваш
bool.Моля слагай интервали около равното.