Score d'un mot au Scrabble⚓︎
Au Scrabble, chaque lettre possède une valeur et le score d'un mot est la somme des valeurs des lettres qui le compose. Ce score peut être modifié par des bonus lors du placement du mot sur le plateau de jeu. Les bonus possibles sont :
- Lettre compte double qui multiplie par 2 la valeur de la lettre positionnée sur cet emplacement,
- Lettre compte triple qui multiplie par 3 la valeur de la lettre positionnée sur cet emplacement,
- Mot compte double qui multiplie par 2 la valeur totale du mot (après application des éventuels bonus de lettre),
- Mot compte triple qui multiplie par 3 la valeur totale du mot (après application des éventuels bonus de lettre).
Une case du plateau ne peut contenir qu'un seul bonus.
Exemple
Si on place le mot :
sur les cases suivantes :
Sa valeur est : \(\left(2\times2 + 1 + 1 + 1 + 4 + 1 \right) \times 2 = 24\)
On modélise les propriétés des cases sur lesquelles sont posées les lettres par les symboles suivants :
"+"
indique un bonus lettre compte double,"*"
indique un bonus lettre compte triple,"#"
indique un bonus mot compte double,"@"
indique un bonus mot compte triple.
Les cases sur lesquelles sont posées les lettres d’un mot sont modélisées par une chaine de caractères que l’on appellera « masque ». Dans l'exemple précédent, le masque est la chaine "+---#-"
. Le caractère "-"
représente une case sans bonus.
Compléter la définition de la fonction calcul_score
qui prend en paramètres deux chaines de caractères :
mot
dont on veut calculer le scoremasque
représentant l'emplacement du mot
Cette fonction calcule le score du mot
en tenant compte des éventuels bonus du masque
.
VALEURS = {'A': 1, 'B': 3, 'C': 3, 'D': 2, 'E': 1, 'F': 4, 'G': 2, 'H': 4, bksl-nl 'I': 1, 'J': 8, 'K': 10, 'L': 1, 'M': 2, 'N': 1, 'O': 1, 'P': 3, bksl-nl 'Q': 8, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 4, 'W': 10, 'X': 10, bksl-nl 'Y': 10, 'Z': 10}bksl-nlbksl-nlBONUSpy-undLETTRE = {'+': 2, 'py-str': 3}bksl-nlBONUSpy-undMOT = {'#': 2, '@': 3}bksl-nlbksl-nldef calculpy-undscore(mot, masque):bksl-nl score = 0bksl-nl multiplicateurpy-undtotal = 1bksl-nl for i in range(len(mot)):bksl-nl lettre, symbolepy-undbonus = mot[i], masque[i]bksl-nl pointspy-undlettre = ...bksl-nl if symbolepy-undbonus in BONUSpy-undLETTRE:bksl-nl pointspy-undlettre = pointspy-undlettre py-str ...bksl-nl elif symbolepy-undbonus in ... :bksl-nl multiplicateurpy-undtotal = ...bksl-nl score = score + ...bksl-nl return ...bksl-nlbksl-nl# testsbksl-nlassert calculpy-undscore("GIRAFE","+---#-") == 24bksl-nlassert calculpy-undscore("KAYAK", "--+--") == 42bksl-nlassert calculpy-undscore("INFORMATIQUE", "--@---------") == 69bksl-nlbksl-nlVALEURS = {'A': 1, 'B': 3, 'C': 3, 'D': 2, 'E': 1, 'F': 4, 'G': 2, 'H': 4, bksl-nl 'I': 1, 'J': 8, 'K': 10, 'L': 1, 'M': 2, 'N': 1, 'O': 1, 'P': 3, bksl-nl 'Q': 8, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 4, 'W': 10, 'X': 10, bksl-nl 'Y': 10, 'Z': 10}bksl-nlbksl-nlbksl-nlBONUSpy-undLETTRE = {'+': 2, 'py-str': 3}bksl-nlBONUSpy-undMOT = {'#': 2, '@': 3}bksl-nlbksl-nldef calculpy-undscore(mot, masque):bksl-nl score = 0bksl-nl multiplicateurpy-undtotal = 1bksl-nl for i in range(len(mot)):bksl-nl lettre, symbolepy-undbonus = mot[i], masque[i]bksl-nl pointspy-undlettre = VALEURS[lettre]bksl-nl if symbolepy-undbonus in BONUSpy-undLETTRE:bksl-nl pointspy-undlettre = pointspy-undlettre py-str BONUSpy-undLETTRE[symbolepy-undbonus]bksl-nl elif symbolepy-undbonus in BONUSpy-undMOT:bksl-nl multiplicateurpy-undtotal = multiplicateurpy-undtotal py-str BONUSpy-undMOT[symbolepy-undbonus]bksl-nl score = score + pointspy-undlettrebksl-nl return score py-str multiplicateurpy-undtotalbksl-nlbksl-nl# testsbksl-nlassert calculpy-undscore("GIRAFE","+---#-") == 24bksl-nlassert calculpy-undscore("KAYAK", "--+--") == 42bksl-nlassert calculpy-undscore("INFORMATIQUE", "--@---------") == 69bksl-nlbksl-nlbksl-nlbksl-nlbksl-nlbksl-nl
A
Z