Мария обнови решението на 29.11.2022 15:52 (преди почти 3 години)
+class ChessException(Exception):
Можеш да минеш и само с един pass в тялото на класа, защото този инициализатор реално не прави нищо.
+    def __init__(self, message):
+        self._message = message
+        super().__init__(self._message)
+
+def Score(allfigures):
Ако е с главна буква, очаква се да е клас, а това е функция.
Освен това бих препоръчал тази функция да отиде в класа, който я използва.
+    allpoints = 0
+    lst = range(1, 11)
+    nums = [format(x, '') for x in lst]
+    points = {"r" : 5, "n" : 3, "b" : 3, "k" : 4, "q" : 9, "p" : 1}
+    for i in allfigures:
+        if i not in nums and i!='/':
Липсват интервали около !=
+            allpoints += points[i.lower()]
+    return allpoints
+
+class ChessPosition():
+    def __init__(self, fen):
+        self.fen = fen
+        self._wscore=[]
+        self._bscore=[]
+        _row = 1
+        _column = 0
+        firstKing = 0
Имената на променливите трябва да са в snake_case.
+        kngsRow = 0
+        kngsClmn = 0
+        raised = 0
+        lst = range(1, 11)
+        nums = [format(x, '') for x in lst]
str(x) вместо format
+        if fen.count('k') != 1 or fen.count('K')!=1:
+            raise ChessException("kings")
+        for i in fen:
+            if i in nums:
+                _column += int(i)
+            else:
+                _column += 1
+            if i == '/' :
+                _row += 1
+                _column = 0
+            if i.upper() == 'K':
+                if kngsRow != 0:
+                    if _row in (kngsRow, kngsRow + 1) and _column in range(kngsClmn - 1, kngsClmn + 2):
+                        raise ChessException("kings")
+                else:
+                    kngsRow = _row
+                    kngsClmn = _column
+            if i.upper() == 'P':
+                if _row == 1 or _row == 8:
+                    raise ChessException("pawns")
+                    continue
+    def get_white_score(self):
Моля слагай празни редове между методите си.
+        for i in self.fen:
+            if i.isupper() == True:
+                self._wscore.append(i)
+        return Score(self._wscore)
+    def get_black_score(self):
+        for i in self.fen:
+            if i.islower() == True:
+                self._bscore.append(i)
+        return Score(self._bscore)
+    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 __repr__(self):
+        return self.fen
+    def __len__(self):
+        cntfig = 0
+        lst = range(1, 11)
+        nums = [format(x, '') for x in lst]
+        for i in self.fen:
+            if i not in nums and i!='/':
+                cntfig += 1
+        return cntfig
+    def __getitem__(self, pos):
+        column = 0
+        row = 1
+        lst = range(1, 11)
+        nums = [format(x, '') for x in lst]
+        letters = ["A", "B", "C", "D", "E", "F", "G", "H" ]
+        letter = letters.index(pos[0].upper()) + 1
+        for i in self.fen:
+            if i in nums:
+                column += int(i)
+            else:
+                column += 1
+            if i == '/' :
+                row += 1
+                column = 0
+            if column == letter and row == int(pos[1]):
+                return i
+    
+
+class ChessScore():
+    def __init__(self, figures):
+        self.__figures = figures
+        self.Allpoints = Score(self.__figures)
Тук също се очаква да използваш само малки букви, защото е атрибут на клас.
+    def __add__(self, otherChessScore):
+        return self.Allpoints + otherChessScore.Allpoints
+    def __sub__(self, otherChessScore):
+        return self.Allpoints - otherChessScore.Allpoints
+    def __eq__(self, otherChessScore):
+        return self.Allpoints == otherChessScore.Allpoints
+    def __ne__(self, otherChessScore):
+        return self.Allpoints != otherChessScore.Allpoints
+    def __le__(self, otherChessScore):
+        return self.Allpoints <= otherChessScore.Allpoints
+    def __lt__(self, otherChessScore):
+        return self.Allpoints < otherChessScore.Allpoints
+    def __gt__(self, otherChessScore):
+        return self.Allpoints > otherChessScore.Allpoints
+    def __int__(self):
+        return self.Allpoints
+
Добре е да прегледаш PEP8 поне отгоре-отгоре, защото имаш доста пропуски по този фактор.

Можеш да минеш и само с един
passв тялото на класа, защото този инициализатор реално не прави нищо.Ако е с главна буква, очаква се да е клас, а това е функция.
Освен това бих препоръчал тази функция да отиде в класа, който я използва.
Липсват интервали около
!=Имената на променливите трябва да са в
snake_case.str(x)вместоformatМоля слагай празни редове между методите си.
Тук също се очаква да използваш само малки букви, защото е атрибут на клас.