Déterminer la présence d’une sous-chaîne dans une chaîne

Bonjour,

Hier, j’ai créé un onglet rechercher pour mon application Mon jardin 2.0.

tab_search

J’ai eu besoin d’un peu de temps pour écrire un code qui, certes, fait le travail mais qui est une vraie usine à gaz! Seize lignes de code pour transformer la chaîne en une liste de sous-chaînes! Puis, création d’une liste de symboles transformés en  ‘ ‘, c’est-à dire effacés grâce à la méthode replace(). Enfin, remplacement de l’ par ‘ ‘ pour pouvoir chercher et isoler le mot entrée contenue dans la chaîne l’entrée… J’arrête les frais parce que j’ai grand honte!

rechercher

La nuit porte conseil et ce matin, en me levant, je me suis replongé dans mon manuel Python. J’ai alors réalisé qu’il existait deux méthodes beaucoup plus pythonesques c’est-à-dire beaucoup plus simples pour obtenir le même résultat :

1. Utilisation de la méthode in ou not in :

rechercher2

  • Je récupère le mot à rechercher (self.entree_recherche.get).
  • Je transforme les éventuelles majuscules en minuscules car il ne s’agit pas du même encodage! (self.search.lower())
  • Je récupère la chaîne dans laquelle je souhaite chercher ma sous chaîne (self.note = edit.get(1.0, ‘end’))
  • Je transforme les éventuelles majuscules en minuscules grâce à la méthode lower().
  • Et enfin, j’utilise l’instruction not in pour déterminer si la sous-chaîne est présente ou absente dans la chaîne en cours d’analyse.
  • Si elle est absente, je détruis la chaîne grâce à la méthode destroy().

Résultat : huit lignes de code au lieu de seize. Je vous laisse juge du résultat…

Utilisation de la méthode find() :

Dans ce premier exemple, la sous-chaîne « tous » est bien présente dans la chaîne « Bonjour à tous ». Elle retourne la position de la sous-chaîne. Celle-ci commence à l’indice 10 (Je rappelle qu’en programmation, on commence à compter à partir de zéro.).

>> a = « Bonjour à tous »
>>> b = « tous »
>>> c = a.find(b)
>>> print(c)
10

Dans ce deuxième exemple, la sous-chaîne « Bonsoir » est absente de la chaîne. La valeur retournée est -1.

>>> b = « Bonsoir »
>>> c = a.find(b)
>>> print(c)
-1

Je peux donc demander de retourner une instruction spécifique au cas où c = -1, c’est-à-dire si b est absent de a.

>> if c == -1 :
… print(« Le mot recherché est absent de la chaîne »)

Le mot recherché est absent de la chaîne

Voilà… J’ai fini.