Scrabble (niveau première)

Fermé
Romain - Modifié le 10 nov. 2021 à 15:42
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 - 11 nov. 2021 à 01:38
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).

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)
A voir également:

3 réponses

jordane45 Messages postés 38316 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 novembre 2024 4 705
10 nov. 2021 à 15:45
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....


0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
Modifié le 10 nov. 2021 à 15:55
Bonjour,

Explication du sujet

Si j'ai bien compris ton sujet, le but est de trouver dans un fichier
scrabble.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 dans
main
.

Au scrabble, le score d'un mot est obtenu en sommant les valeurs de ses lettres (voir variable
scrabble
et la fonction
points
).

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 des
print
qui affiche le contenu des variables significatives.

Par exemple, ligne 40, deux variables sont significatives (
main
et
n
), 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 fichier
scrabble.txt
(au moins les premières lignes, s'il est long) et nous dire ce qui te bloque.

Bonne chance
0
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.
0
mamiemando Messages postés 33407 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 novembre 2024 7 806
11 nov. 2021 à 01:38
Dans ce cas il faut poser des questions plus précises, en prenant les points un par un. Quelle fonction / qu'as-tu fait / qu'est-ce qui te bloque ?
0