Bonjour à tous,

Actuellement débutant dans le monde du codage informatique, je suis en train de suivre un mooc python afin d'avoir les premières bases.

actuellement je coince sur un exercice. Voir consigne ci-dessous.

**********
Joao vient d’arriver dans notre pays depuis le Portugal. Il a encore du mal avec la langue française. Malgré ses efforts considérables, il fait une faute d’orthographe quasi à chaque mot. Son souci est qu’il n’arrive pas toujours à écrire un mot correctement sans se tromper à une lettre près. Ainsi pour écrire « bonjour », il peut écrire « binjour ». Pour remédier à ce problème, Joao utilise un correcteur orthographique. Malheureusement, Joao a un examen aujourd’hui et il a oublié son petit correcteur.

Afin de l’aider, nous vous demandons d’écrire une fonction correcteur(mot, liste_mots) où mot est le mot que Joao écrit et liste_mots est une liste qui contient les mots (ayant la bonne orthographe) que Joao est susceptible d’utiliser.

Cette fonction doit retourner le mot dont l’orthographe a été corrigée.

Exemple 1
L’appel suivant de la fonction :

correcteur("bonvour", ["chien", "chat", "train", "voiture", "bonjour", "merci"])
doit retourner :

"bonjour"

***********

voici le code que j'ai écris et que je vais essayé d'expliquer.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
def distance_mots(mot_1, mot_2):
 
    d = 0                           #incrémentation des distances
 
    for i in range(len(mot_1)):     # boucle pour interroger chaque caractère
 
        if mot_1[i] != mot_2[i]:    # si les caractères sont différent
 
            d = d + 1               # incrémentation de +1 a d
 
    return d                        # a la fin de la boucle retourner le résultat de d
 
def correcteur(mot, liste_mots):            # fonction correcteur
 
    num = 0                                 # variable num
 
    iteration = 0                           # variable itération
 
    while iteration != len(liste_mots):      # création d'une boucle en fonction du nombre d'élément dans la liste de mots
 
        iteration += 1                        # incrémenter + 1 a la variable iteration
 
        if len(mot) == len(liste_mots[num]):            # rechercher les mots avec le même nombres de caractère
 
            distance_mots(mot, liste_mots[num])         # une fois trouver faire appel a la fonction distance_mots
 
            res = distance_mots(mot, liste_mots)        # variable du résultat de la fonction distance_mots
 
            if res == 1:                                #si le résultat de distance_mot est égale à 1
 
                return liste_mots[num]                      # retourner le mot correspondant la liste de mots
 
                iteration = len(liste_mots)             # arrêt de la boucle en changeant la valeur d'itération
 
            elif res == 0:                              # si le résultat de distance_mot est égale à 0
 
                return mot                              # retourner le mot si l'ortographe est correcte
 
                iteration = len(liste_mots)             # arrêt de la boucle en changeant la valeur d'itération
 
            else:
 
                num += 1                                # incrémenter + 1 a num
Dans mon code j'ai une première fonction qui me permet de comparer chaque caractère de deux chaîne de caractère en entrée et retourne un résultat D, si le résultat de D est égale à 0 donc tout les caractères sont identiques donc il n'y a pas de faite d'orthographe, en revanche si D = 1 il y a une faute.

Ensuite j'ai une deuxième fonction nommée correcteur qui reçoit en entrée un mot et une liste de mots.

j'ai choisi l'option d'utilisé une boucle while car je part du principe qu'on ne sait pas de combien d'élément sera composer la liste de mots.

je créer 2 variables:

une nommée "num", l'autre "iteration"

iteration va me servir a stopper la boucle while et num a interroger chaque chaîne de caractère présente dans la liste de mot.

"je rappel que dans la consigne il est dit qu'il ne peut y avoir qu'une seul faute donc une lettre de différente sa permet de simplifier la chose"

Dans ma boucle while je recherche si la première entrée qui est une chaine de caractère a le même nombre de caractère que le num dans la liste de mots.

Malheureusement lors de mes tests a aucun moment le programme rentre dans la fonction if afin d'interroger la première question qui va me permettre de savoir si les deux chaînes de caractères qui sont en comparaison sont soit identique et donc pas de faute d'orthographe, soit 1 caractère différent et donc sans ce cas il s'agit du bon mot mais avec une faute ou bien si il y a plus d'un caractère de différent ce sont deux mots totalement différent.

Pouvez-vous me dire ce qui coince dans mon code?

Merci d'avance pour votre aide