CMU Coding Bootcamp
at main 34 lines 747 B view raw
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!")