Apprendre programmer avec Python


prcdentsommairesuivant

Chapitre 2 : Premiers pas

Il est temps de se mettre au travail. Plus exactement, nous allons demander l'ordinateur de travailler notre place, en lui donnant, par exemple, l'ordre d'effectuer une addition et d'afficher le rsultat.

Pour cela, nous allons devoir lui transmettre des instructions , et galement lui indiquer les donnes auxquelles nous voulons appliquer ces instructions.

2.1. Calculer avec Python

Python prsente la particularit de pouvoir tre utilis de plusieurs manires diffrentes. Vous allez d'abord l'utiliser en mode interactif, c'est--dire d'une manire telle que vous pourrez dialoguer avec lui directement depuis le clavier. Cela vous permettra de dcouvrir trs vite un grand nombre de fonctionnalits du langage. Dans un second temps, vous apprendrez comment crer vos premiers programmes (scripts) et les sauvegarder sur disque.

L'interprteur peut tre lanc directement depuis la ligne de commande (dans un shell Linux, ou bien dans une fentre DOS sous Windows) : il suffit d'y taper la commande "python" (en supposant que le logiciel lui-mme ait t correctement install).

Si vous utilisez une interface graphique telle que Windows, Gnome, WindowMaker ou KDE, vous prfrerez vraisemblablement travailler dans une fentre de terminal , ou encore dans un environnement de travail spcialis tel que IDLE. Voici par exemple ce qui apparat dans une fentre de terminal KDE (sous Linux)5 :

Image non disponible

5 Sous Windows, vous aurez surtout le choix entre l'environnement IDLE dvelopp par Guido Van Rossum, auquel nous donnons nous-mme la prfrence, et PythonWin, une interface de dveloppement dveloppe par Mark Hammond. D'autres environnements de travail plus sophistiqus existent aussi, tels l'excellent Boa Constructor par exemple (qui fonctionne de faon trs similaire Delphi), mais nous estimons qu'ils ne conviennent gure aux dbutants. Pour tout renseignement complmentaire, veuillez consulter le site Web de Python.

Sous Linux, nous prfrons personnellement travailler dans l'environnement graphique WindowMaker (plutt que KDE ou Gnome trop gourmands en ressources), en ouvrant une simple fentre de terminal pour lancer l'interprteur Python ou l'excution des scripts, et en faisant appel l'excellent logiciel Nedit pour l'dition de ces derniers.

Avec IDLE sous Windows, votre environnement de travail ressemblera celui-ci :

Image non disponible

Les trois caractres suprieur constituent le signal d'invite, ou prompt principal, lequel vous indique que Python est prt excuter une commande.

Par exemple, vous pouvez tout de suite utiliser l'interprteur comme une simple calculatrice de bureau. Veuillez donc vous-mme tester les commandes ci-dessous (Prenez l'habitude d'utiliser votre cahier d'exercices pour noter les rsultats qui apparaissent l'cran) :

 
Sélectionnez

>>> 5+3
 
>>> 2 - 9			 # les espaces sont optionnels
 
>>> 7 + 3 * 4 		 # la hirarchie des oprations mathmatiques
					 # est-elle respecte ?
 
>>> (7+3)*4
 
>>> 20 / 3			 # surprise !!!

Comme vous pouvez le constater, les oprateurs arithmtiques pour l'addition, la soustraction, la multiplication et la division sont respectivement +, -, * et /. Les parenthses sont fonctionnelles.

Par dfaut, la division est cependant une division entire, ce qui signifie que si on lui fournit des arguments qui sont des nombres entiers, le rsultat de la division est lui-mme un entier (tronqu), comme dans le dernier exemple ci-dessus. Si vous voulez qu'un argument soit compris par Python comme tant un nombre rel, il faut le lui faire savoir, en fournissant au moins un point dcimal6.

Essayez par exemple :

 
Sélectionnez

>>> 20.0 / 3 			# (comparez le rsultat avec celui obtenu  l'exercice prcdent)
 
>>> 8./5

Si une opration est effectue avec des arguments de types mlangs (entiers et rels), Python convertit automatiquement les oprandes en rels avant d'effectuer l'opration. Essayez :

 
Sélectionnez

>>> 4 * 2.5 / 3.3

6 Dans tous les langages de programmation, les conventions mathmatiques de base sont celles en vigueur dans les pays anglophones : le sparateur dcimal sera donc toujours un point, et non une virgule comme chez nous. Dans le monde de l'informatique, les nombres rels sont souvent dsigns comme des nombres " virgule flottante", ou encore des nombres "de type float".

2.2. Donnes et variables

Nous aurons l'occasion de dtailler plus loin les diffrents types de donnes numriques. Mais avant cela, nous pouvons ds prsent aborder un concept de grande importance :

L'essentiel du travail effectu par un programme d'ordinateur consiste manipuler des donnes. Ces donnes peuvent tre trs diverses (tout ce qui est numrisable, en fait7), mais dans la mmoire de l'ordinateur elles se ramnent toujours en dfinitive une suite finie de nombres binaires.

Pour pouvoir accder aux donnes, le programme d'ordinateur (quel que soit le langage dans lequel il est crit) fait abondamment usage d'un grand nombre de variables de diffrents types.

Une variable apparat dans un langage de programmation sous un nom de variable peu prs quelconque (voir ci-aprs), mais pour l'ordinateur il s'agit d'une rfrence dsignant une adresse mmoire, c'est--dire un emplacement prcis dans la mmoire vive.

A cet emplacement est stock une valeur bien dtermine. C'est la donne proprement dite, qui est donc stocke sous la forme d'une suite de nombres binaires, mais qui n'est pas ncessairement un nombre aux yeux du langage de programmation utilis. Cela peut tre en fait peu prs n'importe quel objet susceptible d'tre plac dans la mmoire d'un ordinateur, par exemple : un nombre entier, un nombre rel, un nombre complexe, un vecteur, une chane de caractres typographiques, un tableau, une fonction, etc.

Pour distinguer les uns des autres ces divers contenus possibles, le langage de programmation fait usage de diffrents types de variables. (le type 'entier', le type 'rel', le type 'chane de caractres', le type 'liste', etc.). Nous allons expliquer tout cela dans les pages suivantes.

7 Que peut-on numriser au juste ? Voil une question trs importante, qu'il vous faudra dbattre dans votre cours d'informatique gnrale.

2.3. Noms de variables et mots rservs

Les noms de variables sont des noms que vous choisissez vous-mme assez librement. Efforcezvous cependant de bien les choisir : de prfrence assez courts, mais aussi explicites que possible, de manire exprimer clairement ce que la variable est cense contenir. Par exemple, des noms de variables tel que altitude, altit ou alt conviennent mieux que x pour exprimer une altitude.


Un bon programmeur doit veiller ce que ses lignes d'instructions soient faciles lire.


Sous Python, les noms de variables doivent en outre obir quelques rgles simples :

  • Un nom de variable est une squence de lettres (a z , A Z) et de chiffres (0 9), qui doit toujours commencer par une lettre.
  • Seules les lettres ordinaires sont autorises. Les lettres accentues, les cdilles, les espaces, les caractres spciaux tels que $, #, @, etc. sont interdits, l'exception du caractre _ (soulign).
  • La casse est significative (les caractres majuscules et minuscules sont distingus).
    Attention : Joseph, joseph, JOSEPH sont donc des variables diffrentes. Soyez attentifs !

Prenez l'habitude d'crire l'essentiel des noms de variables en caractres minuscules (y compris la premire lettre8). Il s'agit d'une simple convention, mais elle est largement respecte. N'utilisez les majuscules qu' l'intrieur mme du nom, pour en augmenter ventuellement la lisibilit, comme dans tableDesMatieres, par exemple.

En plus de ces rgles, il faut encore ajouter que vous ne pouvez pas utiliser comme noms de variables les 29 mots rservs ci-dessous (ils sont utiliss par le langage lui-mme) :

and assert break class continue def
del elif else except exec finally
for from global if import in
is lambda not or pass print
raise return try while yield  

8 Les noms commenant par une majuscule ne sont pas interdits, mais l'usage veut qu'on le rserve plutt aux variables qui dsignent des classes (le concept de classe sera abord plus loin dans ces notes).

2.4. Affectation (ou assignation)

Nous savons dsormais comment choisir judicieusement un nom de variable. Voyons prsent comment nous pouvons en dfinir une et lui affecter une valeur. Les termes affecter une valeur ou assigner une valeur une variable sont quivalents. Ils dsignent l'opration par laquelle on tablit un lien entre le nom de la variable et sa valeur (son contenu).

En Python comme dans de nombreux autres langages, l'opration d'affectation est reprsente par le signe gale9 :

 
Sélectionnez

>>> n = 7			 			# donner  n la valeur 7
>>> msg = "Quoi de neuf ?" 		# affecter la valeur "Quoi de neuf ?"  msg
>>> pi = 3.14159 				# assigner sa valeur  la variable pi

Les exemples ci-dessus illustrent des instructions d'affectation Python tout fait classiques. Aprs qu'on les ait excutes, il existe dans la mmoire de l'ordinateur, des endroits diffrents :

  • trois noms de variables, savoir n, msg et pi
  • trois squences d'octets, o sont encodes le nombre entier 7, la chane de caractres Quoi de neuf ? et le nombre rel 3,14159.

Les trois instructions d'affectation ci-dessus ont eu pour effet chacune de raliser plusieurs oprations dans la mmoire de l'ordinateur :

  • crer et mmoriser un nom de variable ;
  • lui attribuer un type bien dtermin (ce point sera explicit la page suivante) ;
  • crer et mmoriser une valeur particulire ;
  • tablir un lien (par un systme interne de pointeurs) entre le nom de la variable et l'emplacement mmoire de la valeur correspondante.

On peut mieux se reprsenter tout cela par un diagramme d'tat tel que celui-ci :

n msg pi
\x{2193} \x{2193} \x{2193}
7 Quoi de neuf ? 3.14159

Les trois noms de variables sont des rfrences, mmorises dans une zone particulire de la mmoire que l'on appelle espace de noms, alors que les valeurs correspondantes sont situes ailleurs, dans des emplacements parfois fort loigns les uns des autres. Nous aurons l'occasion de prciser ce concept plus loin dans ces pages.

9 Il faut bien comprendre qu'il ne s'agit en aucune faon d'une galit, et que l'on aurait trs bien pu choisir un autre symbolisme, tel que n \x{2190} 7 par exemple, comme on le fait souvent dans certains pseudo-langages servant dcrire des algorithmes, pour bien montrer qu'il s'agit de relier un contenu (la valeur 7) un contenant (la variable n).

2.5. Afficher la valeur d'une variable

A la suite de l'exercice ci-dessus, nous disposons donc des trois variables n, msg et pi.
Pour afficher leur valeur l'cran, il existe deux possibilits. La premire consiste entrer au clavier le nom de la variable, puis <Enter>. Python rpond en affichant la valeur correspondante :

 
Sélectionnez

>>> n
7
>>> msg
"Quoi de neuf ?"
>>> pi
3.14159

Il s'agit cependant l d'une fonctionnalit secondaire de l'interprteur, qui est destine vous faciliter la vie lorsque vous faites de simples exercices la ligne de commande. A l'intrieur d'un programme, vous utiliserez toujours l'instruction print :

 
Sélectionnez

>>> print msg
Quoi de neuf ?

Remarquez la subtile diffrence dans les affichages obtenus avec chacune des deux mthodes. L'instruction print n'affiche strictement que la valeur de la variable, telle qu'elle a t encode, alors que l'autre mthode (celle qui consiste entrer seulement le nom de la variable) affiche aussi des guillemets (afin de vous rappeler le type de la variable : nous y reviendrons).

2.6. Typage des variables

Sous Python, il n'est pas ncessaire d'crire des lignes de programme spcifiques pour dfinir le type des variables avant de pouvoir les utiliser. Il vous suffit en effet d'assigner une valeur un nom de variable pour que celle-ci soit automatiquement cre avec le type qui correspond au mieux la valeur fournie. Dans l'exercice prcdent, par exemple, les variables n, msg et pi ont t cres automatiquement chacune avec un type diffrent ( nombre entier pour n, chane de caractres pour msg, nombre virgule flottante (ou float , en anglais) pour pi).

Ceci constitue une particularit intressante de Python, qui le rattache une famille particulire de langages o l'on trouve aussi par exemple Lisp, Scheme, et quelques autres. On dira ce sujet que le typage des variables sous Python est un typage dynamique, par opposition au typage statique qui est de rgle par exemple en C++ ou en Java. Dans ces langages, il faut toujours - par des instructions distinctes - d'abord dclarer (dfinir) le nom et le type des variables, et ensuite seulement leur assigner un contenu, lequel doit bien entendu tre compatible avec le type dclar.

Le typage statique est prfrable dans le cas des langages compils, parce qu'il permet d'optimiser l'opration de compilation (dont le rsultat est un code binaire fig ).

Le typage dynamique quant lui permet d'crire plus aisment des constructions logiques de niveau lev (mtaprogrammation, rflexivit), en particulier dans le contexte de la programmation oriente objet (polymorphisme). Il facilite galement l'utilisation de structures de donnes trs riches telles que les listes et les dictionnaires.

2.7. Affectations multiples

Sous Python, on peut assigner une valeur plusieurs variables simultanment. Exemple :

 
Sélectionnez

>>> x = y = 7
>>> x
7
>>> y
7

On peut aussi effectuer des affectations parallles l'aide d'un seul oprateur :

 
Sélectionnez

>>> a, b = 4, 8.33
>>> a
4
>>> b
8.33

Dans cet exemple, les variables a et b prennent simultanment les nouvelles valeurs 4 et 8,33.

Attention : les francophones que nous sommes avons pour habitude d'utiliser la virgule comme sparateur dcimal, alors que les langages de programmation utilisent toujours la convention en vigueur dans les pays de langue anglaise, c'est--dire le point dcimal. La virgule, quant elle, est trs gnralement utilise pour sparer diffrents lments (arguments, etc.) comme on le voit dans notre exemple, pour les variables elles-mmes ainsi que pour les valeurs qu'on leur attribue.

(2) Exercices

2.1. Dcrivez le plus clairement et le plus compltement possible ce qui se passe chacune des trois lignes de l'exemple ci-dessous :

 
Sélectionnez

>>> largeur = 20
>>> hauteur = 5 * 9.3
>>> largeur * hauteur
930	

2.2. Assignez les valeurs respectives 3, 5, 7 trois variables a, b, c.
Effectuez l'opration a - b/c . Le rsultat est-il mathmatiquement correct ?
Si ce n'est pas le cas, comment devez-vous procder pour qu'il le soit ?

2.8. Oprateurs et expressions

On manipule les valeurs et les variables qui les rfrencent, en les combinant avec des oprateurs pour former des expressions. Exemple :

 
Sélectionnez

a, b = 7.3, 12
y = 3*a + b/5

Dans cet exemple, nous commenons par affecter aux variables a et b les valeurs 7,3 et 12. Comme dj expliqu prcdemment, Python assigne automatiquement le type rel la variable a, et le type entier la variable b.

La seconde ligne de l'exemple consiste affecter une nouvelle variable y le rsultat d'une expression qui combine les oprateurs * , + et / avec les oprandes a, b, 3 et 5. Les oprateurs sont les symboles spciaux utiliss pour reprsenter des oprations mathmatiques simples, telles l'addition ou la multiplication. Les oprandes sont les valeurs combines l'aide des oprateurs.

Python value chaque expression qu'on lui soumet, aussi complique soit-elle, et le rsultat de cette valuation est toujours lui-mme une valeur. A cette valeur, il attribue automatiquement un type, lequel dpend de ce qu'il y a dans l'expression. Dans l'exemple ci-dessus, y sera du type rel, parce que l'expression value pour dterminer sa valeur contient elle-mme au moins un rel.

Les oprateurs Python ne sont pas seulement les quatre oprateurs mathmatiques de base. Il faut leur ajouter l'oprateur ** pour l'exponentiation, ainsi qu'un certain nombre d'oprateurs logiques, des oprateurs agissant sur les chanes de caractres, des oprateurs effectuant des tests d'identit ou d'appartenance, etc. Nous reparlerons de tout cela plus loin.

Signalons au passage la disponibilit de l'oprateur modulo, reprsent par le symbole %.
Cet oprateur fournit le reste de la division entire d'un nombre par un autre. Essayez par exemple :

 
Sélectionnez

>>> 10 % 3 				## (et prenez note de ce qui se passe !)
>>> 10 % 5

Cet oprateur vous sera trs utile plus loin, notamment pour tester si un nombre a est divisible par un nombre b. Il suffira en effet de vrifier que a % b donne un rsultat gal zro.

Exercice :

2.3. Testez les lignes d'instructions suivantes. Dcrivez dans votre cahier ce qui se passe :

 
Sélectionnez

>>> r , pi = 12, 3.14159
>>> s = pi * r**2
>>> print s
>>> print type(r), type(pi), type(s)
>>>

Quelle est, votre avis, l'utilit de la fonction type() ?
(Note : les fonctions seront dcrites en dtail, plus loin dans ce cours).

2.9. Priorit des oprations

Lorsqu'il y a plus d'un oprateur dans une expression, l'ordre dans lequel les oprations doivent tre effectues dpend de rgles de priorit. Sous Python, les rgles de priorit sont les mmes que celles qui vous ont t enseignes au cours de mathmatique. Vous pouvez les mmoriser aisment l'aide d'un truc mnmotechnique, l'acronyme PEMDAS :

  • P pour parenthses. Ce sont elles qui ont la plus haute priorit. Elles vous permettent donc de forcer l'valuation d'une expression dans l'ordre que vous voulez.
    Ainsi 2*(3-1) = 4 , et (1+1)**(5-2) = 8.
  • E pour exposants. Les exposants sont valus ensuite, avant les autres oprations.
    Ainsi 2**1+1 = 3 (et non 4), et 3*1**10 = 3 (et non 59049 !).
  • M et D pour multiplication et division, qui ont la mme priorit. Elles sont values avant l'addition A et la soustraction S, lesquelles sont donc effectues en dernier lieu.
    Ainsi 2*3-1 = 5 (plutt que 4), et 2/3-1 = -1 (Rappelez-vous que par dfaut Python effectue une division entire).
  • Si deux oprateurs ont la mme priorit, l'valuation est effectue de gauche droite.
    Ainsi dans l'expression 59*100/60, la multiplication est effectue en premier, et la machine doit donc ensuite effectuer 5900/60, ce qui donne 98. Si la division tait effectue en premier, le rsultat serait 59 (rappelez-vous ici encore qu'il s'agit d'une division entire).

2.10. Composition

Jusqu'ici nous avons examin les diffrents lments d'un langage de programmation, savoir : les variables, les expressions et les instructions, mais sans traiter de la manire dont nous pouvons les combiner les unes avec les autres.

Or l'une des grandes forces d'un langage de programmation de haut niveau est qu'il permet de construire des instructions complexes par assemblage de fragments divers. Ainsi par exemple, si vous savez comment additionner deux nombres et comment afficher une valeur, vous pouvez combiner ces deux instructions en une seule :

 
Sélectionnez

>>> print 17 + 3
>>> 20

Cela n'a l'air de rien, mais cette fonctionnalit qui parat si vidente va vous permettre de programmer des algorithmes complexes de faon claire et concise. Exemple :

 
Sélectionnez

>>> h, m, s = 15, 27, 34
>>> print "nombre de secondes coules depuis minuit = ", h*3600 + m*60 + s

Attention cependant : il y a une limite ce que vous pouvez combiner ainsi :

Ce que vous placez la gauche du signe gale dans une expression doit toujours tre une variable, et non une expression. Cela provient du fait que le signe gale n'a pas ici la mme signification qu'en mathmatique : comme nous l'avons dj signal, il s'agit d'un symbole d'affectation (nous plaons un certain contenu dans une variable) et non un symbole d'galit. Le symbole d'galit (dans un test conditionnel, par exemple) sera voqu un peu plus loin.

Ainsi par exemple, l'instruction m + 1 = b est tout fait illgale.

Par contre, crire a = a + 1 est inacceptable en mathmatique, alors que cette forme d'criture est trs frquente en programmation. L'instruction a = a + 1 signifie en l'occurrence augmenter la valeur de la variable a d'une unit (ou encore : incrmenter a ).

Nous aurons l'occasion de revenir bientt sur ce sujet. Mais auparavant, il nous faut encore aborder un autre concept de grande importance.


prcdentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Licence Creative Commons
Le contenu de cet article est rédigé par Gérard Swinnen et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.