Веселина обнови решението на 29.11.2022 02:44 (преди почти 3 години)
+class ChessException(Exception):
Можеш да минеш и само с един pass в тялото на класа, защото този инициализатор реално не прави нищо.
+    """Exception raised by invalid input for the chess game."""
+
+    def __init__(self, message):
+        self._message = message
+        super().__init__(self._message)
+
+
+class ChessPosition:
+    def __init__(self, fen):
По-добре извади валидацията в отделни методи, защото става прекалено претрупано.
+        chess_table = [[], [], [], [], [], [], [], []]
+        count_lines = 0
+        for character in fen:
+            if character.isdigit():
+                for _ in range(int(character)):
+                    chess_table[count_lines].append(None)
+            elif character == '/':
+                count_lines += 1
+                continue
+            else:
+                chess_table[count_lines].append(character)
+        for rows in chess_table:
+            if 'k' in rows:
+                row_black_king = chess_table.index(rows)
+                position_black_king = rows.index('k')
+            if 'K' in rows:
+                row_white_king = chess_table.index(rows)
+                position_white_king = rows.index('K')
+        white_king_count = 0
+        black_king_count = 0
+        for char in fen:
+            if char == 'k':
+                black_king_count += 1
+            elif char == 'K':
+                white_king_count += 1
+        if white_king_count != 1 or black_king_count != 1:
+            raise ChessException('kings')
+        elif (row_white_king == row_black_king and (position_white_king == (position_black_king + 1) or
Този elif ми идва в повече, а и не е одравнен консистентно. Бих ти препоръчал да ги попнеш някакси.
+                                                    position_white_king == (position_black_king - 1))) or (
+                row_white_king == (row_black_king - 1) or
+                row_white_king == (row_black_king + 1)) and (position_black_king - 1) <= position_white_king <= (
+                position_black_king + 1):
+            raise ChessException('kings')
+        elif 'p' in chess_table[0] or 'P' in chess_table[0] or 'p' in chess_table[7] or 'P' in chess_table[7]:
+            raise ChessException('pawns')
+        else:
+            self.table = chess_table
+            self.fen = fen
+
+    def __repr__(self):
+        return self.fen
+
+    def __len__(self):
+        count = 0
+        for character in self.fen:
+            if character.isalpha():
+                count += 1
+        return count
+
+    def get_white_score(self):
+        white_list = []
+        for character in self.fen:
+            if character in {'R', 'N', 'B', 'K', 'Q', 'P'}:
+                white_list.append(character)
+        white_score = ChessScore(white_list)
Може направо return ChessScore(white_list)
+        return white_score
+
+    def get_black_score(self):
+        black_list = []
+        for character in self.fen:
+            if character in {'r', 'n', 'b', 'k', 'q', 'p'}:
+                black_list.append(character)
+        black_score = ChessScore(black_list)
+        return black_score
+
+    def white_is_winning(self):
+        return self.get_white_score() > self.get_black_score()
+
+    def black_is_winning(self):
+        return self.get_black_score() > self.get_white_score()
+
+    def is_equal(self):
+        return self.get_white_score() == self.get_black_score()
+
+    def __getitem__(self, index):
+        columns = {'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4, 'F': 5, 'G': 6, 'H': 7}
+        row = int(index[1])
+        column = index[0]
+        return self.table[8 - row][columns.get(column)]
+
+
+class ChessScore:
+    def __init__(self, list_of_figures):
+        self.score = 0
+        for character in list_of_figures:
+            character = character.lower()
+            match character:
+                case 'r':
+                    self.score += 5
+                case 'n':
+                    self.score += 3
+                case 'b':
+                    self.score += 3
+                case 'k':
+                    self.score += 4
+                case 'q':
+                    self.score += 9
+                case 'p':
+                    self.score += 1
+
+    def __int__(self):
+        return self.score
+
+    def __lt__(self, other):
+        return self.score < other.score
+
+    def __le__(self, other):
+        return self.score <= other.score
+
+    def __eq__(self, other):
+        return self.score == other.score
+
+    def __gt__(self, other):
+        return self.score > other.score
+
+    def __ne__(self, other):
+        return self.score != other.score
+
+    def __add__(self, other):
+        return self.score + other.score
+
+    def __sub__(self, other):
+        return self.score - other.score
+

Можеш да минеш и само с един
passв тялото на класа, защото този инициализатор реално не прави нищо.По-добре извади валидацията в отделни методи, защото става прекалено претрупано.
Този
elifми идва в повече, а и не е одравнен консистентно. Бих ти препоръчал да ги попнеш някакси.Може направо
return ChessScore(white_list)