CMU Coding Bootcamp
1from typing import Sequence
2
3
4def almostEqual(x, y):
5 return abs(x - y) < 10**-9
6
7
8def median(L: Sequence[float]) -> float | None:
9 """Return the median of a sequence of numbers."""
10 L = list(L)
11 if not len(L):
12 return None
13 L.sort()
14 mid = len(L) // 2
15 if len(L) % 2 == 1:
16 return L[mid]
17 else:
18 return (L[mid - 1] + L[mid]) / 2
19
20
21print("Testing median()...", end="")
22assert median([42]) == 42
23assert almostEqual(median([1, 2]), 1.5)
24assert median([-1.7, 3, -2, 4.2, 2]) == 2
25assert median([2, 3, 2, 4, 2]) == 2
26assert almostEqual(median([2, 3, 2, 4, 2, 3]), 2.5)
27assert median([]) == None
28
29# Verify function is non-mutating
30L = [1, 3, 2]
31assert median(L) == 2
32assert L == [1, 3, 2]
33
34print("Passed!")