• Keine Ergebnisse gefunden

Les éléments structurants d’un programme Python

Tout programme python se construit autour d’un certain nombre d’éléments qui en constituent la structure. Il s’agit notamment de la définition des variables à travers un ensemble d’opérations arithmétiques ou logiques mais aussi de la définition des instructions de manière séquentielle. On distingue plusieurs types d’instructions : les instructions inconditionnelles (c'est-à-dire des instructions qui doivent toujours être exécutées chaque fois que le programme est lancé), les instructions conditionnelles (définies avec la condition if….) et les instructions en boucles (définies avec la clause Do while… et la clause for…). Le but de cette section est d’étudier chacun de ces éléments en donnant des détails sur leur définition et leur utilisations lors l’écriture d’un code python.

En plus des variables et des instructions, les programmes Pythons peuvent aussi contenir des commentaires de code. Ces commentaires s’avèrent incontournables notamment dans les programmes plus complexes permettant à d’autres utilisateurs de comprendre la logique d’écriture. Il est donc fortement recommandé de mettre autant de commentaires que nécessaires afin de faciliter la lecture du code. Les commentaires Python sont définis à l’aide du caractère #. D’une manière générale, tout écriture apparaissant à la suite du signe # sur une ligne est traitée par l’interpréteur comme un commentaire.

1.2.1. Les variables 1.2.1.1. Définir une variable

Sous Python, une variable est un objet de programmation permettant de stocker une information en mémoire de la machine en attribuant un nom symbolique. Une variable est définie en utilisant l’opérateur mathématique = soit par assignation directe de sa valeur, ou par une assignation à partir de la valeur d’une autre variable. Exemples :

1.2.1.1.1. Définir une variable par assignation directe

x = 7 # définit la variable nommée x et lui assigne la valeur 7

23 y = 3.458 # définit la variable nommée y et lui assigne la valeur 3.458

msg = "Comment allez-vous ?" # Définit la variable nommée msg et lui assigne la valeur " Comment allez-vous ?"

Pour afficher les valeurs des trois variables définies, on utilise la fonction print() print(x)

print(y) print(msg)

Pour afficher les trois valeurs sur la même ligne on utilise une seule fonction print() en séparant les variables par des virgules :

print(x,y,msg)

NB : En mode interactif, il n’est pas nécessaire de préciser la fonction print(). Il suffit simplement de spécifier le nom de la variable et d’appuyer sur la touche Entrée. La valeur sera automatiquement affichée. Cette méthode raccourcie s’applique aussi à d’autres fonctions ou objets Python.

Le langage python offre plusieurs facilités pour réaliser les assignations de valeurs en raccourcissant les lignes de codes. On distingue par exemples les assignations multiples et les assignations parallèles.

Une assignation multiple consiste à attribuer une même valeur à plusieurs variables dans la même ligne de code. Exemple :

x = y = 7 # x et y prennent la même valeur simultanément 7.

Une assignation parallèle consiste à définir plusieurs variables en utilisant un seul symbole d’égalité. Exemple :

x, y = 4, 8.33 # On définit deux variables x et y dont les valeurs sont respectivement 4 et 8.33.

Nb : Les noms des variables (et les valeurs) sont séparées par les virgules de part et d’autre de l’égalité.

Pour fixer le nombre de décimaux lors de l’affichage d’un nombre, on utilise l’opérateur de formatage "%.nf"%nomVar où n est le nombre souhaité de décimaux à afficher et nomVar est le nom de la variable. Exemple : soit la variable x définie comme suit :

x=3.47568

On peut afficher la valeur de x avec un nombre de décimaux souhaitable comme suit : print("%.2f"%x) # Affichage de x avec 2 chiffres après la virgule

24 print("%.3f"%x) # Affichage de x avec 3 chiffres après la virgule

print("%.0f"%x) # Affichage de x avec 0 chiffres après la virgule

Le symbole f signifie float qui représente un nombre réel avec possibilité de décimaux contrairement aux nombres entiers de symbole %i (nous reviendrons plus en détails sur les différents type des variables plus tard). Le symbole % est un opérateur de formatage de valeur.

Il permet de faire apparaître la valeur d’une variable même au milieu d’une chaîne de caractères (nous reviendrons également sur les opérateurs de formatage de valeurs).

L’expression %.2f"%x signifie que la variable x doit être traitée comme un nombre réel avec 2 chiffres après la virgule. On peut mettre autant de valeurs qu’on souhaite. Par exemple, en mettant 0, on retombe sur le cas d’un nombre entier (aucun chiffre après la virgule). Ce qui peut être traduit en utilisant la fonction %i comme suit :

print("%.i"%x) # Affichage de x comme un entier naturel (integer)

Par ailleurs pour traiter x comme une chaine de caractères, on utilise la fonction %s (formatage en string). Ainsi, on a :

print("%.s"%x) # Affichage de x comme une chaîne de caractères 1.2.1.1.2. Définir une variable à partir d’autres variables

z1=x+y # définit la variable nommée z1 et lui assigne la somme des variables x et y

z2=x+5 # définit la variable nommée z2 ajoutant 5 à la valeur de x z3=2*y # définit la variable nommée z3 en multipliant la valeur de y par 2

NB : La définition des noms des variables obéissent à des règles bien précises. En effet, un nom de variable doit débuter par une lettre ou par le caractère de soulignement (underscore _) suivi par un nombre quelconque de lettres, chiffres ou de caractères de soulignement. L’underscore est le seul caractère spécial autorisé. Par exemple, le tiret du 6 n'est jamais autorisé dans la définition d’un nom de variable.

Par ailleurs, il est conventionnel d’écrire les noms des variable en minuscule (par exemple x au lieu de X, var1 au lieu de VAR1). Lorsque la variable doit avoir un nom composée (ex : ma variable), il est préférable de commencer la spécification des autres éléments du nom par un majuscule. Ex : maVariable, testValue, etc.. Cela facilite beaucoup la compréhension d’un programme. Tout comme pour les variables, les noms des fonctions doivent commencer par des minuscules. Mais les lettres en majuscule peuvent être autorisées pour des noms composés afin de faciliter la lecture du nom. Les noms commençant par une majuscule sont utilisés pour la définition des objets de types classe (nous y reviendrons).

1.2.1.1.3. Définir une variable à partir d’une séquence de valeurs

Les séquences de valeurs sont des variables très fréquemment rencontrées dans les programmes python. Elles correspondent à un ensemble de valeurs successives et ordonnées

25 dont les valeurs peuvent être extraites comme une liste. Les séquences de valeurs sont générées en utilisant la fonction range(). Exemple :

x=range(10) # Crée une séquence de valeurs entières allant de 0 à 9 x=range(2, 10) # Crée une séquence de valeurs entières allant de 2 à 9

x=range(1, 10, 2) # Crée une séquence de valeurs entières allant de 2 à 9 avec un pas de 2. Il renvoie alors 1, 3, 5, 7 et 9

Pour afficher les valeurs générées, on peut utiliser la fonction list() ou la fonction tuple() telles que :

x=range(10)

print(list(x)) # renvoie une liste :valeurs entre crochets [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(tuple(x)) # renvoie un tuple : valeurs entre parenthèses (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

Nous reviendrons plus en détails sur la définition des objets liste ou tuple qui correspondent chacun à un objet particulier dans Python.

1.2.1.2. Type d’une variable

Définir le type d’une variable

Le type d’une variable correspond à la nature de celle-ci. Il existe de nombreux autres types de variables (nombre entier, nombre réel, chaînes de caractères, etc). Les types de variables les plus couramment rencontrés sont les entier (int) , les nombres réels (float), les chaînes de caractères (str). A chacun de ces types de variables est associé un certain nombre d’attributs ou de méthodes. Par exemple, pour deux nombres 20 et 45. En faisant 20+45, on obtient 65. Par contre pour deux caractère A et B, en faisant "A"+"B" on obtient "AB"

Python est un langage au typage dynamique, c’est-à-dire qu’il reconnaît directement le type des variables lorsque sa valeur est indiquée. Ainsi, contrairement à d'autres langages comme le langage C, il n'y a pas de déclaration de type obligatoire lors de la création d'une variable.

Exemples :

x = 2 # type entier (int)

x =2. # type réel (float avec décimaux) x='2' # type caractère (string)

Pour connaitre le type d’une variable, on utilise la fonction type(). Par exemples :

Pour la définition x=2, en faisant type(x) renvoie <class 'int'> signifiant un entier (integer). Pour la définition x=2., la fonction type(x) renvoie <class 'float'> signifiant un nombre réel. Et pour la définition x='2', la fonction type(x) renvoie <class 'str'> signifiant que x est de type chaîne de caractères (string).

26 NB : Il faut remarquer que les variables en chaînes de caractères sont toujours définies avec des guillemets (qui peuvent être des guillemets simples, doubles ou triples). Avec des guillemets simples, on a des chaines de types char alors qu’avec des guillemets doubles, on obtient des chaînes de type string. Noter aussi que même si une variable est définie avec des nombres, lorsque ces nombres sont indiqués avec des guillemets, python traite cette variable comme une chaine de caractères. Néanmoins, il existe des fonctions pour convertir une variable d’un type à un autre lorsque cette conversion est autorisée. Voir les exemples suivants.

Tester le type d’une variable

Exemple : soient les variables i, j,k,m i = 123

type(i) # renvoie <type 'int'>

type(i) is int # renvoie True j = 123456789L

type(j) # renvoie <type 'long'>

type(j) is long # renvoie True k = 123.456

type(k) # renvoie <type 'float'>

type(k) is float # renvoie True m = 'ABCD'

type(m) # renvoie <type 'str'>

type(m) is str # renvoie True Convertir le type d’une variable

Exemple 1 : Conversion d’une variable de type caractère en variable de type entier ou réel.

Soit x='2' une variable en caractère définie par 2. Pour convertir cette variable en type numérique (entier), on utilise la fonction int(). On a :

x=int(x)

Pour convertir en un nombre réel autorisant les décimaux, on fait : x=float(x)

NB : La conversion d’une variable de type caractère en variable de type numérique n’est possible que lorsque la valeur de la variable est constituée uniquement de chiffres. La conversion renvoyera un message d’erreur lorsque la valeur de x contient une lettre. Exemple : pour x='2xeb'. En essayant de convertir cette variable en type numérique int, on reçoit un message d’erreur « invalid literal for int() with base 10: '2xeb ' ». Et avec la fonction float, on reçoit le message « could not convert string to float: '2xeb' ».

Exemple 2 : Conversion d’une variable de type numérique (entier ou réel) en variable de type caractère.

27 Soit x=2 une variable numérique de type entier définie par 2. Pour convertir cette variable en type caractère, on utilise la fonction str(). On a :

x=str(x)

On utilise aussi la même fonction lorsqu’il s’agit d’une variable numérique de type réel comme par exemple x=2.4756.

x=str(x)

En conclusion, on peut noter que toutes les variables numériques sont convertible en type caractère mais une variable n’est convertible en type numérique que lorsque la valeur de celle-ci est constituée uniquement de chiffres. Toutefois, les conversions sont possibles vers d’autres formats de données comme les nombres du système hexadécimal.

Manipulation du type d’une variable dans un dataframe

Pour connaitre le type d’une variable dans un dataframe, on utilise la fonction dtypes.

Exemple :

mydata.dtypes # renvoie le type de chaque variable présente dans la table de données mydata.

mydata['myvar1'] # renvoie le type de la variable myvar1 de la table mydata

mydata['myvar1', 'myvar2'] # renvoie le type des deux variables myvar1 et myvar2

NB : Les variables en caractères sont représentées par le type « object », les variable numérique entières par « int », les variables numérques décimales par « float ».

1.2.1.3. Méthodes associées aux variables

A chaque variable créée dans python, est associé un ensemble d’attributs (ex : type) mais aussi un ensemble de méthodes, c'est à dire un ensemble d’opérations de traitement et d’exploitation réalisable avec cette variable. Pour afficher l'ensemble des méthodes d'une variable, on utilise la commande dir(). Exemple :

x=2.5 # Définit une variable numérique x

y='mon texte' # Définit une variable en chaîne de caractères y.

Pour afficher l’ensemble des méthodes associées à chacune de ces variables, on fait : print(dir(x))

print(dir(y))

Ainsi, pour obtenir de l’aide sur une méthode spécifique, on utilise la fonction help() comme suit : help(x.nomMethode) # où nomMethode est le nom de la méthode considérée. Par

28 exemple, pour une variable numérique de type float, il existe une méthode nommé conjugate.

Pour obtenir de l’aide sur cette fonction, on fait : print(help(x.conjugate))

Pour afficher l’aide sur toutes les fonctions associées à la variable x, on fait simplement : print(help(x))

1.2.1.3. Les opérateurs arithmétiques et logiques (booléens)

Deux grandes catégories d’opérateurs sont utilisées en Python pour définir les variables et les instructions. Il s’agit des opérateurs arithmétiques et algébriques et les opérateurs logiques.

Les premiers permettent de réaliser les opérations mathématiques courantes tandis que les seconds permettent de réaliser des comparaisons de valeurs. Une valeur booléenne est une évaluation logique représentant l’une des deux possibilités suivantes : vrai ou faux. Les valeurs booléennes sont le résultat de l’évaluation d’expressions logiques et elles servent à faire des choix dans un programme (effectuer telle action quand telle condition est réalisée).

Le tableau ci-dessous fournit les détails sur les différents opérateurs en Python. Pour accéder à la liste complète des opérateurs standards de python et leurs équivalents fonctions, voir la page https://docs.python.org/2/library/operator.html. Consulter http://www.tutorialspoint.com/python/python_basic_operators.htm pour quelques exemples d’utilisations des opérateurs standards.

Opérateurs arithmétiques

Symbole Exemple

Addition + x=2+3

Soustraction - z=x-y

multiplication * y=3*x

Division (quotient réel) / z=5/2 # renvoie 2.5

Division (quotient entier) // z=5//2 # renvoie 2

Puissance ** x**2 # x puissance 2

Reste de la division (modulo) % 17%3 # renvoie 2

Addition incrémentée += x+=4 # ajoute 4 à la

valeur initiale de x

29

Opérateurs logiques (variables booléennes et valeurs tests)

Egal ==

x==2 # Egalité logique ou mathématique (différent

de l’égalité

d’assignation =)

Strictement inférieur < x<2

Inférieur ou égal <= x<=2

Strictement supérieur > x>2

Supérieur ou égal >= x>=2 renvoyée lorsque l’expression est vérifiée. Dans le cas contraire, elle renvoie False. Ces deux valeurs sont qualifiées de valeurs booléennes. Exemple : Soit la variable note définie comme suit :

note = 13.0

On va tester quelques expressions logiques : print(note==13.0) # Renvoie True

print(note >= 12.0 and note < 14.0) # Renvoie True

30 print(note<50) # renvoie True

print(note>20) # renvoie False print(note) # renvoie False

print(not note>20) # renvoie True

1.2.2. Les instructions conditionnelles : la clause « if… else »

Les instructions conditionnelles sont des opérations que le programme doit exécuter lorsqu’il expression logiques renvoie True ou False (selon le cas). Les instructions conditionnelles sont définies à l’intérieur d’une clause if…else

La structure générale d’un bloc if…else se présente comme suit : if expression_logique :

instruction 1 instruction 2 ..

instruction n else :

autre_bloc_instructions

Attention au symbole « : » à la suite du mot clé if ou else qui marque la fin de la déclaration de la fonction if ou else et le début de la définition des instructions.

Noter aussi que la clause else n’est pas obligatoire c'est-à-dire qu’il peut y avoir une clause if sans clause else.

Voici ci-dessous quelques exemples d’utilisation de la fonction if.

Exemple 1 : Instructions avec une clause « if » simple x = 150

if (x > 100):

print("x dépasse 100")

On définit d’abord une variable x en lui assignant la valeur 150. Ensuite on définit une expression logique permettant de vérifier si x est supérieur à 100 ou pas. Dans cette expression conditionnelle, lorsque l’expression logique est vraie (c'est-à-dire renvoie True), on affiche un message indiquant que x est supérieur à 100. Lorsque la condition n’est vérifiée aucun message ne sera affiché. Il faut tout de même signaler ici que puisque la valeur de x est 150 (donc supérieur à 100) alors la condition sera toujours vérifiée et le message sera tours affichée. Cela jusqu’à ce qu’on assigne une nouvelle valeur à x qui soit inférieur à 100.

NB : Dans une clause if, les instructions (ici print() ) doivent être espacées de 4 pas (avec la touche tab), de manière à ce que celle-ci soit indentée (c’est-à-dire en retrait par rapport à la clause if à laquelle elle est rattachée). En effet, dans le langage Python, les blocs d’instructions

31 sont définis grâce à la suite d’un décalage (ou indentation). Contrairement à, d’autres langages, comme le C qui utilisent des marqueurs plus explicites {bloc d’instructions }.

L’avantage de rendre le décalage obligatoire comme marqueur de bloc d’instructions est qu’il oblige à une écriture claire des programmes.

Il faut aussi noter que les parenthèses utilisées avec l’instruction if sont optionnelles. Elles sont simplement utilisées pour améliorer la lisibilité de l’expression logique (qui peut être très complexe dans certains cas).

Exemple 2 : Instructions avec la clause if… else…

x = 150

if (x > 100):

print("x dépasse 100") else:

print("x ne dépasse pas 100")

Contrairement au premier exemple où il n’y avait pas d’instructions alternative à exécuter dans le cas où l’expression logique n’est pas vérifiée, dans ce deuxième exemple, on définit une instruction alternative en utilise la clause else…

x = 7

if (x % 2 == 0):

print("x est pair car le reste de sa division par 2 est nul") else:

print("x est impair car le reste de sa division par 2 n’est pas nul ")