Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from random import SystemRandom
- from itertools import count
- class Craps:
- random = SystemRandom()
- class Holder: # simple class for holding a value so I can assign and retrieve it inside of a while loop
- def __init__(self): self.val = None
- def set(self, val): self.val = val; return val
- def get(self): return self.val
- def print(self, *data, **kwargs):
- if self.verbose:
- for datum in data:
- print(datum, **kwargs)
- def __init__(self, starting_balance, verbose=False):
- self.wallet = starting_balance
- self.wins, self.losses = 0, 0
- self.random = SystemRandom()
- self.verbose = verbose
- self.holder = Craps.Holder()
- self.rolls = {i + 1: 0 for i in range(12)}
- self.roll_cnt = 0
- def roll(self):
- r1, r2 = self.random.randint(1, 6), self.random.randint(1, 6)
- r = r1 + r2
- self.print("Rolled {} and {} ({}).".format(r1, r2, r))
- return r
- def play(self, bet):
- assert isinstance(bet, int)
- while self.holder.set(self.roll()) in {2, 3, 12}:
- pass # keep rolling until you get a 4-11.
- r = self.holder.get()
- self.rolls[r] += 1
- self.print("Continuing to second roll.")
- while self.holder.set(self.roll()) in {4, 5, 6, 7, 8, 9, 10, 11}:
- r = self.holder.get()
- self.rolls[r] += 1
- if r in (7, 11):
- self.wallet += bet
- return True
- r = self.holder.get()
- self.rolls[r] += 1
- self.wallet -= bet
- return False
- @staticmethod
- def safe_cast(new_type, val, default=None):
- try:
- default = new_type(val)
- finally:
- return default
- def run(self, cnt=None):
- assert cnt is None or isinstance(cnt, int)
- iterations = count() if cnt is None else range(cnt)
- for _ in iterations:
- bet = None
- while bet is None or (isinstance(bet, int) and bet > self.wallet):
- bet = self.safe_cast(int, input("Enter a bet (Cash: ${}): ".format(self.wallet)))
- if bet is None:
- print("Invalid. ")
- elif bet > self.wallet:
- print("You only have %{}".format(self.wallet))
- self.play(bet)
- if self.wallet == 0:
- print("You crapped out.")
- return
- c = Craps(100, True)
- c.run(None)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement