Решение на От ливадите до Лас Вегас (и назад) от Ива Гочева
Обратно към всички решения
Към профила на Ива Гочева
Резултати
- 5 точки от тестове
- 0 бонус точки
- 5 точки общо
- 7 успешни тест(а)
- 8 неуспешни тест(а)
Код
Лог от изпълнението
..FF.EFFEEE....
======================================================================
ERROR: test_init_filtered (test.TestDeck)
Test initialized cards with filter.
----------------------------------------------------------------------
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
TypeError: unhashable type: 'list'
======================================================================
ERROR: test_collecting_cards_before_dealing (test.TestGame)
Test collecting the cards before a new deal.
----------------------------------------------------------------------
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
ValueError: empty range for randrange() (1, 0, -1)
======================================================================
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
======================================================================
ERROR: 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
IndexError: list index out of range
======================================================================
FAIL: test_get_face (test.TestCard)
Test the get_face method.
----------------------------------------------------------------------
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: 'spades' != 'A'
- spades
+ A
======================================================================
FAIL: test_get_suit (test.TestCard)
Test the get_suit method.
----------------------------------------------------------------------
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: 'A' != 'spades'
- A
+ spades
======================================================================
FAIL: test_init_regular (test.TestDeck)
Test initialized cards without filter.
----------------------------------------------------------------------
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: Items in the first set but not the second:
('clubs', 'Q')
('spades', '5')
('diamonds', 'Q')
('clubs', '2')
('clubs', '9')
('spades', 'A')
('diamonds', '5')
('clubs', '5')
('diamonds', '2')
('diamonds', '9')
('spades', '3')
('spades', '8')
('clubs', 'A')
('clubs', '3')
('diamonds', '8')
('clubs', '8')
('diamonds', 'A')
('hearts', '9')
('hearts', 'Q')
('diamonds', '3')
('hearts', '5')
('hearts', '2')
('spades', 'J')
('clubs', 'J')
('spades', '4')
('hearts', '3')
('hearts', '8')
('diamonds', 'J')
('hearts', 'A')
('spades', '6')
('spades', '7')
('diamonds', '4')
('clubs', '4')
('diamonds', '6')
('clubs', '6')
('clubs', '7')
('diamonds', '7')
('hearts', 'J')
('spades', '10')
('hearts', '4')
('spades', 'K')
('hearts', '6')
('diamonds', '10')
('clubs', '10')
('hearts', '7')
('clubs', 'K')
('diamonds', 'K')
('hearts', '10')
('spades', 'Q')
('spades', '2')
('spades', '9')
('hearts', 'K')
======================================================================
FAIL: test_shuffling_deck (test.TestDeck)
Test shuffling a deck.
----------------------------------------------------------------------
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: [] == []
----------------------------------------------------------------------
Ran 15 tests in 0.183s
FAILED (failures=4, errors=4)
История (1 версия и 18 коментара)
Ива обнови решението на 15.11.2022 14:38 (преди около 2 години)
Убеди се, че използваш реда на атрибутите, както са дефинирани в условието, защото иначе ще имаш грешни тестове :(
Бих използвал protected имена на атрибути като тези, които не използваш извън класа -
self._suit
*face_filter
значи, че можеш да подадеш и повече от един аргумент на този метод, а ти искаш да можеш да подаваш само един (или нула). За да стане optional, трябва просто да добавиш стойност по подразбиране.Класът ти трябва да може да се инициализира дори без да дам
face_filter
, а сега това няма да се случи, защото няма да му добавиш карти. При инициализиране без филтър, трябва да получа тесте с всички 52 карти.for suit in suits
е за предпочитане. Първо, после не бъркаш в колекцията по индекс, а директно използваш обекта. Второ, не се налага да хардкоудваш дължината на колекцията.Моля слагай интервали след запетаите.
Може и направо
self.cards = second_half + first_half
Това
Card.values
не го виждам дефинирано никъде.Липсва интервал след равното.
Подавайки тесте от друг обект, получаваш много code coupling. По-добре тестето да може само да даде картите, или поне
Game
да ги маха.Ако не ти трявва дадена променлива, именувай я
_
, както е по конвенция.Целта на тази дефиниция не ми е много ясна. Искаш да се подсигуриш, че първото раздаване няма да събира карти от играчите? Ако е така, просто си го остави да събира. Те няма да имат карти, но кодът ти пак трябва да сработи.
Така дефинирано, всяка инстанция на
Game
ще има едно и също тесте. При повече игри ще стане преплитане на тестетата. Правилният начин еdeck
да е атрибут на иснтанцията, а не на класа.dealing_instructions
винаги трябва да бъде един елемент - ние подавамеtuple
. С този синтаксис позволяваш повече аргументи към инициализатора, отлкото е нужно.Моля не слагай скоби около условието на
if
.Моля не използвай еднобуквени имена за променливи.
Ето тук е видно грешното интерпретиране на
dealing_instruction
. Класът ти трябва да очаква:super().__init__(4, 'ltr', (2, 3, 3))
Подсигури се, че подаваш правилните иснтрукции за раздаване, за да не се налага да презаписваш deal_out по-долу.