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.
# 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.