Formation I.S.N.

Les indispensables

Structure conditionnelle minimale, partielle, complète

Forme minimale en if

Langage courantLangage 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 courantLangage 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 courantLangage 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érateurSignification 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 :

Image dans un article

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 :

SymboleSignification 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
powPuissance
sqrtRacine carrée
piπ
sinSinus d'un angle
cosCosinus d'un angle
expExponentielle
logLogarithme népérien
absValeur absolue
minMinimum
maxMaximum
floorPartie entière
randomNombre 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.