code: def get_card(self, index=-1, cache=True, remove=True):
          
          if len(self.cards) < index:
              return None
  
          retriever = self.cards.pop if remove else self.cards.__getitem__
          code = retriever(index)
  
          if self.library:
              return self.library.load_card(code, cache)
          else:
              return code
docs: Retrieve a card any number of cards from the top. Returns a
          ``Card`` object loaded from a library if one is specified otherwise
          just it will simply return its code.
  
          If `index` is not set then the top  card will be retrieved.
  
          If cache is set to True (the default) it will tell the library to cache
          the returned card for faster look-ups in the future.
  
          If remove is true then the card will be removed from the deck before
          returning it.