avatar Bite 25. No promo twice, keep state in a class

In this bite a real world scenario: PyBites has a growing set of Bites and gives away promos. They choose a Bite randomly but don't want to choose the same one again.

Hence you are provided with a BITES dict and a BITES_DONE set that we use (copies) in the Promo class via its constructor (code provided).

Complete the following methods in the Promo class:

  1. _pick_random_bite is a helper (_ here means "private", not to be called directly on an instance) that picks a randomly available Bite (use the random module).

    When no more Bites are available raise the provided NoBitesAvailable custom exception.

  2. new_bite should use this helper and update self.bites_done (it keeps state, the reason we used a class here).

See also the tests. We hope you learn a thing or two. Enjoy!

Update 4th of Nov 2020: we changed this Bite slightly to localize the Bite constants (thanks Kenneth). No worries: it's all done in the __init__ constructor for you, you don't have to change anything there).

Login and get coding
go back Intermediate level
Bitecoin 3X

322 out of 333 users completed this Bite.
Will you be Pythonista #323 to crack this Bite?
Resolution time: ~50 min. (avg. submissions of 5-240 min.)
Pythonistas rate this Bite 5.94 on a 1-10 difficulty scale.
» Up for a challenge? 💪

We use Python 3.8