HOWTO · Python

Utiliser if avec des chaînes de caractères en Python

Apprenez à écrire des conditions Python avec des chaînes : égalité, recherche de sous-chaîne, appartenance à une liste et comparaison sans tenir compte de la casse.

Sur cette page

Pour comparer le contenu de deux chaînes, utilisez == dans une instruction if. L’opérateur in sert à rechercher une sous-chaîne ou à vérifier qu’une réponse appartient à un ensemble de valeurs acceptées. Si la casse doit être ignorée, normalisez les chaînes, par exemple avec lower(). Choisissez la condition adaptée : par défaut, les comparaisons distinguent les majuscules des minuscules, tandis que is vérifie l’identité des objets, et non l’égalité de leur texte.

Comparaison de chaînes de base

Utilisez == si deux chaînes doivent contenir le même texte, et != si elles doivent être différentes. Les variables de part et d’autre de la comparaison doivent être définies avant l’évaluation de la condition. Pour approfondir le sujet, consultez la comparaison de chaînes en Python.

Cet exemple vérifie si un nom correspond à la valeur attendue :

name = "Alice"
if name == "Alice":
    print("Hello, Alice!")
else:
    print("You're not Alice.")

Python distingue les majuscules des minuscules : "Alice" == "alice" est donc faux. Vous pouvez aussi comparer les longueurs avec len() lorsque la taille, et non le contenu, est importante :

word1 = "Python"
word2 = "Programming"
if len(word1) < len(word2):
    print(f"{word1} is shorter than {word2}")
else:
    print(f"{word1} is not shorter than {word2}")

Les opérateurs <, >, <= et >= comparent les chaînes dans l’ordre lexicographique des points de code Unicode. Ils ne mesurent pas le sens des mots et ne reproduisent pas nécessairement l’ordre alphabétique de toutes les langues. Pour trier du texte destiné aux utilisateurs, choisissez une méthode de tri adaptée à la langue.

Utiliser le mot-clé in avec des chaînes

Avec une chaîne, in vérifie si le texte à gauche apparaît comme sous-chaîne. La recherche distingue les majuscules des minuscules et ne nécessite pas que la correspondance forme un mot distinct :

sentence = "Python is awesome"
if "awesome" in sentence:
    print("The sentence contains 'awesome'")

Pour vérifier qu’une saisie correspond exactement à l’une de plusieurs chaînes acceptées, utilisez une collection. Dans l’exemple suivant, la réponse est normalisée avant la vérification de son appartenance :

user_input = "y"
if user_input.lower() in ["y", "yes", "yeah"]:
    print("User agreed")
else:
    print("User did not agree")

Pour rechercher une sous-chaîne et découvrir des motifs associés, consultez comment vérifier qu’une chaîne en contient une autre en Python. Pour trouver les occurrences répétées, consultez la recherche de toutes les occurrences d’un caractère dans une chaîne.

Comparaison de chaînes sans tenir compte de la casse

Normalisez les deux valeurs lorsque la comparaison doit ignorer la casse. lower() convient souvent aux correspondances simples ; casefold() est conçu pour une comparaison insensible à la casse plus complète dans le texte Unicode. La normalisation modifie la manière de comparer : utilisez-la uniquement lorsque le besoin le justifie.

user_input = "YES"
if user_input.lower() == "yes":
    print("Affirmative response received")

La même méthode s’applique à une vérification d’appartenance :

color = "RED"
if color.lower() in ["red", "blue", "green"]:
    print("Color accepted")
else:
    print("Color not accepted")

Utilisez lower() ou upper() pour convertir simplement la casse. Consultez la conversion d’une chaîne en minuscules ou en majuscules en Python pour d’autres exemples.

Comparaisons de chaînes avancées

Détecter les anagrammes

Trier les caractères permet de vérifier simplement si deux chaînes contiennent les mêmes caractères en mêmes quantités :

word1 = "listen"
word2 = "silent"
if sorted(word1) == sorted(word2):
    print("The words are anagrams")

Cette méthode considère les majuscules et les minuscules comme des caractères différents, et tient compte des espaces et de la ponctuation. Normalisez ou filtrez d’abord les chaînes si ces caractères doivent être ignorés.

Utiliser les méthodes des chaînes

Des méthodes telles que startswith() et endswith() permettent de vérifier directement un préfixe ou un suffixe :

filename = "document.txt"
if filename.endswith(".txt"):
    print("Text file detected")

Combiner plusieurs conditions

Combinez les vérifications avec and, or et not. Pour que la condition complète soit vraie, chaque partie reliée par and doit l’être :

name = "John Doe"
if name.startswith("John") and " " in name:
    print("Name matches the expected format")

Il s’agit d’une vérification textuelle simple ; elle ne valide pas tous les formats de nom possibles.

Comparer l’identité des objets

is vérifie si deux noms font référence au même objet. Pour comparer le contenu de chaînes, utilisez == : l’identité des objets ne permet pas de tester de manière fiable l’égalité du texte.

first = "Python"
second = "Python"
if first == second:
    print("The strings have equal contents")

Conclusion

Utilisez == ou != pour comparer le contenu de chaînes, in pour rechercher une sous-chaîne ou vérifier l’appartenance à une collection, et la normalisation lorsque la casse ne doit pas compter. Les méthodes des chaînes conviennent aux vérifications de préfixe et de suffixe. Pour comparer du texte, choisissez == : is répond à une autre question, celle de l’identité des objets.

FAQ

Les comparaisons de chaînes distinguent-elles les majuscules des minuscules en Python ?
Oui. Par défaut, "Python" et "python" sont des chaînes différentes. Normalisez les deux valeurs si la casse doit être ignorée.

Une instruction if peut-elle vérifier plusieurs conditions portant sur des chaînes ?
Oui. Reliez les conditions avec and ou or, et utilisez des parenthèses si elles clarifient le regroupement voulu.

Quelle est la différence entre == et is ?
== compare les valeurs ; is vérifie si deux références désignent le même objet. Pour comparer le contenu de chaînes, utilisez ==.

Comment vérifier qu’une chaîne commence ou se termine par un texte précis ?
Appelez startswith() ou endswith(), par exemple filename.endswith(".txt").

Puis-je utiliser des expressions régulières dans une condition if ?
Oui. Vous pouvez appeler dans la condition une fonction du module re, comme re.search(pattern, text), lorsque les règles de correspondance nécessitent un motif. Pour une simple recherche de sous-chaîne, in est généralement plus direct.