Боян обнови решението на 06.11.2022 21:34 (преди около 3 години)
Един съвет - изтествай класовете си ръчно с някакви основни стъпки. Според мен ще намериш грешки.
..........F...F
======================================================================
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', 'A'), ('clubs', '5'), ('hearts', '5')} not found in ({('clubs', '6'), ('hearts', '6'), ('hearts', '7')}, {('spades', '8'), ('diamonds', '8'), ('diamonds', '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: {('hearts', '10'), ('diamonds', '9'), ('spades', 'K'), ('clubs', 'J'), ('diamonds', 'A')} not found in ({('clubs', '7'), ('spades', '10'), ('hearts', '6'), ('hearts', '4'), ('diamonds', 'J')}, {('spades', 'A'), ('hearts', 'J'), ('diamonds', '2'), ('diamonds', '8'), ('clubs', 'K')})
----------------------------------------------------------------------
Ran 15 tests in 0.167s
FAILED (failures=2)
Един съвет - изтествай класовете си ръчно с някакви основни стъпки. Според мен ще намериш грешки.
Това май не го използваш.
Ние няма да тестваме с невалидни неща, пък и ти сам правиш тестето и картите, но допълнителната проверка не е проблем. Проблемът е, че просто print-ваш.
Ако ще индикираш грешка, хвърли VlueError.
Бих използвал protected конвенцията за имената на тези и други подобни - self._suit = suit.
Смятам, че кастването към стринг е излишно.
Можеш директно да дефинираш self.cards = [] и да пълниш него. Няма нужда от отделна временна променлива.
Това не са карти, а индекс, така че името на променливата не е много подходящо.
Можеш да минеш и без временна променлива:
self.cards = self.cards[cards_to_cut:] + self.cards[:cards_to_cut]
Бих добавил нещо по-описателно от x. Да, съгласен съм, че е повече от очевидно какво правиш, но добрите навици се създават от простите случаи, а не от сложните.
Прието е променливи, които няма да използваш, да именуваш с _:
[Player() for _ in range(0, number_of_players)]
Ако ще проверяваш стойност на булева променлива, не го прави с ==. Просто if self.has_dealt.
Отделно - не мисля, че проверката тук е нужна. Ако не си раздал картите, играчите ще върнат празен списък и няма да има никаква промяна. Т.е. можеш да си спестиш булевата променлива и проверките тук.
range(0, x) == range(x)