From 91ba00e6eaaae0a1823f8706f2efcdcbd72fae08 Mon Sep 17 00:00:00 2001 From: Michael Pilosov Date: Sat, 26 Nov 2022 21:45:09 -0700 Subject: [PATCH] finalize adding bets, printing them out in a pretty way --- app.py | 2 +- pyroulette/roulette.py | 32 ++++++++++++++++++++++---------- strategy.py | 9 +++++++-- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/app.py b/app.py index a1c9df7..3aff9ea 100644 --- a/app.py +++ b/app.py @@ -8,7 +8,7 @@ from pyroulette import ( Strategy, expected, generate_players, - init_bet, + init_spread, interpret_bet, place_bet, simulate_games, diff --git a/pyroulette/roulette.py b/pyroulette/roulette.py index 8c3fee1..4a6d532 100644 --- a/pyroulette/roulette.py +++ b/pyroulette/roulette.py @@ -11,7 +11,7 @@ import json # Bet = Dict[int, float] -def init_bet() -> Dict[int, float]: +def init_spread() -> Dict[int, float]: """ Initializes a bet with all individual placements set to 0. @@ -43,24 +43,30 @@ def combine_bets(bet_1: Bet, bet_2: Bet) -> Bet: The combined bet. """ # TODO: can remove the default 0. - return {k: bet_1.get(k, 0) + bet_2.get(k, 0) for k in set(bet_1) | set(bet_2)} + return Bet({k: bet_1[k] + bet_2[k] for k in set(bet_1) | set(bet_2)}) @dataclass class Bet: """A class for representing a bet.""" - spread: Dict[int, float] = field(default_factory=init_bet) + spread: Dict[int, float] = field(default_factory=init_spread) + + @property + def __nonzeros__(self) -> Dict[int, float]: + nonzeros = dict(filter(lambda x: x[1] > 0, self.spread.items())) + nonzeros = {k: round(v, 2) for k, v in nonzeros.items()} + if -1 in nonzeros: + nonzeros["00"] = nonzeros.pop(-1) + return nonzeros def __repr__(self) -> str: """Return a string representation of the bet.""" - nonzeros = dict(filter(lambda x: x[1] > 0, self.spread.items())) - return f"Bet({nonzeros})" + return f"Bet({self.__nonzeros__})" # define the appearance when using print def __str__(self) -> str: - nonzeros = dict(filter(lambda x: x[1] > 0, self.spread.items())) - return json.dumps(nonzeros, indent=4) + return json.dumps(self.__nonzeros__, indent=4) def __dict__(self) -> Dict[int, float]: """Return the bet as a dictionary.""" @@ -68,7 +74,7 @@ class Bet: def __add__(self, other: Bet) -> Bet: """Combine two bets.""" - return Bet(combine_bets(self.spread, other.spread)) + return combine_bets(self, other) def __setitem__(self, __name: int, __value: float) -> None: """Set the value of a placement.""" @@ -82,6 +88,12 @@ class Bet: """Return a copy of the bet.""" return Bet(self.spread.copy()) + def __iter__(self): + return iter(self.spread.keys()) + + def get(self, __name: int) -> float: + return self.spread.get(__name, 0) + SINGLE_BETS = {str(i) for i in range(-1, 37)} @@ -191,7 +203,7 @@ def interpret_bet(on="red", amount=0, bet=Optional[Bet]) -> Bet: on in ALIASES ), f"Bet `{on}` not understood. Choose from feasible moves:\n {FEASIBLE_MOVES}" if bet is None: - bet = init_bet() + bet = Bet() else: bet = bet.copy() REDS = {1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36} @@ -403,7 +415,7 @@ class Strategy: return reduce( lambda bet, placement: combine_bets(bet, placement.bet()), placements, - {}, + Bet(), ) diff --git a/strategy.py b/strategy.py index c21236d..fb83576 100644 --- a/strategy.py +++ b/strategy.py @@ -1,7 +1,12 @@ from pyroulette.roulette import Placement, Strategy, Bet if __name__ == "__main__": + print(Bet({-1: 1}).__repr__()) # this should print with 00 + print('get test') + print(Bet({0: 1})[21]) + print(Bet({21: 1})[21]) + print('sum test') print(Bet({0: 1}) + Bet({0: 1})) - print(Bet({0: 1}).__repr__()) print(Bet({0: 1}) + Bet()) - print(Strategy(placements=[Placement(1, 10, "red"), Placement(2, 10, "black")]).get_bet()) \ No newline at end of file + # this should return 1's in everything but 0 and -1. + print(Strategy(placements=[Placement(18, 1, "red"), Placement(18, 1, "black")]).get_bet()) \ No newline at end of file