Basis

Deze pagina bevat uitvoerbare code.

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"