checkpoint for combining bets
This commit is contained in:
parent
afa12da0d8
commit
ff665a5e95
@ -5,14 +5,13 @@ from functools import reduce
|
||||
from random import choice, randint
|
||||
from statistics import mean, stdev
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
|
||||
import json
|
||||
|
||||
# define the class Bet which inherits from Dict[int, float] and define it's __add__ method as calling combine_bets
|
||||
# Bet = Dict[int, float]
|
||||
|
||||
|
||||
def init_bet() -> Bet:
|
||||
def init_bet() -> Dict[int, float]:
|
||||
"""
|
||||
Initializes a bet with all individual placements set to 0.
|
||||
|
||||
@ -25,18 +24,51 @@ def init_bet() -> Bet:
|
||||
return D
|
||||
|
||||
|
||||
|
||||
# for two bets of structure Dict[int, float], iterate through all the keys and add up the values, returning a new dict.
|
||||
def combine_bets(bet_1: Bet, bet_2: Bet) -> Bet:
|
||||
"""
|
||||
Combines two bets into a single bet.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
bet_1 : Bet
|
||||
The first bet to combine.
|
||||
bet_2 : Bet
|
||||
The second bet to combine.
|
||||
|
||||
Returns
|
||||
-------
|
||||
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)}
|
||||
|
||||
|
||||
|
||||
@dataclass
|
||||
class Bet:
|
||||
"""A class for representing a bet."""
|
||||
spread: Dict[int, float] = field(default_factory=init_bet)
|
||||
|
||||
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})"
|
||||
|
||||
# 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)
|
||||
|
||||
def __dict__(self) -> Dict[int, float]:
|
||||
"""Return the bet as a dictionary."""
|
||||
return self.spread
|
||||
|
||||
def __add__(self, other: Bet) -> Bet:
|
||||
"""Combine two bets."""
|
||||
return combine_bets(self.spread, other.spread)
|
||||
return Bet(combine_bets(self.spread, other.spread))
|
||||
|
||||
def __setitem__(self, __name: int, __value: float) -> None:
|
||||
"""Set the value of a placement."""
|
||||
@ -44,7 +76,7 @@ class Bet:
|
||||
|
||||
def __getitem__(self, __name: int) -> float:
|
||||
"""Get the value of a placement."""
|
||||
return self.spread[__name]
|
||||
return self.spread.get(__name, 0)
|
||||
|
||||
def copy(self) -> Bet:
|
||||
"""Return a copy of the bet."""
|
||||
@ -272,27 +304,6 @@ class Placement:
|
||||
"""
|
||||
return interpret_bet(self.on, self.num * self.amt, bet)
|
||||
|
||||
|
||||
# for two bets of structure Dict[int, float], iterate through all the keys and add up the values, returning a new dict.
|
||||
def combine_bets(bet_1: Bet, bet_2: Bet) -> Bet:
|
||||
"""
|
||||
Combines two bets into a single bet.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
bet_1 : Bet
|
||||
The first bet to combine.
|
||||
bet_2 : Bet
|
||||
The second bet to combine.
|
||||
|
||||
Returns
|
||||
-------
|
||||
Bet
|
||||
The combined bet.
|
||||
"""
|
||||
return {k: bet_1.get(k, 0) + bet_2.get(k, 0) for k in set(bet_1) | set(bet_2)}
|
||||
|
||||
|
||||
# for a list of Placements, call the place_bet method on each one and combine the results using reduce and combine_bets, starting with an empty dictionary as the initial argument
|
||||
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
from pyroulette.roulette import Placement, Strategy, Bet
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
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())
|
Loading…
Reference in New Issue
Block a user