Боян обнови решението на 06.11.2022 21:34 (преди около 2 години)
Един съвет - изтествай класовете си ръчно с някакви основни стъпки. Според мен ще намериш грешки.
..........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)