Programmes Python sur les opérations de chaîne

Dans ce didacticiel, vous allez écrire des programmes Python pour résoudre les questions fréquemment posées sur les opérations sur les chaînes.

Vous apprendrez à vérifier si les chaînes Python sont des palindromes, des anagrammes et sont dans la casse du titre.

Chaînes Python : un examen rapide

En Python, les chaînes sont de puissants types de données intégrés. Ils peuvent stocker une séquence de caractères.

Indexation dans les chaînes Python : comme tous les itérables Python, les chaînes sont également indexées à zéro. Ainsi, les indices valides pour une chaîne de longueur N sont 0, 1, 2 jusqu’à N – 1.

Python prend également en charge l’indexation négative pour accéder aux éléments à partir de la fin de la chaîne. Donc -1 est l’index du dernier caractère de la chaîne, -2 est l’index de l’avant-dernier caractère de la chaîne, et ainsi de suite.

Immutabilité des chaînes Python : De plus, les chaînes en Python sont immuables, vous ne pouvez donc pas les modifier sur place. Cependant, vous pouvez appeler plusieurs méthodes de chaîne sur celles-ci et obtenir des copies de chaînes avec le résultat souhaité.

Maintenant que nous avons passé en revue les bases des chaînes Python, passons à la résolution de problèmes simples mais intéressants.

Commençons.

Vérifier si une chaîne Python est un palindrome

Problème : étant donné une chaîne Python, vérifiez s’il s’agit ou non d’un palindrome.

Si oui, retournez True ; sinon, renvoie False.

Donc notre premier problème est de vérifier si oui ou non une chaîne donnée est un palindrome.

Un palindrome est une chaîne qui se lit de la même manière de gauche à droite et de droite à gauche. Citons quelques exemples : voiture de course, référence, niveau, madame, radar, etc.

Voici les étapes pour résoudre ce problème :

  • Obtenez une copie inversée de la chaîne et stockez-la dans une autre variable, si nécessaire.
  • Comparez les valeurs de la chaîne d’origine et de la chaîne inversée.
  • S’ils sont égaux, la chaîne est un palindrome. Renvoyez donc True et arrêtez.
  • Si les copies originales et inversées ne sont pas égales, la chaîne n’est pas un palindrome. Nous devrions donc renvoyer False.

L’opération clé consiste à obtenir une copie inversée de la chaîne. En Python, il existe plusieurs façons de procéder.

Cependant, nous passerons en revue deux approches :

  • Utilisation du découpage de chaîne
  • Utilisation de la fonction reversed() et de la méthode join()

Comment inverser une chaîne Python à l’aide du découpage

La syntaxe [start: stop: step] renvoie une tranche de la chaîne du démarrage jusqu’à l’arrêt non compris, avec la taille du pas.

  • Si vous omettez start, la tranche commence au début de la chaîne.
  • Si vous ne spécifiez pas l’index d’arrêt, la tranche s’étend jusqu’à la fin de la chaîne.
  • Et les valeurs négatives de step peuvent être utilisées pour renvoyer des tranches à partir de la fin de la chaîne.

Alors [::-1] renvoie une copie inversée de la chaîne.

La cellule de code suivante contient la définition de la fonction is_palindrome().

Il prend une chaîne comme argument et renvoie True ou False selon qu’il s’agit ou non d’un palindrome.

Ici, nous avons utilisé le découpage de chaîne pour obtenir une copie inversée de la chaîne.

def is_palindrome(this_str):
  rev_str = this_str[::-1]
  if (this_str == rev_str):
    return True
  else:
    return False

▶️ Maintenant que nous avons défini la fonction, nous pouvons continuer et appeler avec n’importe quelle chaîne valide comme argument.

is_palindrome("racecar")
True

Dans la cellule de code ci-dessus, la voiture de course est un palindrome. Ainsi, la fonction is_palindrome() renvoie True comme prévu.

Maintenant, essayez d’appeler la fonction avec n’importe quelle chaîne qui n’est pas un palindrome, comme river.

is_palindrome("river")
False

Et comme vous pouvez le voir, il renvoie False, ce qui est correct. ✅

Comment inverser une chaîne Python en utilisant reversed() et join()

En Python, vous pouvez utiliser la méthode join() avec la fonction reversed() pour inverser une chaîne.

  • La fonction reversed() renvoie un itérateur inverse à travers les caractères de la chaîne.
  • La méthode join() peut ensuite être utilisée pour joindre ces caractères dans l’ordre inverse.

En utilisant la méthode ci-dessus, vous pouvez réécrire la fonction is_palindrome() comme dans la cellule de code ci-dessous.

def is_palindrome(this_str):
  rev_str="".join(reversed(this_str))
  if (this_str == rev_str):
    return True
  else:
    return False

Vous pouvez également utiliser la fonction is_palindrome() dans la compréhension de liste pour collecter tous les palindromes à partir d’une liste plus longue de chaînes.

str_list = ["refer","blue","level","12321","dragon"]

palindromes = [string for string in str_list if is_palindrome(string)]
print(palindromes)
# Output
['refer', 'level', '12321']

Voici comment fonctionne le code ci-dessus :

  • Parcourez str_list, appelez is_palindrome() sur chaque chaîne.
  • Si is_palindrome() renvoie True, ajoutez la chaîne à la liste des palindromes.

Comme vous pouvez le voir dans la sortie ci-dessus, palindromes est une liste de toutes les chaînes palindromiques dans str_list.

Vérifiez si deux chaînes Python sont des anagrammes

Une autre question populaire que vous pouvez rencontrer dans les interviews est de vérifier si oui ou non une paire de chaînes str1 et str2 sont des anagrammes.

Deux chaînes sont dites anagrammes si le nombre de caractères dans les deux chaînes est exactement le même. Cela signifie que vous pouvez obtenir l’une des chaînes en permutant ou en réorganisant les caractères de l’autre chaîne.

Des exemples d’anagrammes incluent l’état-goût, le vase de sauvegarde, le coude en dessous, etc.

Comment vérifier les anagrammes à l’aide de l’objet compteur en Python

Une méthode simple et intuitive consiste à calculer le nombre d’occurrences de chaque caractère dans les deux chaînes. Et puis vérifiez si les comptes sont égaux.

Cela peut être fait d’autant plus facilement en utilisant l’objet Counter du module itertools. La Compteur object renvoie un dictionnaire Python : avec les caractères comme clés et les nombres correspondants comme valeurs.

Considérez les chaînes « save » et « vase » comme indiqué ci-dessous.

str1 = "save"
str2 = "vase"

Ici, c1 et c2 sont des objets compteur contenant respectivement le nombre de caractères des chaînes str1 et str2.

from collections import Counter
c1 = Counter(str1)
c2 = Counter(str2)
print(c1)
print(c2)
c1 == c2

# Output
Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1})
Counter({'v': 1, 'a': 1, 's': 1, 'e': 1})
True

c1 == c2 renvoie True car str1 et str2 sont des anagrammes.

En utilisant cette logique, nous pouvons maintenant continuer et définir la fonction are_anagrams() avec deux paramètres word1 et word2. Dans le corps de la fonction, nous vérifions si Counter(word1) == Counter(word2).

def are_anagrams(word1, word2):
  if Counter(word1) ==  Counter(word2):
    return True
  else:
    return False

▶️ Pour vérifier, appelez are_anagrams() avec str1, str2 comme arguments. Comme str1 et str2 sont des anagrammes (« save » et « vase »), la fonction renvoie True, ce qui est correct.

are_anagrams(str1, str2)
True

Comment vérifier les anagrammes à l’aide de copies triées de chaînes

Il existe une autre façon de procéder.

Si deux chaînes sont des anagrammes, alors leurs copies triées sont égales.

Nous pouvons donc réécrire la fonction are_anagrams() pour vérifier si la version triée de str1 est la même que la copie triée de str2. S’ils sont égaux, alors les deux chaînes sont des anagrammes ; sinon, ils ne le sont pas.

En utilisant la méthode ci-dessus pour vérifier l’égalité des copies triées, nous pouvons réécrire la fonction are_anagrams() comme suit.

def are_anagrams(word1, word2):
  if sorted(word1) ==  sorted(word2):
    return True
  else:
    return False

Faisons maintenant quelques appels de fonction.

  • Les chaînes « coude » et « ci-dessous » sont des anagrammes et la fonction are_anagrams() renvoie True.
  • Et « état » et « goûté » ne sont pas des anagrammes, et la fonction renvoie Faux.
are_anagrams("below","elbow")
True

are_anagrams("state","tasted")
False

Vérifier si une chaîne Python est en casse de titre

Voici notre dernière question pour ce tutoriel.

Problème : Étant donné une chaîne : le nom d’une personne, avec son prénom et son nom.

Vous devez vérifier si la première lettre du prénom et du nom est en majuscule.

Ce type de casse où la première lettre de chaque mot est en majuscule est appelé casse de titre.

Vous devez donc vérifier si le nom est dans la casse du titre :

1. Si oui, affichez un message indiquant que le formatage est en casse de titre.

2. Sinon, renvoyez une copie de la chaîne formatée dans la casse du titre

  • Python a une méthode de chaîne intégrée istitle(), qui vérifie si une chaîne est dans la casse du titre.

.istitle() renvoie True si la chaîne est formatée dans la casse du titre, sinon elle renvoie False.

  • Et la méthode de chaîne de Python title() renvoie une copie de la chaîne formatée dans la casse du titre.

Alors maintenant, vous pouvez utiliser ces deux méthodes pour résoudre le problème.

Définissez une fonction check_titlecase() qui accepte name comme argument.

  • Vous pouvez appeler la méthode istitle() sur la chaîne d’entrée pour vérifier si elle est formatée en casse de titre.
  • Si True, vous pouvez imprimer que la chaîne est déjà en casse de titre.
  • Sinon, vous pouvez appeler la méthode title() et renvoyer une copie de la chaîne dans la casse du titre.

La cellule de code suivante montre la définition de la fonction check_titlecase().

def check_titlecase(name):
  if name.istitle():
    print(f"'{name}' is already formatted in title case.")
  else:
    return name.title()

Appelons maintenant la méthode check_titlecase() avec un argument.

check_titlecase("jane smith")

# Output
Jane Smith

Dans la sortie ci-dessus, vous pouvez voir que la chaîne « Jane Smith » est maintenant dans la casse du titre.

▶️ Prenons un autre exemple.

check_titlecase("agatha Christie")

# Output
Agatha Christie

Cette fois, appelons la fonction avec une chaîne en casse de titre.

check_titlecase("Grace Hopper")

# Output
'Grace Hopper' is already formatted in title case.

Nous sommes informés que la chaîne est formatée dans la casse du titre et que la fonction fonctionne comme prévu.

Conclusion 👩‍🏫

Résumons maintenant les problèmes dont nous avons discuté jusqu’ici.

  • Pour vérifier si une chaîne est un palindrome, vérifiez si la chaîne et sa version inversée sont égales. Vous pouvez utiliser le découpage de chaînes ou des méthodes intégrées pour inverser les chaînes.
  • Pour vérifier si deux chaînes sont des anagrammes, vérifiez si leurs copies triées sont égales. Et pour trier une chaîne, utilisez la fonction intégrée triée().
  • Pour vérifier si un nom est en casse de titre, utilisez la méthode .istitle() pour vérifier et la méthode .title() pour obtenir une copie en casse de titre de la chaîne.

J’espère que vous avez apprécié ce tutoriel sur les chaînes Python. Dans une prochaine étape, apprenez à utiliser les compréhensions de liste en Python ou découvrez l’opérateur non égal en Python.

Bon apprentissage et codage !🎉