Aie, non les commandes clés ne sont pas bien comprises ici.
J'ai barré ou souligné les commentaires faux.
1 2 3 4 5 6 7 8 9 10 11 12 13
| def fct3(s):
l = [] #créer un liste vide
mot=s[0] #créer une variable mot égale à l'indice 0 du string s
for i in range(1,len(s)): #pour tous les éléments i de 1 à la fin de s, on va effectuer les instructions de la boucle.
e = s[i] #on crée une variable e égale à s[i]
if e.isdigit() != s[i-1].isdigit() : #si l'indice e est un nombre et que l'indice d'avant n'était pas un nombre
l.append(mot) #alors ajouter à la fin de la list l l'élement mot
mot=e #sachant que mot est égale au e d'intéret
else: # sinon
mot+=e # la variable mot devient mot+e
l.append(mot) # et dans ce cas la ajouter dans une autre sous-liste de l l'élement mot nouvellement définit
return l
print(fct3("ac12gct34")) |
J'explique pourquoi ici.
1)
if e.isdigit() != s[i-1].isdigit() :
Si e.isdigit est vrai , e est un nombre.
Si e.isdigit est faux , e est une lettre.
Si s[i-1].isdigit est vrai, s[i-1] est un nombre.
Si s[i-1].isdigit est faux, s[i-1] est une lettre.
Ensuite :
Vrai != Vrai est faux
Vrai != Faux est vrai
Faux != Vrai est vrai
Faux != Faux est faux
Donc si e.is_digit et s[i-1].is_digit donne la meme chose (c'est à dire tous les deux vrais ou tous les deux faux) alors e.isdigit() == s[i-1].isdigit() sera vrai (les deux membres sont égaux) et donc e.isdigit() != s[i-1].isdigit() sera faux.
Cette expression vaut donc vrai lorsqu'il y a un changement entre lettre et chiffre. Je ne sais pas si c'est clair pour vous mais si ca ne l'est pas il faut impérativement que vous écriviez à la main les 4 cas de figures, pour vous convaincre que cette expression traduit qu'il y a un changement et pas juste "si je suis un nombre et qu'avant ce n'était pas un nombre". L'expression ici englobe aussi en plus de ce que vous dites "si je suis une lettre et qu'avant ce n'était pas une lettre".
2)
mot=e #<s>sachant que mot est égale au e d'intéret </s>
Non ! Ici on vient juste d'ajouter notre mot à la liste. On doit donc commencer un nouveau mot. Et ce nouveau mot pour l'instant je peux juste dire qu'il commence part le caractère e. C'est l'équivalent de mot=s[0], mais au milieu de la boucle. N'oublions pas que e=s[i], donc mot=e c'est en fait mot=s[i].
3) Il faut absolument revoir (ou voir) un tuto sur l'importance de l'indentation en Python.
Ici l'instruction l.append(mot) juste avant le return n'est pas à l'intérieur de la boucle if. Elle n'est meme pas à l'intérieur de la boucle for ! Cette instruction n'est éxécuté qu'une seule et unique fois lors de l'appel de la fonction, et ça juste à la fin. Elle permet d'ajouter le dernier mot à la liste. Car quand on arrive au bout de la liste, on a plus aucun caractère après pour comparer. Il faut donc ajouter le dernier mot qu'on avait en stock. Tester la fonction sans cette ligne vous verrez.
D'autres part on essaie de faire des commentaires utiles qui se rapproche du problème réel que l'on regarde !
Exemple :
mot+=e # la variable mot devient mot+e
Ok ca je peux le dire sans avoir besoin du commentaire !
mot+=e # Ajoute le caractère e à la fin de mot
me parait plus explicatif vis à vis du problème que tu regarde.
Partager