Manipulation des chaînes de caractères
KEVIN471
Messages postés
36
Statut
Membre
-
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.
A voir également:
- Manipulation des chaînes de caractères
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Caractères spéciaux - Guide
- Caractères ascii - Guide
- Caracteres speciaux - Guide
- Caractères spéciaux mac - Guide
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