Dans la leçon précédente, nous avons vu comment utiliser l'interpréteur Python pour faire quelques calculs mathématiques simples. Dans cette leçon, nous verrons comment l'interpréteur traite certains mots-clés Python que nous avons vus dans le monde de Reeborg.
Commençons avec quelque chose de simple : entrez l'expression 3*(2+2) à l'invite de l'interpréteur et pressez "Entrée". Le résultat devrait ressembler à ce qui suit :
>>> 3*(2+2)
12
>>>
Maintenant, entrez seulement une partie de la même expression comme ceci : 3*(, et appuyez sur "Entrée". Le résultat devrait ressembler à ce qui suit :
>>> 3*(
... |
La ligne verticale "|" représente un curseur clignotant. Il y a deux choses importantes à noter :
Continuons en entrant le reste de l'expression sur la ligne suivante et en pressant la touche "Entrée". Voici le résultat sur mon ordinateur :
>>> 3*(
... 2+2)
12
>>>
Python a conclu que nous avons entré l'expression complète et il l'a calculée en conséquence, en nous donnant le résultat correct (12) et en nous disant qu'il était prêt pour une entrée de plus en ajoutant l'invite habituelle juste après.
Maintenant, essayez d'entrer 3* suivis par la touche "Entrée". Voici le résultat que j'obtiens :
>>> 3*
File "<input>", line 1
3*
^
SyntaxError: invalid syntax
>>>
La différence ici est que nous n'avons donné aucune indication à Python que nous avions l'intention d'ajouter plus de texte. Dans le premier cas, nous avions une parenthèse gauche ouvrante "(" sans la parenthèse droite fermante correspondante ")". Python en a conclu qu nous avions l'intention d'ajouter plus de texte, dont au moins la ")"... et il nous a donné l'occasion de le faire. Dans le deuxième cas, Python a juste supposé que nous n'avions rien de plus à ajouter, a essayé de comprendre ce que nous avons écrit, 3*, et nous a informé qu'il ne le pouvait pas.
Maintenant, essayez de reproduire l'exemple ci-dessous :
>>> 3*(
... 2+2
...
...
... )
12
>>>
Tant que Python "pense" que nous n'avons pas fini, il refusera de
calculer l'expression et continuera de nous proposer l'invite modifiée.
Nous pouvons continuer avec un autre exemple "idiot" :
>>> 3*(
... 2+2
... )+(
... 1+1
... )
14
>>>
qui nous est, admettons le, plus difficile à lire et comprendre que d'avoir simplement :
>>> 3*(2 + 2) + (1 + 1)
14
>>>
Maintenant, n'hésitez pas à essayer quelques autres exemples vous-même avant de lire la suite.
Nous somme maintenant prêts à réviser quelques mots-clés (et concepts) de Python que nous avons vu dans le monde de Reeborg. Le premier mot-clé est def. Définissons une fonction plutôt idiote qui imprime le nombre 2. Essayez de reproduire le résultat montré ci-dessous :
>>> def print2():
... print 2
...
>>> print2()
2
>>> print2()
2
>>>
Maintenant vous devez l'essayer vous même avant de lire la suite.
Notez combien il nous a été utile que Python indente déjà le code dans notre fonction ? Notez aussi comment il a interprété une ligne vide comme une indication que nous avions terminé de définir notre fonction. Avez-vous aussi remarqué comment il reconnaît que "print2", sans espaces entre "print" et "2" est différent de "print 2"?
Maintenant, essayez ce qui suit :
>>> def print_plusieurs():
... print 3
... print 2
... print 1
... print 0
...
>>> print_plusieurs()
3
2
1
0
>>>
Tant que nous continuons à ajouter des lignes non vides à l'intérieur du corps de la fonction, Python nous demande d'en ajouter plus. Dès que nous ajoutons une ligne vide, Python suppose que nous avons fini. Donc, les lignes vides peuvent être interprétées comme ayant un sens par l'interpréteur Python ; ce n'était pas le cas dans le monde de Reeborg. Ce ne sera pas le cas non plus dans les programmes écrits en dehors de l'interpréteur Python (dans ces deux cas, les lignes vides sont ignorées). Notez que le comportement de l'interpréteur Python avec les lignes vides (dans une définition de fonction) est différent de ce que nous avions vu plus tôt quand nous ouvrions une parenthèse sans la fermer ; dans ce cas, Python "savait" que nous avions quelque chose à ajouter, et il ignorait les lignes vides.
Ce que nous venons de voir sur les lignes vides vous a embrouillé ?... Ne désespérez pas, vous vous y habituerez rapidement ! Je continuerai seulement en utilisant d'autres mots-clés Python que nous avons déjà vu, en commençant par if.
>>> if 5 > 4:
... print 5 > 4
...
True
>>>
Comme 5 est plus grand que 4, Python exécute l'instruction qui est dans le bloc if et qui lui demande d'afficher le résultat de "5 > 4", qui est True (Vrai). Ce n'est probablement pas ce que nous voulions en général. Essayez ce qui suit à la place :
>>> if 5 > 4:
... print "5 > 4"
...
5 > 4
>>>
Entourer du texte avec des guillemets le transforme en ce qui s'appelle une chaîne de caractères (en anglais string), qui est ce que Python appelle du texte ordinaire (regular text) et qu'il n'essaie pas de calculer. Nous pouvons aussi écrire :
>>> if 5 > 4:
... print '5 est plus grand que 4'
...
5 est plus grand que 4
Ici, nous avons utilisé des mots au lieu d'un symbole mathématique et, ce qui est plus important, des apostrophes (') au lieu de guillemets (")pour entourer le texte ; Python nous donne le choix d'utiliser l'un ou l'autre comme il nous plaît. Cela nous permet d'inclure des apostrophes ou des guillemets dans le texte que nous voulons faire afficher :
>>> print "C'est facile."
It's easy.
>>> print 'Il a dit : "Cela est facile".'
Il a dit : "Cela est facile".
Si nous voulons inclure à la fois des apostrophes et des guillemets dans une même chaîne de caractères, nous devons utiliser une barre oblique inversée (\) en tant que caractère d'échappement avant le caractère (apostrophe ou guillemet) qui est de même type que celui qui délimite la chaîne :
>>> print 'Elle a dit : "C\'est facile".'
Elle a dit : "C'est facile".
Revenons à if et ajoutons un else également.
>>> if 5 > 4:
... print "5 est plus grand que 4"
... else:
... print "4 est plus grand que 5"
...
5 est plus grand que 4
Si vous regardez l'affichage ci-dessus, il ne devrait rien y avoir de surprenant. Cependant, vous devriez absolument essayer de le reproduire vous-même : vous aurez besoin d'utiliser la touche retour-arrière pour aligner le mot-clé else avec le if.
Assurez-vous de bien l'essayer avant de continuer.
Nous pouvons mettre le fragment de code précédent dans une fonction utile :
>>> def plus_grand():
... if 5 > 4:
... print "5 est plus grand que 4"
... else:
... print "4 est plus grand que 5"
...
>>> # maintenant utilisons la !
>>> plus_grand()
5 est plus grand que 4
Vous devez essayer de reproduire le résultat ci-dessus vous-même (et apprendre à faire une bonne indentation) avant de continuer.
Maintenant, ne serait-ce pas bien si nous pouvions utiliser plus_grand() pour comparer n'importe quelle paire de nombres automatiquement ? Pour cela, nous devons apprendre ce que sont les variables.