Pensez en Python

Comment maîtriser la science de l'informatique


précédentsommairesuivant

2. Variables, expressions et instructions

Une des fonctionnalités les plus puissantes d'un langage de programmation est la possibilité de manipuler des variables. Une variable est un nom qui fait référence à une valeur.

2-1. Instructions d'affectation

Une instruction d'affectation crée une nouvelle variable et lui donne une valeur :

 
Sélectionnez
>>> message = 'Et maintenant, quelque chose de complètement différent'
>>> n = 17
>>> pi = 3.141592653589793

Cet exemple effectue trois affectations. La première attribue une chaîne à une nouvelle variable nommée message ; la seconde donne la valeur 17 au nombre entier n ; la troisième affecte la valeur (approximative) de π à pi.

Une façon courante de représenter les variables sur le papier est d'écrire le nom avec une flèche pointant à sa valeur. Ce genre de représentation est appelé un diagramme d'état, car il montre l'état dans lequel se trouve chacune des variables (considérez-le comme l'état d'esprit de la variable). La figure 2.1 montre le résultat de l'exemple précédent.

Image non disponible
Figure 2.1 : Diagramme d'état.

2-2. Noms de variables

Les programmeurs choisissent généralement des noms significatifs pour leurs variables, qui expliquent à quoi sert la variable.

Les noms de variables peuvent être aussi longs que vous le souhaitez. Ils peuvent contenir des lettres et des chiffres, mais ils ne peuvent pas commencer par un chiffre. L'utilisation des lettres majuscules est autorisée, mais il est habituel d'utiliser seulement des minuscules pour les noms de variables.

Le caractère de soulignement, _, peut apparaître dans un nom. Il est souvent utilisé dans les noms avec plusieurs mots, comme votre_nom ou vitesse_de_l_hirondelle.

Si vous donnez à une variable un nom invalide, vous obtenez une erreur de syntaxe :

 
Sélectionnez
>>> 76trombones = 'grande parade'
SyntaxError: invalid syntax
>>> plus@ = 1000000
SyntaxError: invalid syntax
>>> class = 'Théorie avancée de la fermentation alcoolique'
SyntaxError: invalid syntax

Le nom de variable 76trombones n'est pas valide parce qu'il commence par un nombre. plus@ n'est pas valide parce qu'il contient un caractère non autorisé, @. Mais quel est le problème avec class ?

Il se trouve que class est l'un des mots-clés ou mots réservés de Python. L'interpréteur utilise des mots-clés pour reconnaître la structure du programme, et ils ne peuvent pas être utilisés comme noms de variables.

Python 3 a les mots-clés suivants :

False

class

finally

is

return

None

continue

for

lambda

try

True

def

from

nonlocal

while

and

del

global

not

with

as

elif

if

or

yield

assert

else

import

pass

 

break

except

in

raise

 

Vous n'avez pas besoin de mémoriser cette liste. Dans la plupart des environnements de développement, les mots-clés sont affichés dans une couleur différente ; si vous essayez d'en utiliser un comme nom de variable, vous le saurez.

2-3. Expressions et instructions

Une expression est une combinaison de valeurs, variables et opérateurs. Une valeur, rien que par elle-même, est considérée comme une expression, et il en va de même avec une variable, si bien que les expressions suivantes sont toutes valides :

 
Sélectionnez
>>> 42
42
>>> n
17
>>> n + 25
42

Lorsque vous tapez une expression, l'interpréteur l'évalue, ce qui signifie qu'il trouve la valeur de l'expression. Dans cet exemple, n a la valeur 17 et n + 25 a la valeur 42.

Une instruction est une unité de code qui a un effet, comme la création d'une variable ou l'affichage d'une valeur.

 
Sélectionnez
>>> n = 17
>>> print(n)

La première ligne est une instruction d'affectation qui donne une valeur à n. La deuxième ligne est une instruction print qui affiche la valeur de n.

Lorsque vous tapez une instruction, l'interpréteur l'exécute, ce qui signifie qu'il fait tout ce que dit l'instruction. En général, les instructions n'ont pas de valeurs.

2-4. Mode de script

Jusqu'ici, nous avons exécuté Python en mode interactif, ce qui signifie que vous interagissez directement avec l'interpréteur. Le mode interactif est une bonne façon de commencer, mais si vous travaillez avec plus de quelques lignes de code, cela devient peu commode.

L'autre voie est d'enregistrer le code dans un fichier appelé un script, puis de lancer l'interpréteur en mode de script pour exécuter le script. Par convention, les scripts Python ont des noms qui se terminent par .py.

Si vous savez comment créer et exécuter un script sur votre ordinateur, vous êtes prêt à continuer. Sinon, je recommande d'utiliser à nouveau PythonAnywhere. J'ai posté des instructions pour l'exécution en mode de script à http://tinyurl.com/thinkpython2e.

Comme Python fournit les deux modes, vous pouvez tester des morceaux de code en mode interactif avant de les mettre dans un script. Mais il y a des différences entre le mode interactif et le mode de script qui peuvent être source de confusion.

Par exemple, si vous utilisez Python comme une calculatrice, vous pouvez taper :

 
Sélectionnez
>>> miles = 26.2
>>> miles * 1.61
42.182

La première ligne assigne une valeur à miles, mais elle n'a aucun effet visible. La deuxième ligne est une expression, alors l'interpréteur l'évalue et affiche le résultat. Il se trouve que le marathon est d'environ 42 km.

Mais si vous tapez le même code dans un script et l'exécutez, vous n'obtenez aucune sortie. En mode de script, une expression en elle-même n'a aucun effet visible. Python évalue effectivement l'expression, mais il ne montre pas sa valeur, sauf si vous lui dites :

 
Sélectionnez
miles = 26.2
print(miles * 1.61)

Ce comportement peut être déroutant au début.

Un script contient généralement une séquence d'instructions. S'il y a plus d'une instruction, les résultats apparaissent au fur et à mesure que les instructions sont exécutées.

Par exemple, le script

 
Sélectionnez
print(1)
x = 2
print(x)

affiche la sortie

 
Sélectionnez
1
2

L'instruction d'affectation ne produit aucune sortie.

Pour vérifier votre compréhension, tapez les instructions suivantes dans l'interpréteur Python et regardez ce qu'elles font :

 
Sélectionnez
5
x = 5
x + 1

Maintenant, mettez les mêmes déclarations dans un script et exécutez-le. Quel est le résultat ? Modifiez le script en transformant chaque expression dans une instruction d'impression et puis exécutez-le à nouveau.

2-5. Ordre des opérations

Lorsqu'une expression contient plus d'un opérateur, l'ordre d'évaluation dépend de l'ordre des opérations. Pour les opérateurs mathématiques, Python suit la convention mathématique. L'acronyme PEMDAS est un moyen utile de mémoriser les règles de priorité (ou de précédence) :

  • les Parenthèses ont la plus haute priorité et peuvent être utilisées pour forcer l'évaluation d'une expression dans l'ordre que vous voulez. Puisque les expressions entre parenthèses sont évaluées en premier, 2 * (3 - 1) vaut 4, et (1 + 1) ** (5 - 2) vaut 8. Vous pouvez également utiliser des parenthèses pour rendre une expression plus facile à lire, comme dans (minute * 100) / 60, même si cela ne change pas le résultat ;
  • l'Exponentiation a la prochaine priorité la plus élevée, donc 1 + 2 ** 3 vaut 9, pas 27, et 2 * 3 ** 2 est égal à 18, et pas à 36 ;
  • la Multiplication et la Division ont une priorité plus élevée que l'Addition et la Soustraction. Donc 2 * 3 - 1 vaut 5, pas 4, et 6 + 4/2 vaut 8, pas 5 ;
  • les opérateurs ayant la même priorité sont évalués de gauche à droite (sauf l'exponentiation). Ainsi, dans l'expression degres / 2 * pi, la division a lieu en premier et le résultat est multiplié par pi. Pour diviser par 2 π, vous pouvez utiliser des parenthèses ou écrire degres / 2 / pi.

Je ne fais pas trop d'efforts pour me rappeler la priorité des opérateurs. Si j'ai un doute en regardant l'expression, j'utilise des parenthèses pour obtenir l'ordre souhaité.

2-6. Opérations sur des chaînes

Généralement, vous ne pouvez pas effectuer des opérations arithmétiques sur les chaînes de caractères, même si elles ressemblent à des nombres. Par exemple, les instructions suivantes sont invalides :

'2'-'1' 'truc'/'facile' 'premier'*'un essai'

Mais il y a deux exceptions, les opérateurs + et *.

L'opérateur + effectue la concaténation des chaînes, c'est-à-dire l'assemblage des chaînes bout à bout. Par exemple :

 
Sélectionnez
>>> premier = 'plate'
>>> second = 'forme'
>>> premier + second
plateforme

L'opérateur * fonctionne aussi sur les chaînes ; il effectue une répétition. Par exemple, "Spam" * 3 a pour résultat 'SpamSpamSpam'. Si l'une des valeurs est une chaîne, l'autre doit être un entier.

Cette utilisation de + et * a du sens par analogie avec l'addition et la multiplication. Tout comme 4 * 3 est équivalent à 4 + 4 + 4, nous nous attendons à ce que 'Spam' * 3 soit équivalent à 'Spam' + 'Spam' + 'Spam', et c'est bien le cas. D'un autre côté, la concaténation et la répétition des chaînes diffèrent significativement de l'addition et la multiplication des nombres entiers. Pouvez-vous penser à une propriété de l'addition que la concaténation de chaînes n'a pas ?

2-7. Commentaires

Lorsque les programmes deviennent de plus en plus volumineux et compliqués, ils sont plus difficiles à lire. Les langages formels sont denses, et il est souvent difficile de regarder un bout de code et de comprendre ce qu'il fait, ou pourquoi.

Pour cette raison, c'est une bonne idée d'ajouter à vos programmes des notes expliquant en langage naturel ce que le programme est en train de faire. Ces notes sont appelées commentaires, et commencent par le symbole # :

 
Sélectionnez
# calculer le pourcentage d'une heure écoulé
pourcentage = (minute * 100) / 60

Dans ce cas, le commentaire apparaît lui seul sur une ligne. Vous pouvez aussi mettre des commentaires à la fin d'une ligne :

 
Sélectionnez
pourcentage = (minute * 100) / 60     # pourcentage d'une heure

Tout, depuis le # jusqu'à la fin de la ligne est ignoré, cela n'a aucun effet sur l'exécution du programme.

Les commentaires sont les plus utiles quand ils documentent des caractéristiques non évidentes du code. Il est raisonnable de supposer que le lecteur comprendra ce que fait le code ; il est plus utile d'expliquer pourquoi.

Ce commentaire est redondant avec le code et donc inutile :

 
Sélectionnez
v = 5     # assigner la valeur 5 à v

Le commentaire suivant contient des informations utiles qui ne sont pas dans le code :

 
Sélectionnez
v = 5     # vitesse en mètres/seconde.

Le choix des bons noms de variables peut réduire le besoin de commentaires, mais des noms longs peuvent rendre les expressions complexes difficiles à lire, il y a donc un compromis à trouver.

2-8. Débogage

Trois types d'erreurs peuvent se produire dans un programme : des erreurs de syntaxe, des erreurs d'exécution et les erreurs sémantiques. Il est utile de distinguer ces types d'erreurs afin de les retrouver plus rapidement.

  • Erreur de syntaxe : la notion de « syntaxe » désigne la structure d'un programme et les règles relatives à cette structure. Par exemple, les parenthèses doivent être en paires, donc (1 + 2) est valide, mais 8) est une erreur de syntaxe.
    S'il y a une erreur de syntaxe quelque part dans votre programme, Python affiche un message d'erreur et s'arrête, et vous ne serez pas en mesure d'exécuter le programme. Pendant les premières semaines de votre carrière en programmation, vous pourriez passer beaucoup de temps à traquer les erreurs de syntaxe. Lorsque vous aurez acquis de l'expérience, vous ferez moins d'erreurs et les trouverez plus rapidement.
  • Erreur d'exécution : le deuxième type d'erreurs est l'erreur d'exécution, appelé ainsi parce que l'erreur n'apparaît qu'après le lancement du programme. Ces erreurs sont également appelées exceptions, car elles indiquent généralement que quelque chose d'exceptionnel (et mauvais) est arrivé.
    Les erreurs d'exécution étant rares dans les programmes simples que vous verrez dans les premiers chapitres, il pourrait se passer un certain temps avant que vous n'en rencontriez une.
  • Erreur sémantique : le troisième type d'erreurs est « sémantique », ce qui signifie lié au sens. S'il y a une erreur sémantique dans votre programme, il sera exécuté sans générer des messages d'erreur, mais il ne fera pas ce qu'il faut. Il va faire autre chose. Plus précisément, il va faire ce que vous lui avez dit de faire, mais pas ce que vous vouliez qu'il fasse.
    Identifier les erreurs sémantiques peut être délicat, car cela vous oblige à remonter en arrière en regardant la sortie du programme et en essayant de comprendre ce qu'il fait.

2-9. Glossaire

  • variable : un nom qui fait référence à une valeur.
  • affectation : une instruction qui attribue une valeur à une variable.
  • diagramme d'état : une représentation graphique d'un ensemble de variables et des valeurs auxquelles il se réfère.
  • mot-clé : un mot réservé qui est utilisé pour analyser un programme ; vous ne pouvez pas utiliser des mots-clés comme if, def, et while comme noms de variables.
  • opérande : l'une des valeurs sur lesquelles agit un opérateur.
  • expression : une combinaison de variables, d'opérateurs et de valeurs, qui représente un résultat unique.
  • évaluer : simplifier une expression en effectuant des opérations, dans le but de donner une valeur unique.
  • instruction : une partie de code qui représente une commande ou une action. Jusqu'à présent, les instructions que nous avons vues sont les affectations et l'instruction d'impression.
  • exécuter : exécuter une instruction et faire ce qu'elle demande.
  • mode interactif : une façon d'utiliser l'interpréteur Python en tapant le code à l'invite de commande.
  • mode de script : une façon d'utiliser l'interpréteur Python pour lire le code d'un script stocké dans un fichier et l'exécuter.
  • script : un programme stocké dans un fichier.
  • ordre des opérations : les règles de priorité (ou de précédence) régissant l'ordre dans lequel sont évaluées les expressions impliquant de multiples opérateurs et opérandes.
  • concaténer : joindre deux opérandes bout à bout.
  • commentaire : informations contenues dans un programme qui sont destinées aux autres programmeurs (ou toute personne lisant le code source) et n'ont aucun effet sur l'exécution du programme.
  • erreur de syntaxe : une erreur dans un programme qui rend celui-ci impossible à analyser (et donc impossible à interpréter).
  • exception : une erreur qui est détectée lorsque le programme est en cours d'exécution.
  • sémantique : la signification d'un programme.
  • erreur sémantique : une erreur dans un programme qui lui fait faire autre chose que ce que le programmeur veut.

2-10. Exercices

Exercice 1

Je répète mon conseil du chapitre précédent : chaque fois que vous apprenez une nouvelle fonctionnalité, vous devriez l'essayer en mode interactif et faire des erreurs, afin de voir ce qui va mal.

  • Nous avons vu que n = 42 est autorisé. Qu'en est-il de 42 = n  ?
  • Et dans ce cas : x = y = 1  ?
  • Dans certains langages, chaque instruction se termine par un point-virgule, ; . Que se passe-t-il si vous mettez un point-virgule à la fin d'une instruction en Python ?
  • Que se passe-t-il si vous mettez un point à la fin d'une instruction ?
  • Dans la notation mathématique, vous pouvez multiplier x et y comme ceci : xy . Que se passe-t-il si vous essayez cela en Python ?

Exercice 2

Exercez-vous en utilisant l'interpréteur Python comme calculatrice :

  1. Le volume d'une sphère de rayon r est 4/3 π r3. Quel est le volume d'une sphère de rayon 5 ?
  2. Supposons que le prix d'un livre est de 24,95 €, mais les librairies obtiennent un rabais de 40 %. Les frais d'expédition s'élèvent à 3 € pour le premier exemplaire et à 75 centimes pour chaque exemplaire supplémentaire. Quel est le coût total de gros pour 60 copies ?
  3. Si je pars de chez moi à 6 h 52 et que je cours 1,5 kilomètre à un rythme facile de 5 minutes et 10 secondes par km, puis 5 km au tempo plus soutenu de 4 minutes et 20 secondes par kilomètre et encore 1,5 km au rythme facile du début, à quelle heure serai-je de retour à la maison pour le petit déjeuner ?

précédentsommairesuivant

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 Allen B. Downey et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2016 Developpez.com.