# Probabilty calculator problem

Hi! i have a problem and currently no clue about what’s causing it. I don’t get why the code works well on vsCode but no on replit. this Is my code

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

class Hat:
def __init__(self, **args):
self.contents = []
for k, v in args.items():
self.contents += [k] * v

def draw(self, n):
draws = []
if n > len(self.contents):
return self.contents

for x in range(n):
random_balls = self.contents.pop(int(random.random() * len(self.contents)))
draws.append(random_balls)
return draws

def experiment(hat, expected_balls, num_balls_drawn, num_experiments):
M = 0
color_count = 0

for n in range(num_experiments):
my_hat = copy.deepcopy(hat)
balls_drawn = my_hat.draw(num_balls_drawn)

for color in expected_balls:
if balls_drawn.count(color) >= expected_balls[color]:
color_count += 1
if color_count == len(expected_balls):
M += 1

return M / num_experiments

``````

and this is the error I get:

`````` python main.py
Traceback (most recent call last):
File "main.py", line 7, in <module>
probability = prob_calculator.experiment(
File "/home/runner/boilerplate-probability-calculator/prob_calculator.py", line 31, in experiment
if balls_drawn.count(color) >= expected_balls[color]:
AttributeError: 'NoneType' object has no attribute 'count'
exit status 1
``````

here is the replete link:
https://replit.com/@dnm47/boilerplate-probability-calculator#prob_calculator.py

in your code `balls_drawn` is `None`, so check your `draw` method. Does it always return something?

1 Like

thanks it was an indentation problem when I copied from vsCode. that problem is solved now I got another one.

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

----------------------------------------------------------------------
Ran 3 tests in 0.082s

FAILED (failures=1)
``````

your `M` is 0 - figure out what’s wrong there

moved the color_count into the first for loop so now the M is not 0 anymore but still an error

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

----------------------------------------------------------------------
Ran 3 tests in 0.086s

FAILED (failures=1)
``````

Now the number is nearer, I can’t check now but I would double check that you are counting correctly the expected draws

I figured out that the draw function was not working as expected so I changed it and now it pass all the tests

thank you very much for your help!