Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import typing
- class NoBannerError(Exception):
- pass
- class EmptyBannerStorageError(Exception):
- pass
- class BannerStat:
- def __init__(self, clicks: int, shows: int):
- self._clicks = clicks
- self._shows = shows
- def add_click(self) -> None:
- self._clicks += 1
- def add_show(self) -> None:
- self._shows += 1
- @property
- def clicks(self) -> int:
- return self._clicks
- @property
- def shows(self) -> int:
- return self._shows
- def compute_ctr(self, default_ctr: float) -> float:
- """
- Compute banner CTR (click through rate) as clicks / shows
- If banner has zero shows - return `default_ctr`
- """
- if self.shows == 0:
- return default_ctr
- else:
- return self.clicks / self.shows
- class Banner:
- def __init__(self, banner_id: str, cost: int, stat: typing.Optional[BannerStat] = None):
- self._banner_id = banner_id
- self._cost = cost
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement