Basis¶
Scrabble¶
Opdracht: Scrabble
Stap 1: letter_score(c)¶
Eén tak per rij van de tabel met tegelwaarden. De else vangt alles af wat geen
kleine letter is.
def letter_score(c):
"""Geeft de waarde van de Scrabbletegel met letter c, of 0 als c geen letter is."""
if c in "adeinorst":
return 1
elif c in "ghl":
return 2
elif c in "bcmp":
return 3
elif c in "jkuvw":
return 4
elif c == "f":
return 5
elif c == "z":
return 6
elif c in "xy":
return 8
elif c == "q":
return 10
else:
return 0
assert letter_score("w") == 4
assert letter_score("q") == 10
assert letter_score("e") == 1
assert letter_score("%") == 0
Stap 2: scrabble_score(s)¶
def scrabble_score(s):
"""Geeft de Scrabblescore van s."""
if s == "":
return 0
else:
return letter_score(s[0]) + scrabble_score(s[1:])
assert scrabble_score("quotums") == 24
assert scrabble_score("jacquet") == 24
assert scrabble_score("pyjama") == 20
assert scrabble_score("abcdefghijklmnopqrstuvwxyz") == 84
assert scrabble_score("?!@#$%^&*()") == 0
assert scrabble_score("") == 0
Stap 3: double_letter(s)¶
De drie assertions direct onder de functie zijn een voorbeeld van wat je zelf kon
schrijven: een woord met True als uitkomst, een met False, en de lege string.
Daarna volgen de assertions uit de testcel.
def double_letter(s):
"""Geeft True als er ergens in s twee dezelfde letters naast elkaar staan."""
if len(s) < 2:
return False
elif s[0] == s[1]:
return True
else:
return double_letter(s[1:])
assert double_letter("boom") == True
assert double_letter("kat") == False
assert double_letter("") == False
assert double_letter("pizza") == True
assert double_letter("taart") == True
assert double_letter("quiz") == False
assert double_letter("a") == False
assert double_letter("") == False
Stap 4: high_scoring(words, n)¶
def high_scoring(words, n):
"""Geeft de woorden uit words met een Scrabblescore van minstens n."""
if words == []:
return []
elif scrabble_score(words[0]) >= n:
return [words[0]] + high_scoring(words[1:], n)
else:
return high_scoring(words[1:], n)
assert high_scoring(["kat", "quiz", "zee", "pizza"], 10) == ["quiz", "pizza"]
assert high_scoring(["kat", "zee"], 10) == []
assert high_scoring([], 10) == []
Stap 5: best_word(words)¶
Door >= wint bij gelijke score het eerste woord.
def best_word(words):
"""Geeft het woord uit words met de hoogste Scrabblescore; words is niet leeg."""
if len(words) == 1:
return words[0]
rest = best_word(words[1:])
if scrabble_score(words[0]) >= scrabble_score(rest):
return words[0]
else:
return rest
assert best_word(["kat", "quiz", "zee", "pizza"]) == "quiz"
assert best_word(["kat", "tak"]) == "kat"
assert best_word(["zee"]) == "zee"