Решение на Шахматни фенове от Йордан Глигоров
Към профила на Йордан Глигоров
Резултати
- 9 точки от тестове
- 0 бонус точки
- 9 точки общо
- 15 успешни тест(а)
- 2 неуспешни тест(а)
Код
Лог от изпълнението
.E.........F..... ====================================================================== ERROR: test_against_touching_kings (test.TestChessPosition) Test for kings next to each other. ---------------------------------------------------------------------- Traceback (most recent call last): File "/storage/deedee/data/rails/pyfmi-2022/releases/20221115154139/lib/language/python/runner.py", line 67, in thread raise result Exception: No exception raised on: 8/8/8/3kK3/8/8/8/8 ====================================================================== FAIL: test_validation_conflict (test.TestChessPosition) Test for correct Exception on multiple validation fails. ---------------------------------------------------------------------- Traceback (most recent call last): File "/storage/deedee/data/rails/pyfmi-2022/releases/20221115154139/lib/language/python/runner.py", line 67, in thread raise result AssertionError: 'pawns' != 'kings' - pawns + kings ---------------------------------------------------------------------- Ran 17 tests in 0.171s FAILED (failures=1, errors=1)
История (4 версии и 18 коментара)
Йордан обнови решението на 26.11.2022 22:21 (преди почти 2 години)
Реално погледнато, методи на този клас не ти трябва. Да наследиш Exception
е достатъчно.
Това би довело до изключение, което е стринг, съдържащ кавички/апострофи. На теб ти трябва стринг без никакви допълнителни символи.
Можеш да изградиш долния списък от горния, използвайки str.lower
, но и това е ок.
По-добре с една долна черта.
https://fmi.py-bg.net/tips/2
Освен това трябва да е в единствено число, защото държи само един fen
.
Методите се именуват със snake_case
.
Бих казал, че това трябва да е константа на класа. Би било полезно да го използваш и на други места.
Ако искаш да е тук, не е редно да е с главни букви, защото е локална променлива.
Можеш да приложиш lower
на реда и да сравниш само с малки букви, за да спестиш два реда.
Докстринговете трябва да започват с главна буква, да завършват с точка (т.е. да са изречение). Освен това трябва да са в запоевдна форма - "modify", а не "modifies".
el.isdigit()
Тук тирето е ок, но се подсигури, че когато попитам какво има на тази позиция, получавам отговора, който е дефиниран в условието.
Интервалът преди `: е излишен.
Добре е да запазиш този обект в инстанцията, за да не го реинициализираш при всяко извикване на текущия метод.
Можеш и x in WHITE_FIGURES + BLACK_FIGURES
Бих предпочел да подготвя речник, който съдържа fen в готов формат, така че тук просто да попитам какво има на конкретните координати, без да правя допълнителни проверки и модификации на координатите. Тази дефиниция с мапинга на индексите ми седи изкуствено. Обхождайки списъка отзад напред би постигнал същото, но без експлицитно дефиниране на съответствията.
Условието не изисква тази валидация, но след като си решил да я имплементираш, бих сложил някакъв описателен текст на грешката.
По-скоро добави sum
функцията от __str__
тук и преправи __str__
да връща str(int(self))
.
Ще работи по-бързо, защото ще трябва да кастваш към стринг само ако ти трябва като стринг, което е по-рядка операция, имайки предвид естеството на класа.
int(self)
би трябвало да върне същото.
Йордан обнови решението на 28.11.2022 12:07 (преди почти 2 години)
Йордан обнови решението на 28.11.2022 23:36 (преди почти 2 години)
тук трябва да е enumerate(self._modified_fen) защото подолу проверките са в modified_fen и така вече би работило добро
Реално погледнато, методи на този клас не ти трябва. Да наследиш
Exception
е достатъчно.Можеш да изградиш долния списък от горния, използвайки
str.lower
, но и това е ок.тук трябва да е enumerate(self._modified_fen) защото подолу проверките са в modified_fen и така вече би работило добро
Можеш да приложиш
lower
на реда и да сравниш само с малки букви, за да спестиш два реда.Тук тирето е ок, но се подсигури, че когато попитам какво има на тази позиция, получавам отговора, който е дефиниран в условието.
Бих предпочел да подготвя речник, който съдържа fen в готов формат, така че тук просто да попитам какво има на конкретните координати, без да правя допълнителни проверки и модификации на координатите. Тази дефиниция с мапинга на индексите ми седи изкуствено. Обхождайки списъка отзад напред би постигнал същото, но без експлицитно дефиниране на съответствията.