Basis: lambda¶
De uitslag van de schoolrun¶
Opdracht: De uitslag van de schoolrun
De gegeven code uit de opgave:
RESULTS = [
["Noor", 17, 754],
["Sem", 19, 698],
["Lotte", 18, 698],
["Yara", 16, 812],
["Finn", 21, 745],
]
Stap 1: fastest(results)¶
def fastest(results):
"""Geeft de naam van de deelnemer met de kleinste tijd; results is niet leeg."""
return min(results, key=lambda r: r[2])[0]
assert fastest(RESULTS) == "Sem"
assert fastest([["Ali", 20, 600]]) == "Ali"
Stap 2: ranking(results)¶
De sleutel [r[2], r[0]] vergelijkt eerst de tijd en bij een gelijke tijd de
naam.
def ranking(results):
"""Geeft de namen van snel naar langzaam; bij gelijke tijd op alfabet."""
return [r[0] for r in sorted(results, key=lambda r: [r[2], r[0]])]
assert ranking(RESULTS) == ["Lotte", "Sem", "Finn", "Noor", "Yara"]
assert ranking([["Bo", 30, 700], ["Ad", 25, 700]]) == ["Ad", "Bo"]
assert ranking([]) == []
Stap 3: select(results, test)¶
def select(results, test):
"""Geeft de deelnemers uit results waarvoor test True teruggeeft."""
return [r for r in results if test(r)]
assert select(RESULTS, lambda r: r[1] < 18) == [["Noor", 17, 754], ["Yara", 16, 812]]
assert select(RESULTS, lambda r: r[2] < 700) == [["Sem", 19, 698], ["Lotte", 18, 698]]
assert select(RESULTS, lambda r: r[1] > 30) == []
Stap 4: winner(results, test)¶
def winner(results, test):
"""Geeft de naam van de snelste deelnemer waarvoor test True teruggeeft."""
return fastest(select(results, test))
assert winner(RESULTS, lambda r: r[1] < 18) == "Noor"
assert winner(RESULTS, lambda r: r[1] >= 18) == "Sem"
assert winner(RESULTS, lambda r: r[0][0] == "Y") == "Yara"