Skip to content
Aabha AI Academy
Skip to reading

Python · Module 6

Answers and explanations · Debugging and tests

Compare these references after your own attempt. You can read them at any time; they do not record a live model or vendor run.

Module 6

The accumulator belongs before the loop. Empty input now returns an active count of zero; the mean still rejects empty input because no average exists. Approximate comparisons pass the decimal representation check but reject a real difference of 0.01.

Download the complete answer

# Reference answer. Attempt the exercise first.
import math

def mean_minutes(values):
    if not values:
        raise ValueError("at least one value is required")
    return sum(values) / len(values)

def count_active(values):
    count = 0  # Keep the accumulator outside the loop.
    for value in values:
        if value > 0:
            count += 1
    return count

for values, expected in [([10, 0, 20], 2), ([], 0), ([0], 0), ([7], 1)]:
    assert count_active(values) == expected
for values, expected in [([10,20,30],20), ([7],7), ([0,0],0)]:
    assert math.isclose(mean_minutes(values), expected)
try:
    mean_minutes([])
except ValueError:
    pass
else:
    raise AssertionError("Expected ValueError")
assert math.isclose(0.1 + 0.2, 0.3, rel_tol=1e-9, abs_tol=1e-12)
assert not math.isclose(0.31, 0.3, rel_tol=1e-9, abs_tol=1e-12)
print("Module 6 checks passed")

Exit-check guide: Two positive values expose the reset bug; an empty list exposes the uninitialized name. A regression test keeps the earlier failure reproducible. Passing cases do not prove every input, device or teaching outcome.

Return to this module