Антоан обнови решението на 28.11.2022 15:39 (преди почти 2 години)
Този __init__
е излишен. Един pass
в тялото на класа е достатъчен.
pieces_values.get(piece, 0)
прави същото
Така е. Даже и тези за lt/gt и le/ge се припокриват и е нужно само едното от всяка двойка.
Тук можеш просто да циклиш с for _ in range(int(curr_piece))
Не виждам причина да обхождаш с while
и да вдигаш индекса сам.
for row in raw_raws
ще ти е по-удобно.
Бих взел точните координате на двата царя (след като вече съм валидирал, че са точно 2), изчислил разстоянието между тях и сравнил дали е по-малко от едно. Ще спестиш доста логика.
Можеш да използва str.isupper()
Не бях сигурен тук, дали случайно няма да изгърми за '/' или някой невалиден символ за класа ChessScores(цифра, ' ', друг невалиден ASCII код). Но щом предлагаш навярно тестовете няма да са толкова гадни. *имам flashbacks от празния инпут на домашното с телефона и двете поредни невалдни цифри хД
Според мен логиката в този метод не заслужава собствена функция. Има и други неща по-горе, за които не бях сигурен, но това е прекалено лесно и се използва на само едно място (дори да приемем, че ще скейваш, пак не мисля, че ще ти трябва). Не е никакъв проблем, понеже видях няколко подобни - споделям. Много е хубаво кодът да е атомарен и всеки метод да прави точно едно нещо, но ако това нещо е един ред прост експрешън, без някаква силна причина зад него, по-скоро затормозяваш четенето на кода. Мое мнение - бъди свободен да не се съгласиш :)