Hello, i’m doing the probability calculator project and am kind of stuck.
I get a much higher probability than I should. And can’t seem to find an error in my code. So maybe a fresh pair of eyes would help.
Here is my code and the link to my replit:
“boilerplate-probability-calculator - Nix (beta) Repl - Replit”
import copy
import random
# Consider using the modules imported above.
class Hat:
# Create a class
# Ask for a dictionary of arguments
#
def __init__(self, **balls):
""" I should Iterate over the dictionary of atributes,
It should iterate over each key
and add the items to a list a number of times equal to
its corresponding number"""
self.contents = []
for key in balls:
self.contents.extend([key for value in range(balls[key])])
def draw(self, numBalls):
"""accepts an argument indicating the number of balls to draw from the hat.
This method should remove balls at random from contents and return those balls as a list of strings.
The balls should not go back into the hat during the draw, similar to an urn experiment without replacement.
If the number of balls to draw exceeds the available quantity, return all the balls.
"""
if numBalls > len(self.contents):
return self.contents
else:
randomChoices = []
for _ in range(numBalls):
choice = random.choice(self.contents)
self.contents.remove(choice)
randomChoices.append(choice)
return randomChoices
def experiment(hat, expected_balls, num_balls_drawn, num_experiments):
expected_list = []
for key in expected_balls:
expected_list.extend([key for value in range(expected_balls[key])])
wins = 0
for _ in range(num_experiments):
copy_hat = copy.deepcopy(hat)
single_draw = copy_hat.draw(num_balls_drawn)
#print(single_draw)
#print(expected_list)
#print(wins)
if all([item in single_draw for item in expected_list]):
wins += 1
return wins/num_experiments
Many thanks in advance