Трябва в конструктора на CardCollection
да имаш стойност по подразбиране за collection
. Нещо като __init__(self, collection=default_value)
Трета задача
Ето и тестове от мене.
@Марио оправи си BelotteDeck да стане BeloteDeck :smile
@Марио, относно теста:
def test_is_iterable(self): self.assertIsInstance(self.deck, collections.Iterable)
предполагам си го направил заради изискването: "... трябва да може да се итерира с for цикъл.". За тази цел обаче не е нужно CardCollection да е инстанция на Iterable и по тази причина ми се струва че теста е леко грешен.
Моля ако съм допуснал грешка/неточност да ме поправите.
StandardDeck()
, не трябва ли да връща колекция а не списък или трябва да предефинирамеstr
метода за да го извежда по дадения в условието начин?Тестовете са ъпдейтнати.
@Милица Мерси.
@Антонио Теста ми проверява за колекция, не списък и е направен така с цел да не покаже решението.
@Йосиф По-принцип има нещо вярно, ако някой това му пречи може да игнорира теста или да го преправи като долният.
Тестовете са с цел да помогнат. Постарал съм се да са пълни, но неточностите са възможни.
Какво очаквате да връщаме в draw(self, index) ,ако index е извън колекцията или ,ако колекцията е празна?
@Марио не питам за тестовете ти, а за примера в условието.
@Ирина според мен трябва да хвърля
IndexError
:)@Антонио StandartDeck() връща CardCollection.
Може ли коментар към решението ми, за да се ориентирам къде греша.
Картите в инстанция на
CardCollection
, винаги ли са подредени по стандартния начин, или това се отнася само заStandardDeck
,BeloteDeck
иSixtySixDeck
?В условието пише:
Стандартната подредба на картите е по боя и след това по вид. Ето стандартната подредба на пълното тесте. Тестетата които StandardDeck, BeloteDeck и SixtySixDeck генерират трябва да са подредени по този начин.
т.е. само картите в StandardDeck, BeloteDeck и SixtySixDeck трябва да са подредени
"Търсенето става чрез сравнение, т.е. не е задължително инстанцията на Асо Пика което подавате на index да е в колекцията, просто трябва да има Асо Пика в нея." - аз не мога да разбера условието тук или е със свободно тълкуване?
Има се предвид, че в колекцията трябва да има каквато и да е инстанция на Асо Пика, а не точно тази, която сме подали.
@Марио струва ми се, че тези два теста са ти грешни. Сложил съм и вариант как мисля, че трябва да се разпишат.
Това е първият метод:
def test_draw_from_top_removes_top_card_and_returns_it(self):
self.assertEqual(self.deck.draw_from_top(), self.collection[-1])
self.assertEqual(self.collection[-2], self.deck.top_card())
def test_draw_from_top_removes_top_card_and_returns_it(self):
self.assertEqual(self.collection[-1], self.deck.draw_from_top())
self.assertEqual(self.collection[-1], self.deck.top_card())И това е вторият метод:
def test_draw_from_bottom_removes_bottom_card_and_returns_it(self):
self.assertEqual(self.deck.draw_from_bottom(), self.collection[0])
self.assertEqual(self.collection[1], self.deck.bottom_card())
def test_draw_from_bottom_removes_bottom_card_and_returns_it(self):
self.assertEqual(self.collection[0], self.deck.draw_from_bottom())
self.assertEqual(self.collection[0], self.deck.bottom_card())@Стефан, на Марио тестовете са добре. Като извадиш най-долната карта, логично, втората става най-долна.
@Стефан, ако ти fail-ват тестовете на @Марио, провери дали не мутираш collection. С тази поправка, която си дал, избягваш да провериш точно това. Методите изпълнявани върху CardCollection, не би трябвало да променят списъка подаден на конструктура.
@Стефан, виж дали не мутираш подадената колекция :), заради което може да ти гърмят точно тези два теста.
Еdit: Не видях горния пост =)
Марио, не съм сигурен, че този тест трябва да е тала:
def test_draw_from_bottom_removes_bottom_card_and_returns_it(self): self.assertEqual(self.deck.draw_from_bottom(),self.collection[0])
Понеже със draw_from_bottom() ти премахваш картата и няма как тя да е вече във колекцията. По скоро трябва да им се разменят местата. Мисля, че същото важи и за другия ти тест относно draw_from_top()
Tеста е така,
draw_frop_top
иdraw_from_bottom
премахват картата отdeck
в случая, аcollection
е списъка, който си подал за да създадешCardCollection
-a и него не трябва да го променяш. :)Някой знае ли тази седмица защо нямаме домашно и какво се очаква на теста на 7ми като материал ? Дали има въпроси от Monty Python ? Чух, че миналата година имало.
Със сигурност ще има поне един въпрос за Monty Python, остава да се договорят колко ще бъдат точно. А за домашното те в началото казаха, че ще бъдат около 6, така че ако имаме всяка седмица ще станат доста повече :)
Все си мисля, че 3тото домашно може да се реши с декоратори по някакъв начин сега като четох за тях.
foo = ['important', 'foo', 'stuff'] def add_foo(klass): klass.foo = foo return klass @add_foo class Person(object): pass brian = Person() print brian.foo ['important', 'foo', 'stuff']
Иначе казано декоратора може да се използва и за един вид метаклас. Някой може ли да ми даде някакви насоки.
Трябва да сте влезли в системата, за да може да отговаряте на теми.