Help needed in probability calculator project

Hello guys,
I have written code for the probability calculator. As of now, one test case fails i.e.

 python
Probability: 0.0006666666666666666
FAIL: test_prob_experiment (test_module.UnitTests)
Traceback (most recent call last):
  File "/home/runner/boilerplate-probability-calculator/", line 26, in test_prob_experiment
    self.assertAlmostEqual(actual, expected, delta = 0.01, msg = 'Expected experiment method to return a different probability.')
AssertionError: 0.002 != 0.272 within 0.01 delta (0.27 difference) : Expected experiment method to return a different probability.

Ran 3 tests in 0.003s

FAILED (failures=1)

Here is my code

import copy
import random
# Consider using the modules imported above.

class Hat:
    def __init__(self,**kwargs):
        self.contents_dict = {}
        self.contents = []
        # self.contents_copy=copy.deepcopy(self.contents)
        for key,value in kwargs.items():
            for i in range(0,value):
    def draw(self,number_of_balls):
        if number_of_balls>len(self.contents):
            return self.contents
            x = random.sample(range(len(self.contents)), number_of_balls)
            for i in x:
            return drawn_items

def experiment(hat, expected_balls, num_balls_drawn, num_experiments):
    correct_results = 0
    contents_copy = copy.deepcopy(hat.contents)

    for key,value in expected_balls.items():
            for i in range(0,value):
    # print(f"contents:{contents}")
    for i in range(0, num_experiments):
        hat.contents = contents_copy
        drawn_balls = hat.draw(num_balls_drawn)
        # print(f'drawn_balls:{drawn_balls}')
        if all(items in drawn_balls for items in contents):
    # print(correct_results)

    return (correct_results/num_experiments)

Tried various things but not sure where I am going wrong, can someone please help. Also, any suggestions to improve existing code will be helpful

The main problem is here:

If you add a print(hat.contents) right after this, you’ll see that it’s not the copy you expect since this will use a reference and not the copy.deepcopy() you used earlier. You need to make a new copy of the entire Hat() each time you run the experiment. If you print its contents, it should be the same before every experiment.

Also, to check your conditional testing if the draw is good, print the drawn and expected balls and you’ll see that even when the condition evaluates to true, the drawn and expected balls do not match, so you will need to change the test.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.