Python >> Tutoriel Python >  >> Python

Comment tester plusieurs variables par rapport à une valeur ?

Pour tester plusieurs variables x , y , z contre une valeur v , utilisez l'opération d'appartenance définie v in {x, y, z} qui exploite le mot-clé in pour vérifier si la valeur v correspond à n'importe quelle valeur de l'ensemble {x, y, z} . La valeur de retour est un booléen et la complexité d'exécution est O(1) pour vérifier l'appartenance et O(n) pour créer l'ensemble temporaire.

La cause des erreurs

De nombreux programmeurs débutants ont du mal à écrire une condition qui compare de nombreuses variables à un entier ou à une chaîne. Dans ce didacticiel, vous trouverez plusieurs façons d'éviter les problèmes avec des conditions comme celle-ci :

x, y, z = 2, 3, 4

print('Test!')

if x or y or z == 1:
    print('We do not want this line of code to be printed out.')

Sortie :

Test!
We do not want this line of code to be printed out.

Nous pouvons maintenant être confus et nous demander pourquoi notre programme ne fonctionne pas ? Après tout, il ne devrait y avoir aucun résultat ! Cependant, il y en a, et la raison est simple, car la condition est remplie lorsqu'au moins une valeur est True , et dans notre code, même si deux conditions sont remplies, vous pourriez vous demander :Comment ?
Elles sont remplies car lorsque nous écrivons une condition de cette façon :

if x or y or z == 1:
    # your code here

Python voit cette ligne d'une manière légèrement différente de la nôtre, à savoir la valeur x et y n'est pas 2 et 3 dans ce cas, mais True et True, donc notre programme fonctionne, mais pas comme nous voudrions qu'il fonctionne.

Alors, comment faire en sorte que notre programme fonctionne comme nous l'avions prévu ? Heureusement, il existe quelques méthodes pour le faire. Vous pouvez obtenir un aperçu rapide dans notre shell interactif :

Exercice :Exécutez le shell et vérifiez si la sortie est la même pour les quatre méthodes. Maintenant, plongez dans chaque méthode en lisant l'article !

Méthode 1 :Conditions individuelles

Corrigez la ligne qui vérifie si chaque variable remplit les conditions en ajoutant manuellement une condition à chaque variable, dans ce cas remplacez x ou y ou z ==1 par x ==1 ou y ==1 ou z ==1.

print('Test!')
if x == 1 or y == 1 or z == 1:
    print('We do not want this line of code to be printed out')

Sortie :

Test!

Comme nous pouvons le voir, maintenant notre script fonctionne correctement, mais avec des programmes plus volumineux, cela prendrait beaucoup de temps, mais il existe des méthodes plus efficaces.

Méthode 2 :Adhésion

En Python, nous pouvons écrire une condition en utilisant le tuple, c'est un moyen plus rapide que d'ajouter la même condition à chaque variable de la ligne de vérification. Dans notre cas, le code ressemblerait à ceci :

print('Test!')
if 1 in (x, y, z):
    print('We do not want this line of code to be printed out')

Sortie :

Test!

C'est un moyen qui prend moins de place et est plus rapide, mais si vous voulez vérifier si une condition est remplie dans plus de variables, alors ce serait encore mieux d'utiliser l'ensemble, car l'ensemble n'autorise pas les mêmes valeurs y figurer. Remplacez simplement (…) par {…}.

Méthode 3 :Dictionnaire

Parfois, nous pouvons aussi utiliser un dictionnaire. Selon ce que fait notre programme, cela peut être un bon choix, par exemple, si vous souhaitez ajouter une lettre basée sur la valeur d'une variable à la liste, vous devez utiliser un dictionnaire au lieu d'écrire le programme de cette façon :

x, y, z, mylist = 1, 2, 3, []

if 1 in {x, y, z}:
    mylist.append("A")
if 2 in {x, y, z}:
    mylist.append("X")
if 3 in {x, y, z}:
    mylist.append("E")

Si vous utilisez un dictionnaire, cela ressemblera à ceci :

x, y, z, mylist = 1, 2, 3, []

numbers_to_letters = {1: "A", 2: "X", 3: "E"}
for number in numbers_to_letters:
    if number in {x, y, z}:
        mylist.append(numbers_to_letters[number])

La sortie sera la même (AXE), mais le dictionnaire a meilleure apparence et lorsque vous devez écrire un programme plus volumineux, l'écriture prendra moins de temps.

Méthode 4 :une seule ligne

Et si nous voulions écrire une solution en une ligne ? Il y a aussi un moyen de le faire avec la compréhension de liste ! Et ça ressemble à ça :

mylist = [{1: 'A', 2: 'X', 3: 'E'}[i] for i in [0, 1, 2, 3] if i in (x, y, z)]

Au début, une liste est créée, puis une boucle for parcourt les valeurs 1, 2, 3 et vérifie si ces nombres sont égaux à l'une des variables. Si c'est le cas, en fonction de la valeur i représente, il ajoute une lettre à la liste qui peut être trouvée dans le dictionnaire, par exemple si i =1 et qu'une des variables vaut également 1, alors la lettre A est ajoutée à la liste appelée maliste et ainsi de suite.

Résumé

Nous avons appris pourquoi vous ne pouvez pas écrire des conditions comme celle-ci :if x or y or z == 1 et comment écrire correctement ces conditions, et aussi que faire si vous souhaitez ajouter, par exemple, des lettres qui remplissent notre condition à la liste.

J'espère que cet article de blog vous a aidé à comprendre la cause possible d'un résultat inexact dû à une condition mal écrite et vous a fourni une méthode appropriée.