Божидар обнови решението на 06.11.2022 19:49 (преди над 2 години)
Един съвет - изтествай класовете си ръчно с някакви основни стъпки. Според мен ще намериш грешки.
Към профила на Божидар Горанов
.........EF...F ====================================================================== ERROR: test_dealing_ltr (test.TestGame) Test dealing the cards left to right. ---------------------------------------------------------------------- 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 IndexError: list index out of range ====================================================================== FAIL: test_dealing_rtl (test.TestGame) Test dealing the cards right to left. ---------------------------------------------------------------------- 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: {('hearts', '2'), ('spades', '2'), ('diamonds', '4')} not found in ({('clubs', '4'), ('clubs', '2'), ('diamonds', '2')}, {('spades', 'Q'), ('hearts', 'A'), ('spades', 'A')}) ====================================================================== FAIL: test_correct_direction_and_players_deal (test.TestPoker) Test dealing with correct direction and players. ---------------------------------------------------------------------- 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: {('clubs', '5'), ('diamonds', '7'), ('spades', '2'), ('spades', 'J'), ('hearts', '9')} not found in ({('clubs', '2'), ('diamonds', '4'), ('clubs', 'J'), ('spades', '8'), ('hearts', '6')}, {('spades', '5'), ('hearts', 'Q'), ('diamonds', '10'), ('spades', 'A'), ('clubs', '8')}) ---------------------------------------------------------------------- Ran 15 tests in 0.159s FAILED (failures=2, errors=1)
Един съвет - изтествай класовете си ръчно с някакви основни стъпки. Според мен ще намериш грешки.
Бих дефинирал подобни атрибути като self._suit
, защото не се използват извън класа и е логично да са protected.
Не е проблем, но все пак нужно да се отбележи. На английски се казва suit, а не paint.
Тук имаш два почти идентични блока, които просто обхождаш различни колекции. Бих се опитал да ги слея в едно.
Това май не го използваш.
Не е нужно да използваш временна променлива.
Избягвай еднобуквени имена на променливи.
Вместо да циклиш по индекси, цикли по обекти. По-лесно е.
for player in self.players:
for card in player.cards
От идеологична гледна точка, добре е да не бъркаш в елементите на класа, а да му кажеш да вземе/даде елементи и сам да си преправи вътрешните атрибути.
На последната лекция стана въпрос за това.
Просто го вземи предвид за следващи неща. Не е нужно да преправяш.
start_index = self.players.index(player)
Бих се опитал да комбинирам тези два блока. Смятам, че така дори ще се справиш с проблеми, които виждам във втория блок, но няма да коментирам изрично, защото ако изтестваш, ще хванеш сам.
Бих дефинирал тези аргументи като атрибути на класа, без да ги очаквам при инициализиране. Ще е една идея по-лесно да се чете, защото сега са натрупани.
def __init__(self):
self.number_of_players = 4
self.dealing_direction = 'ltr'
А защо не и директно да ги подадем на родителя, който така или иначе ще ги сетне като атрибути?
def __init__(self):
super().__init__(4, 'ltr', (2, 3, 3))
Не е проблем, но все пак нужно да се отбележи. На английски се казва suit, а не paint.
Тук имаш два почти идентични блока, които просто обхождаш различни колекции. Бих се опитал да ги слея в едно.
Бих се опитал да комбинирам тези два блока. Смятам, че така дори ще се справиш с проблеми, които виждам във втория блок, но няма да коментирам изрично, защото ако изтестваш, ще хванеш сам.