Manipulation des chaînes de caractères
KEVIN471
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je suis en train de programmer le jeu du mot le plus long et je suis en train de créer les fonctions "liste_mots_valides(donne)" et "test_mot_valide(donne,m)" qui ne marche pas. voici mon code:
Merci d'avance.
je suis en train de programmer le jeu du mot le plus long et je suis en train de créer les fonctions "liste_mots_valides(donne)" et "test_mot_valide(donne,m)" qui ne marche pas. voici mon code:
from random import randint liste_voyelle=['A','E','I','O','U','Y'] liste_consonne=['B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Z'] liste_alphabet=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] def donne(): """Cette fonction demande 9 fois à l'utilisateur s'il veut une consonne ou une voyelle, puis donne une lettre au hasard dans la catégorie qu'il a choisie. La fonction renvoie la liste des lettres choisies et les affiche""" c=0 while c<9: m=input("consonne ou voyelle ? \n") if m ==str("consonne"): m=liste_consonne[randint(0,19)] print(m) c=c+1 elif m ==str("voyelle"): m=liste_voyelle[randint(0,5)] print(m) c=c+1 else: print("Repondez uniquement par consonne ou voyelle") def liste_lettres(mot): """Cette fonction renvoie une liste L de 26 éléments. L [i] contient le nombre de lettres égales à alphabet [i] se trouvant dans le mot m . Par exemple liste_lettres('BABA') renvoie [2,2,0,...,0] affiche combien un mot a de A B C etc""" liste = [0 for i in range(26)] for lettre in mot: k = liste_alphabet.index(lettre) liste[k] = liste[k]+1 return liste def compare_lettres(L1,L2): """Cette fonction prend en argument deux listes d'entiers de longueur 26. Elle renvoie True si pour tout i compris entre 0 et 25, L1[i]<=L2[i] et False sinon.""" for i in range(len(L1)): if L1[i]>L2[i]: # fonction qui contrôle que la liste L1 (Mot) comporte moins de lettre que dans L2(Donne) return False return True def liste_mots(fichier): """Cette fonction prend en argument le nom d'un fichier de type texte et renvoie la liste de tous les mots (séparés par des passages à la ligne) de longueur inférieure ou égale à 9 qui se trouvent dans le fichier.""" g=open(fichier,"r") for line in g: if len(line)<=9: print(line) print("\n") def test_mot_valide(donne,m): """Cette fonction prend en argument une donne de 9 lettres et un mot. Elle teste si le mot est bien formé avec les 9 lettres données et qu'il est dans de dictionnaire.""" g=open("DICO.txt","r") g=g.read() dico = g.split('\n') if m in dico and compare_lettres(liste_lettres(m),liste_lettres(donne)): print("le mot est bien formé") else: print("Le mot est incorrect") def liste_mots_valides(donne): """Cette fonction prend en argument une donne de 9 lettres et renvoie la liste des mots du dictionnaire les plus longs que l'on peut former avec ces 9 lettres.""" g=open("DICO.txt","r") g=g.read() dico = g.split('\n') for i in range(len(dico)): if len(dico[i])<=9 and liste_lettres(donne)==liste_lettres(line): print(dico[i])
Merci d'avance.
3 réponses
Salut,
Ta fonction test_mot_valide paraît juste. Pour la deuxième fonction par contre, c'est un peu plus compliqué, enfin je pense. Peut tu me dire que contient, par exemple, le fichier DICO.txt ?
Pour ta deuxième fonction, tu test si le mot lu dans DICO.txt a une longueur inférieure ou égale à 9 (OK) et si liste_lettre(donne) = liste_lettre(line). Déjà line n'est pas définie (sauf erreur de ma part). Et ça veut dire que si deux mots possèdent les mêmes lettres alors ces mots sont égaux. As-tu pensé aux anagrammes ?
Ta fonction test_mot_valide paraît juste. Pour la deuxième fonction par contre, c'est un peu plus compliqué, enfin je pense. Peut tu me dire que contient, par exemple, le fichier DICO.txt ?
Pour ta deuxième fonction, tu test si le mot lu dans DICO.txt a une longueur inférieure ou égale à 9 (OK) et si liste_lettre(donne) = liste_lettre(line). Déjà line n'est pas définie (sauf erreur de ma part). Et ça veut dire que si deux mots possèdent les mêmes lettres alors ces mots sont égaux. As-tu pensé aux anagrammes ?
le fichier DICO.txt est un fichier txt contenant les principaux mots de la langue française(1 mot par ligne).
Pour la fonction liste_mot valide il y'a en effet un problème car line ne n'est pas définie je l'ai remplacé par len(dico[i]) mais toujours un message d'erreur lorsque je test la fontion
Pour la fonction liste_mot valide il y'a en effet un problème car line ne n'est pas définie je l'ai remplacé par len(dico[i]) mais toujours un message d'erreur lorsque je test la fontion
Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> liste_mots_valides("mangerslqo") File "F:\PROJET ISN\LE MOT LE PLUS LONG 4(2).py", line 91, in liste_mots_valides if len(dico[i])<=9 and liste_lettres(donne)==liste_lettres(len(dico[i])): File "F:\PROJET ISN\LE MOT LE PLUS LONG 4(2).py", line 42, in liste_lettres k = liste_alphabet.index(lettre) # recherche les mots présents dans liste "alphabet" ValueError: 'm' is not in list