Scrabble (niveau première)
Bonjour,
Je dois créer un Scrabble pour mon devoir de nsi, mais je suis perdu. Le prof nous a donné un code avec des fonctions à compléter, quelqu'un pourrait m'aider ? (il faut compléter les 4 fonctions mises entre guillemets).
Je dois créer un Scrabble pour mon devoir de nsi, mais je suis perdu. Le prof nous a donné un code avec des fonctions à compléter, quelqu'un pourrait m'aider ? (il faut compléter les 4 fonctions mises entre guillemets).
scrabble={"A":1,"B":3,"C":3,"D":2,"E":1,"F":4,"G":2,"H":4,"I":1,"J":8,"K":10,"L":1,"M":2,"N":1,"O":1,"P":3,"Q":8,"R":1,"S":1,"T":1,"U":1,"V":4,"W":10,"X":10,"Y":10,"Z":10}
def points(mot):
""" Fonction retournant le nombre de points au scrabble de la chaine de caractères mot """
pt = 0
for lettre in mot :
pt = pt + scrabble[lettre]
return pt
def dico_scrabble(fichier):
""" Fonction retournant un dictionnaire dico ayant pour clé le nombre de lettre et pour valeur un dictionnaire
associant un mot à son nombre de point au scrabble """
dico = {n : {} for n in range(2,16)} # on initialise le dictionnaire pour des mots de 2 à 15 caractères
f = open(fichier) # on ouvre le fichier
for ligne in f: # on parcourt le fichier ligne par ligne
mot = ligne.strip() # on nettoie chaque ligne des caractères parasites type retour de ligne \n
# on stocke dans dico le nombre de point de mot au bon endroit ... à compléter
f.close()
return dico
def solutions(main,n):
""" Fonction retournant une liste sol de tuple (mot,valeur) autorisés au scrabble pour des mots de n lettres pris dans une main donnée"""
sol = []
for mot in mots[n]: # Pour chaque mot de n lettres autorisés
dispo = list(main) # Liste des lettres de la main disponible
for lettre in mot : # Pour chaque lettre du mot
# Si la lettre est disponible
# alors la retirée des lettres disponible
# sinon arreté la boucle et passer au mot suivant ... à compléter
else : # Si toutes les lettres du mot sont disponible
# ajouter à la liste sol le tuple (mot,valeur) ... à compléter
return sol
def meilleur_coup(main):
""" Fonction retournant un dictionnaire rep associant à chaque nombre de lettre un tuple (mot,valeur) tel que
mot est le meilleur coup à jouer avec n lettres de main et valeur le nombre de points au scrabble rapporté par mot """
rep ={}
for n in range(2,8): # Pour chaque nombre n de lettre jouable
# Récupère la liste des tuple (mot,valeur) de n lettres et autorisés au scrabble ... à compléter
# Détermine le mot de valeur maximal et ajoute le au dictionnaire rep ... à compléter
return rep
fichier = 'scrabble.txt'
mots = dico_scrabble(fichier)
main = input("Votre main : ").upper()
best = meilleur_coup(main)
print(best)
3 réponses
-
Bonjour,
On donne toujours la même réponse pour ce genre de questions .....
Commence par lire ceci :
https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
Puis reviens nous voir avec tes tentatives en expliquant sur quelle(s) partie(s) exactement tu bloques....
Là, peut-être qu'on t'aider à corriger....
-
Bonjour,
Explication du sujet
Si j'ai bien compris ton sujet, le but est de trouver dans un fichierscrabble.txt
(qui contient vu le programme les mots autorisés au scrabble) les mots dont la taille est comprise entre 2 et 16 pouvant être posés étant donnée un ensemble de lettres défini dansmain
.
Au scrabble, le score d'un mot est obtenu en sommant les valeurs de ses lettres (voir variablescrabble
et la fonctionpoints
).
Dans ton exercice, on ignore complètement le plateau et donc les mots éventuellement déjà posés. Ça a du sens si c'est le premier mot qu'on pose, mais si on voulait faire une intelligence artificielle pour les coups suivants, il faudrait quelque chose d'un peu plus compliqué (pour rappel, au scrabble, les mots suivants sont raccrochés à au moins un mot existant, ce qui donne l'opportunité de réutiliser une ou plusieurs lettres).Toutes ces difficultés semblent ignorées dans ton exercice.
Pour démarrer
Pour que ton programme soit exécutable et que tu vois où en est le squelette qu'on t'a proposé, tu pourrais remplir les "trous" par avec desprint
qui affiche le contenu des variables significatives.
Par exemple, ligne 40, deux variables sont significatives (main
etn
), donc pour les afficher, on peut ajouter :for n in range(2,8): print(f"main = {main}") print(f"n = {n}")
Veille à respecter l'indentation, en Python, c'est important !
Étant donné ces variables, à toi d'écrire les bonnes instructions pour réaliser ce qui est écrit en commentaire.
Si tu es toujours bloqué
Il faudrait joindre le fichierscrabble.txt
(au moins les premières lignes, s'il est long) et nous dire ce qui te bloque.
Bonne chance -
Re, merci de ton aide.
En fait, juste avant d'en venir à ma question, j'aimerai contextualiser. Nous (ma classe et moi) venons d'entrer en classe de première, et notre professeur nous a donner ce devoir qui à notre niveau paraît compliqué. Cela fait de nombreux jours que j'essaie de faire ce devoir, sans succès, mais je viens enfin d'accomplir la première fonction toute à l'heure.
J'aimerai finalement demander ici une aide très approfondie des 3 autres fonctions afin de comprendre et d'ensuite pouvoir faire ce devoir.
Merci d'avance pour votre aide.