Skip to content

Latest commit

 

History

History
131 lines (103 loc) · 5.22 KB

scrabble.md

File metadata and controls

131 lines (103 loc) · 5.22 KB
title layout
TP scrabble
parc

Présentation de la structure de données dictionnaires

  • Présentation video par Pierre Marquestaut

  • En Python la structure de données dictionnaire est implémentée par le type dict. Voici un exemple de construction de dictionnaire en Python et de manipulation avec les opérations de base : définition, accès en lecture / écriture,test d'appartenance, parcours.

annuaire = {}  #initialisation d'un dictionnaire vide
annuaire = { 'Victor' : '06 44 44 44 44'} #on peut aussi initialiser un dictionnaire par extension
print("Lecture du numéro de téléphone de Victor dans le dictionnaire annuaire ", annuaire['Victor'])
print("Modification du numéro de Victor dans le dictionnaire annuaire ")
annuaire['Victor'] = '06 33 33 33 33'
print("Ajout  du numéro de Valérie dans le dictionnaire annuaire ")
annuaire['Valérie'] = '06 22 22 22 22'
print("Affichage du dictionnaire annuaire")
print("Test d'appartenance de la clef 'Antoine' au dictionnaire annuaire", 'Antoine' in annuaire)
print("Test d'appartenance de la clef 'Valérie' au dictionnaire annuaire", 'Valérie' in annuaire)
print("Parcours du dictionnaire annuaire par clefs (ici les personnes) :")
for clef in annuaire:
    print("Clef : ", clef, " Valeur : ", annuaire[clef])
print("Parcours du dictionnaire annuaire par tuple (clef, valeur) (ici (personne, numéro)) :")
for clef, valeur in annuaire.items():
    print("Clef : ", clef, " Valeur : ", valeur)

Si Binder ne se lance pas, le snippet sur glot.io :

<iframe src='https://glot.io/snippets/fvk5o67xl0/embed' frameborder='0' scrolling='no' sandbox='allow-forms allow-pointer-lock allow-popups allow-same-origin allow-scripts' width='800' height='600'></iframe>

Le même snippet mais sur basthon

Une première utilisation des dictionnaires : résolution d'un problème sur CodinGame

  1. Lire l'énoncé du problème sur la page https://www.codingame.com/ide/puzzle/scrabble.
  2. Pour résoudre ce problème on propose de compléter le code ci-dessous :
    • dansspyder, compléter chaque fonction en respectant sa spécifications des fonctions et en vérifiant les tests unitaires qui l'accompagnent.
    • compléter le code du programme principal
    • soumettre son code aux validateurs sur la page https://www.codingame.com/ide/puzzle/scrabble.
#dictionnaire des valeurs des lettres minuscules au scrabble
valeur = {
    'a' : 1,
    'e' : 1,
    'i' : 1,
    'o' : 1,
    'n' : 1,
    'r' : 1,
    't' : 1,
    'l' : 1,
    's' : 1,
    'u' : 1,
    'd' : 2,
    'g' : 2,
    'b' : 3, 'c' : 3, 'm' : 3, 'p' : 3,
    'f' : 4, 'h' : 4, 'v' : 4, 'w' : 4, 'y' : 4,
    'k' : 5, 
    'j' : 8, 'x' : 8,
    'q' : 10, 'z' : 10}

def signature(mot):
    """Paramètre : mot de type str
    Valeur renvoyée : un dictionnaire représentant le nombre d'occurences
    de chaque lettre minuscule de l'alphabet dans mot""" 
    sig  = {}  #dictionnaire vide
    for c in mot:
        "à compléter"
    return sig

#Tests unitaires de la fonction signature
assert signature("") == {}
assert signature("ananas") == {'a': 3, 'n': 2, 's': 1}
assert signature("abcd") == {'a': 1, 'b': 1, 'c': 1, 'd': 1}


def score_mot(mot, valeur):
    """Paramètre : mot de type str, 
    valeur de type dict associe à chaque lettre minuscule sa valeur au scrabble
    Valeur renvoyée : score du mot au scrabble""" 
    s = 0
    "à compléter"
    return s

#Tests unitaires de la fonction signature
assert score_mot("") == 0
assert score_mot("zazou") == 23
assert score_mot("ananas") == 6


def mot_possible(mot, sig_lettres):
    """Paramètre : mot de type str
    sig_lettres de type dict représente la signature des lettres disponibles
    Valeur renvoyée : un booléen indiquant si sig_mot compatible avec  sig_lettres
    et donc si le mot peut être composé avec les lettres fournies"""
    sig_mot = signature(mot)
    "à compléter"


#Tests unitaires de la fonction mot_possible
assert mot_possible("zazou", {"a" : 1, "b" : 1, "o" : 2, "u" : 1, "z" : 2}) == True
assert mot_possible("zazou", {"b" : 1, "o" : 1, "u" : 1, "z" : 2}) == False
assert mot_possible("zazou", {"a" : 1, "o" : 2, "u" : 3, "z" : 1}) == False

#Programme principal
# saisie du nombre de mots du dictionnaire
n = int(input())
# saisie des mots du dictionnaire dans une liste
dico = [input().rstrip() for _ in range(n)]
letters = input().rstrip()
sig_lettres = signature(letters)
smax = -1
mot_max = ""
# boucle sur les mots du dictionnaire
for mot in dico:
    "à compléter"


print(mot_max)

Attention, spoiler ! solution