Ива обнови решението на 29.11.2022 17:34 (преди почти 3 години)
+import re
+
+class ChessException(Exception):
Можеш да минеш и само с един pass в тялото на класа, защото този инициализатор реално не прави нищо.
+    def __init__(self, message='chess error occured'):
+        super().__init__(message)
+
+class ChessPosition:
+    def __init__(self, fen):
+        self.__validateKings(fen, 'K')
Според мен една долна черта е достатъчно. https://fmi.py-bg.net/tips/2
+        self.__validateKings(fen, 'k')
+        self.__validateKingsPosition(fen)
+        self.__validatePawnsPosition(fen)
+        self.fen = fen
+        
+
+    def get_white_score(self):
+        figures = []
+        for idx in range(0, len(self.fen)):
+            element = self.fen[idx]
+            if 'rnbkqp'.find(element) != -1:
+                figures.append(element)
+        return ChessScore(figures)
+
+    def get_black_score(self):
+        figures = []
+        for idx in range(0, len(self.fen)):
+            element = self.fen[idx]
+            if 'RNBKQP'.find(element) != -1:
+                figures.append(element)
+        return ChessScore(figures)
+
+    def white_is_winning(self):
+        return self.get_white_score() > self.get_black_score()
+
+    def black_is_winning(self):
+        return self.get_white_score() < self.get_black_score()
+
+    def is_equal(self):
+        return self.get_white_score() == self.get_black_score()
+
+    def __print__(o):
Доколкото знам такъв дъндър метод няма.
+        print(o.fen)
+
+    def __len__(o):
Прието е аргументът, показващ текущата иснтанция да е self
+        return len(re.sub("[/1-8]", '', o.fen))
+
+    def __getitem__(self, position):
+        row = self.fen.split('/')[ord(position[0]) - ord('A')]
+        for idx in range(0, len(row)):
+            element = row[idx]
+            if idx == position and ('rnbkqp'.find(element) != -1 or 'RNBKQP'.find(element) != -1):
+                return element
+            else:
+                try:
+                    int(element)
+                except ValueError:
+                    continue
+            idx += int(element)
+        return -1
+
+    
+
+    def __validateKings(self, fen, char):
+        idx1 = fen.find(char)
+        idx2 = fen.rfind(char)
+        if idx1 == -1 or idx1 != idx2:
+            raise ChessException('kings')
+
+    def __validateKingsPosition(self, fen):
Моля дефинирай методите със snake_case
+        rows = fen.split('/')
+        for i in range(7):
+            idx1 = rows[i].find('K')
+            idx2 = rows[i].find('k')
+            if idx1 != -1 and idx2 == -1:
+                idx2 = rows[i+1].find('k')
+            if idx1 == -1 and idx2 != -1:
+                idx1 = rows[i+1].find('K')
+            if idx1 != -1 and idx2 != -1 and (abs(idx1 - idx2) == 1 or idx1 - idx2 == 0):
+                raise ChessException('kings')
+
+        idx1 = rows[7].find('K')
+        idx2 = rows[7].find('k')
+        if idx1 != -1 and idx2 != -1 and abs(idx1 - idx2) == 1:
+            raise ChessException('kings')
+
+    def __validatePawnsPosition(self, fen):
+        rows = fen.split('/')
+        idx1 = rows[0].find('p')
+        idx2 = rows[0].find('P')
+        idx3 = rows[7].find('p')
+        idx4 = rows[7].find('P')
+        if idx1 != -1 or idx2 != -1 or idx3 != -1 or idx4 != -1:
+            raise ChessException('pawns')
+
+class ChessScore:
+    def __init__(self, list):
+        self.figures = list
+        self.points = self.__calculatePointsFromFigures(list)
+
+    def __calculatePointsFromFigures(self, list):
+        points = 0
+        for x in list:
+            if x == 'r':
+                points += 5
+            elif x == 'n':
+                points += 3
+            elif x == 'b':
+                points += 3
+            elif x == 'k':
+                points += 4
+            elif x == 'q':
+                points += 9
+            elif x == 'p':
+                points += 1
+        return points
+
+    def __int__(o):
+        return o.points
+
+    def __add__(self, o):
+        return self.points + o.points
+
+    def __sub__(self, o):
+        return self.points - o.points
+    
+    def __lt__(self, o):
+        return self.points < o.points
+
+    def __le__(self, o):
+        return self.points <= o.points
+
+    def __eq__(self, o):
+        return self.points == o.points
+
+    def __ne__(self, o):
+        return self.points != o.points
+
+    def	__gt__(self, o):
+        return self.points > o.points
+        

Можеш да минеш и само с един
passв тялото на класа, защото този инициализатор реално не прави нищо.Според мен една долна черта е достатъчно. https://fmi.py-bg.net/tips/2
Доколкото знам такъв дъндър метод няма.
Прието е аргументът, показващ текущата иснтанция да е
selfМоля дефинирай методите със
snake_case