11.1 Opérateur ternaire
En Python, il existe ce qu'on appelle un opérateur ternaire, qui est en
fait une version modifiée de l'opérateur if
else
.
Supposons que vous ayez ce code :
if a < b:
min = a
else:
min = b
Pour que ce code simple ne prenne pas trop de place, on a inventé une écriture compactée. Elle ressemble à ça :
min = a if a < b else b
L'aspect général de l'opérateur ternaire peut être décrit par la forme :
variable = valeur1 if condition else valeur2
Si condition est vraie, alors la variable est assignée à valeur1, si c'est faux — valeur2.
Note que les deux-points après la condition ne sont pas utilisés ici.
11.2 Opérateur else dans les boucles
En Python, l'opérateur else
est souvent associé aux opérateurs
conditionnels if
. Cependant, son utilisation ne se limite pas
à cela, et else
peut également être appliqué dans les boucles
for
et while
.
Cet aspect non intuitif de else
dans le contexte des boucles
peut dérouter les débutants, mais il ouvre des possibilités intéressantes
pour gérer le flux d'exécution du programme.
Comment fonctionne else
dans les boucles
Dans les boucles, else
s'exécute après la fin de la boucle,
mais uniquement si la boucle s'est terminée normalement (c'est-à-dire qu'elle
n'a pas été interrompue par l'opérateur break
). Cette
particularité rend else
utile dans les scénarios où il faut
vérifier si la boucle a été interrompue prématurément.
Exemple d'utilisation dans la boucle for
:
for i in range(3):
password = input('Entrez le mot de passe : ')
if password == 'secret':
print('Mot de passe accepté.')
break
else:
print('Aucune tentative ou tous les mots de passe sont incorrects.')
Ici, else
s'exécute si l'utilisateur a saisi un mot de passe
incorrect trois fois. Si l'utilisateur entre le bon mot de passe, la boucle
est interrompue par break
, et le bloc else
ne
s'exécute pas.
Exemple d'utilisation dans la boucle while
:
n = 5
while n > 0:
print(n)
n -= 1
else:
print('La boucle s\'est terminée normalement.')
Dans ce cas, else
s'exécute après que la boucle se soit
terminée naturellement, car la condition est devenue fausse.
Utilité pratique
L'utilisation de else
dans les boucles peut être
particulièrement utile dans les algorithmes de recherche, où il est
nécessaire de déterminer si la recherche a réussi. Par exemple, lors de la
recherche d'un élément dans une liste qui n'existe pas, vous pouvez utiliser
else
pour afficher un message d'échec après la fin de la
boucle.
Utilisez else
dans les boucles de manière claire et
cohérente, afin de ne pas embrouiller ceux qui liront votre code.
N'oubliez pas que else
dans les boucles n'est pas toujours
intuitif, il est donc souhaitable d'ajouter des commentaires ou de choisir
d'autres moyens de mise en œuvre de la logique si cela rend le code plus
compréhensible.
11.3 Boucles imbriquées
En Python, on peut écrire une logique très complexe de manière très compacte. Pour certains cas, vous aurez besoin d'if imbriqués, et pour d'autres, de boucles imbriquées. Parlons maintenant de certains aspects de leur fonctionnement :
Une boucle imbriquée signifie qu'une boucle est présente à l'intérieur d'une autre. Cela permet, par exemple, de traiter des tableaux multidimensionnels, des listes de listes ou d'autres structures de données imbriquées.
Les boucles imbriquées se composent d'une boucle externe et d'une ou plusieurs boucles internes. Chaque fois que la boucle externe accomplit une itération, la boucle interne s'exécute entièrement :
for i in range(3): # Boucle externe
for j in range(3): # Boucle interne
print(f"({i}, {j})")
Du point de vue de la boucle externe, la boucle interne et son contenu ne sont qu'un bloc de commandes exécutées pour chaque itération de la boucle externe. La boucle externe se moque totalement de ce qui se trouve à l'intérieur, du nombre de boucles, etc. Elle exécute simplement son bloc de commandes interne à chaque fois pour la variable de sa liste.
Imprimons une table de multiplication
— les boucles
imbriquées sont parfaites pour cette tâche. Créons une table de
multiplication en utilisant des boucles imbriquées, où une boucle
est responsable des multiplicateurs et l'autre des multiplicandes :
n = 5
for i in range(1, n + 1):
for j in range(1, n + 1):
print(f"{i} * {j} = {i * j}", end='\t')
print() # Passage à la ligne suivante pour le multiplicateur suivant
Ce code affichera la table suivante :
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
Pour mieux comprendre les boucles imbriquées, il te faudra simplement pratiquer davantage — c'est le moyen le plus rapide d'acquérir une compréhension de presque n'importe quel aspect non intuitif de la programmation.
GO TO FULL VERSION