from die import Die from tqdm import tqdm class FiveDice: def __init__(self): self.dice = [Die() for number in range(5)] def roll(self): for die in self.dice: die.roll() return self.faces() def faces(self): return [die.face for die in self.dice] def all_ones(self): for face in self.faces(): if face != 1: return False return True def findn(self,nofakind): """ dice.findn(n) determines whether there are at least n of a kind in the roll and returns true if so and returns false otherwise. """ nmuch = {} # create an empty dictionary to associate each face rolled with its frequency for die in dice.faces(): # go through each dice rolled if die in nmuch: # check if the dictionary already has the face included, and if so increase its frequency by 1 nmuch[die] += 1 if nmuch[die]==nofakind: # each time the dictionary is updated, check if the desired frequency has been achieved, and if so return true return True else: nmuch[die] = 1 # add the face to the dictionary with frequency 1 if it has not already been included return False # if the desired frequency was never achieved, return false def is_three_of_a_kind(self): """ I didn't read the assignment carefully... this should return the result of dice.findn(3) """ return dice.findn(3) def is_four_of_a_kind(self): """ same issue... returns the result of dice.findn(4) """ return dice.findn(4) dice = FiveDice() successes = 0 trials = 1000000 print("THIS IS THE ORIGINAL SIMULATION:") for trial in tqdm(range(trials)): dice.roll() if dice.all_ones(): successes += 1 print(successes/trials) print("\n") print("THIS IS TO CHECK IF THERE ARE AT LEAST THREE OF A KIND:") successes = 0 for trial in tqdm(range(trials)): dice.roll() # if dice.findn(3): if dice.is_three_of_a_kind(): successes += 1 print(successes/trials) print("\n") print("THIS IS TO CHECK IF THERE ARE AT LEAST FOUR OF A KIND:") successes = 0 for trial in tqdm(range(trials)): dice.roll() # if dice.findn(4): if dice.is_four_of_a_kind(): successes += 1 print(successes/trials)