Structure conditionnelle minimale, partielle, complète
Forme minimale en if
Langage courant | Langage Python |
Si expression Alors séquence d'instructions |
if expression:
sequence d'instructions
|
Il s'agit là de la forme la plus simple d'une structure de test. Une seule séquence d'instructions ne s'exécute à condition que l'expression
soit dans l'état True
.
Forme partielle en if,else
Langage courant | Langage Python |
Si expression Alors séquence d'instructions 1 Sinon séquence d'instructions 2 |
if expression:
sequence d'instructions 1
else:
sequence d'instructions 2
|
Il s'agit là de la forme déjà utilisée dans notre programme de bataille navale. Une deuxième séquence d'instructions sera exécutée si l'expression
n'est pas dans l'état True
.
Forme complète en if,elif
et else
Langage courant | Langage Python |
Si expression 1 Alors séquence d'instructions 1 Sinon Si expression 2 Alors séquence d'instructions 2 Sinon Si expression 3 Alors séquence d'instructions 3 ........ Sinon Si expression n - 1 Alors séquence d'instructions n - 1 Sinon séquence d'instructions n |
if expression 1 :
sequence d'instructions 1
elif expression 2 :
sequence d'instructions 2
elif expression 3 :
sequence d'instructions 3
#...
elif expression n – 1 :
sequence d'instructions n - 1
else :
sequence d'instructions n
|
Les deux premières formes de condition que l'on vient de voir sont pratiques mais assez incomplètes.
Considérons par exemple une variable a
de type entier. On souhaite faire une action si cette variable est positive, une autre action
si cette variable est négative et une troisième action si cette variable est nulle.
L'utilisation de la forme partielle n'est pas adaptée puisqu'elle permet l'exécution de seulement deux instructions et nous en avons besoin de trois.
Peut-être pourrait-on alors utiliser trois fois de suite la forme simple de la structure conditionnelle :
Cette méthode n'est pas optimale, tout d'abord parce-qu'elle nous oblige à écrire trois conditions séparées pour tester une même variable.
De plus, dans la cas où la variable remplirait deux des trois conditions (a = 0), les deux instructions associées s'exécuteraient.
La condition if est donc bien pratique mais insuffisante.
La structure la plus adaptée à cette situation est celle correspondant à la forme complète :
Le mot-clé elif
est une contraction de « else if » que l'on peut traduire littéralement par « sinon si ».
On peut placer autant de elif
que l'on veut après la condition en if
. Le else
qui vient ensuite reste facultatif.
En revanche, si elle figure dans la structure, c'est une unique fois en clôture de structure.
De nouveaux opérateurs
Les conditions ou expressions que l'on trouve dans une structure conditionnelle doivent nécessairement contenir des opérateurs auxquels peuvent
éventuellement s'ajouter des mots-clés. En voici une description.
Opérateurs de comparaison
Rien de bien compliqué à comprendre pour ce type d'opérateurs : ils ont déjà tous été manipulés en mathématiques.
Attention néanmoins à la syntaxe qui leur est associée dans Python qui diffère parfois de ce dont on a l'habitude en mathématiques.
Opérateur | Signification littérale |
< | Strictement inférieur à |
> | Strictement supérieur à |
<= | Inférieur ou égal à |
>= | Supérieur ou égal à |
== | Egal à |
!= | Différent de |
Attention ! L'égalité de deux valeurs est comparée avec l'opérateur « ==
» et non avec « =
» qui est l'opérateur
d'affectation d'une valeur à une variable et qui par conséquent ne doit pas être utilisée dans une condition.
Prédicats et booléens
Il faut savoir que les conditions qui se trouvent entre le if et les deux points sont appelées des prédicats.
On peut les tester directement dans l'interpréteur de commandes pour comprendre à quoi ils correspondent :
L'interpréteur de commandes renvoie tantôt True
(c'est-à-dire « vrai ») tantôt False
(c'est-à-dire « faux »).
True
et False
sont deux valeurs possibles d'un type non encore abordé : le type booléen (bool
).
Les variables de ce type ne peuvent prendre que deux valeurs (True
ou False
) et peuvent s'avérer pratiques justement
pour stocker des prédicats comme dans l'exemple suivant :
Selon l'âge saisi par l'utilisateur, le programme inscrira « majeur : True
» ou bien « majeur : False
» autrement dit
la variable majeur vaudra True
ou False
.
Attention ! D'une façon générale, sous Python la casse est significative. Le T majuscule de True et le F majuscule de False ont donc toute leur
importance. D'une façon plus générale, deux variables nommées avec les mêmes lettres seront distinctes si elles diffèrent au niveau de la casse.
Les mots-clés and
, or
et not
Il arrive souvent que des conditions aient à tester plusieurs prédicats, par exemple si l'on chercher à tester si une variable de type entier
se trouve dans un intervalle.
Pour cela il existe le mot-clé and
qui va permettre de tester à la fois deux conditions. Dans cet exemple, le programme va tester
si la variable a appartient à l'intervalle [2 ; 8].
Sur le même mode, il existe le mot-clé or
. En reprenant notre exemple, si l'on cherche maintenant à savoir si la variable a
n'appartient pas à l'intervalle [2 ; 8], cela donnera :
Enfin il existe le mot-clé not
qui inverse un prédicat. Ainsi le prédicat not a==5
équivaut à a!=5
.
Si l'on ajoute à cela le mot-clé is
qui teste l'égalité non pas des valeurs de deux variables mais de leurs références, le script
servant à connaître la majorité d'un utilisateur peut être complété de la manière suivante :
Pour terminer sur ce point, il est possible d'utiliser des parenthèses ouvrantes et fermantes pour encadrer des prédicats et les comparer
suivant des priorités bien déterminées.
Une liste d'opérateurs à connaître
Pour disposer d'une liste assez complètes, voici les principaux opérateurs qui constituent les expressions :
Symbole | Signification littérale |
+ | Addition entière ou décimale |
- | Soustraction entière ou décimale |
* | Multiplication entière ou décimale |
/ | Division décimale |
// | Division entière (euclidienne) |
% | Reste de la division euclidienne |
pow | Puissance |
sqrt | Racine carrée |
pi | π |
sin | Sinus d'un angle |
cos | Cosinus d'un angle |
exp | Exponentielle |
log | Logarithme népérien |
abs | Valeur absolue |
min | Minimum |
max | Maximum |
floor | Partie entière |
random | Nombre aléatoire décimal entre 0 et 1 selon la loi uniforme |
< | Strictement inférieur à |
> | Strictement supérieur à |
<= | Inférieur ou égal à |
>= | Supérieur ou égal à |
== | Egal à |
!= | Différent de |
len | Longueur d'une chaîne de caractère |
s[n] | nème élément de la chaîne de caractères s |
chr | Prend en argument un entier n et retourne une chaîne de caractères en contenant un unique dont le code ASCII est n |
ord | Opérateur inverse du précédent qui prend en argument une chaîne de caractère en contenant un unique et qui retourne le code ASCII correspondant |
+ | Concaténation. S'applique à deux chaînes de caractères pour en constituer qu'une seule formée des caractères de la première et de la seconde |
not | Non |
and | Et (variante & ) |
or | Ou (variante | ) |
Attention ! Certains opérateurs avec le logo
nécessitent
l'import d'un module pour fonctionner par l'instruction from "nom_module" import *
. Il s'agit en l'occurence ici du module
random
pour la fonction random()
et du module math
pour toutes les autres fonctions.
La fonction input()
L'instruction qui contient la fonction input()
est une instruction d'entrée.
input()
est une fonction qui va caractériser nos premières interactions avec l'utilisateur : à sa rencontre, le programme va
s'interrompre pour attendre que l'utilisateur saisisse une valeur et appuie sur ENTRÉE
. A cet instant le programme renvoie ce que
l'utilisateur a saisi. Il faut donc piéger cette valeur dans une variable.
Sans précision particulière, la fonction input()
renvoie une chaîne de caractères. Pour obtenir le renvoie d'un autre
type de variable, il faut lui préciser en l'intégrant dans la fonction-type.
Par exemple, si l'on veut que la variable saisie soit stockée comme un entier, on utilisera la fonction int(input())
.
Dans ce cas, il peut être utile de préciser à l'utilisateur qu'un nombre entier est attendu. Pour cela, la fonction input()
peut
recevoir une chaîne de caractères en argument servant de message à donner à l'utilisateur.
C'est ce que nous avons utilisé plus haut en introduction du programme testant la majorité de l'utilisateur :
La fonction print()
L'instruction qui contient la fonction print()
est une instruction de sortie.
La fonction print()
permet d'afficher. Elle peut recevoir entre ses parenthèses autant d'arguments que l'on veut afin d'obtenir un
affichage multiple.
Variable de type string intégrée à un texte par des virgules (,)
Dans ce cas, tous les arguments sont séparés par une virgule.
Ainsi, lorsque l'argument est une variable, la fonction print()
va afficher sa valeur dans l'état d'exécution du programme en cours.
Lorsque l'argument est une chaîne de caractères, la fonction print()
va afficher la chaîne sans délimiteur particulier.
Pour tous les autres objets (types), l'affichage s'effectuera avec les délimiteurs correspondants.
Voici un exemple d'utilisation pratique pour rendre la réponse du programme plus lisible :
Le premier appel de la fonction print()
donne un affichage simple de la valeur de la variable a
: 3.
Le deuxième appel de la fonction print()
donne un affichage multiple. Sur une même ligne vont s'afficher successivement la chaîne de
caractères ''a =''
, la valeur de la variable a
, la chaîne de caractères ''et b =''
et la valeur de la variable b
.
On obtient alors la « phrase » explicite a = 6 et b = 4
.
Remarque 1 : La virgule crée automatiquement un espace entre le texte et la valeur de la variable.
Remarque 2 : Une variable n’est précédée d’une virgule que lorsque qu’elle suit un texte et est suivie d’une virgule que si elle précède un texte.
Variable de type string intégrée à un texte par le signe plus (+)
On encadre chaque bribe de texte avec des guillemets et on insère nos variables à l’aide du signe plus.
Voici un exemple :
Remarque 1 : Le signe plus ne crée pas automatiquement un espace entre le texte et la valeur de la variable, comme nous le
montrent les exemples ci-dessus; il faut, si nécessaire, ajouter l’espace dans le texte qui précède ou qui suit la variable.
Remarque 2 : La variable monAge
, dans le dernier exemple, est incluse dans la fonction str()
: il existe plusieurs types
de variables (string
pour les chaînes de caractères, integer
pour les nombres entiers, float
pour les nombres
décimaux etc…). Ici, il faut considérer que le signe plus « additionne » des données, or Python n’additionne que des données du même type.
str()
convertit le nombre entier 25 en une chaine alphanumérique de type texte, autrement dit 25 devient « 25 » et l’addition de châines
de caractères devient ainsi possible.
Remarque 3 : Il est possible d’utiliser les 2 types de signes dans la même fonction print()
pour concaténer (réunir) textes et
variables, comme le montre l’exemple ci-dessous :
La fonction format()
Cette fonction bien pratique s’affranchit des contraintes des guillemets et des signes de concaténation. La fonction format()
est introduite par un point juste après le guillemet de fin et encadre l’ensemble des variables utilisées dans le texte. Chaque variable est intégrée
au texte par des accolades et le numéro de l’accolade correspond à l’ordre dans lequel la variable apparait dans la fonction format()
.
Voici un exemple :
Remarque : Le numéro de la première accolade est toujours 0
Trucs et astuces
Incrémentation de variables
Dans de nombreux programmes, il sera utile d'incrémenter des variables, c'est-à-dire de lui rajouter 1.
La méthode naturelle consisterait à écrire variable = variable + 1
.
Python permet de raccourcir cette instruction en écrivant variable += 1
.
Permutation de variables
Python propose un moyen simple de permuter deux variables (échanger leur contenu). Dans d'autres langages, il est nécessaire de passer par une
troisième variable qui retient l'une des deux valeurs… ici, c'est beaucoup plus simple :
Astuce :
En dehors du classique :
aux=x
x=y
y=aux
il existe un autre moyen d'échanger le contenu de deux variables sans avoir recours à une troisième :
x=x+y
y=x-y
x=x-y
Couper une instruction sur deux lignes
Le symbole « \ » (anti-slash) permet, avant un saut de ligne, d'indiquer à Python que cette instruction se poursuit à la ligne suivante :
Pour une bonne pratique
Pour conclure sur ce chapitre, quelques conseils de bonne pratique sont à suivre en programmation.
- Le nom des variables doit être explicite et écrit en minuscule, y compris la première lettre, en utilisant des lettres
ordinaires (pas de cédille, d'accent, de caractères spéciaux…)
- Éviter d'écrire des instruction trop longues sur une même ligne afin de faciliter la lecture du programme.
- Penser à commenter un programme afin d'aider une tierce personne à comprendre les choix qui ont été faits ou à s'aider
soi-même lorsqu'on reprend ultérieurement son programme afin de le poursuivre. Les commentaires doivent être précis et concis.