Pensez en Python

Comment maîtriser la science de l'informatique


précédentsommairesuivant

1. Le chemin du programme

Le but de ce livre est de vous apprendre à penser comme un informaticien. Cette façon de penser combine certaines des meilleures caractéristiques des mathématiques, de l'art de l'ingénieur et des sciences. Comme les mathématiciens, les informaticiens utilisent des langages formels pour désigner des idées (spécifiquement, des calculs). Comme les ingénieurs, ils conçoivent des choses, en assemblant des composants en systèmes et en évaluant des compromis entre les différentes solutions. Comme les scientifiques, ils observent le comportement des systèmes complexes, formulent des hypothèses et testent des prévisions.

La compétence la plus importante pour un informaticien est la capacité de résoudre des problèmes. La résolution de problèmes signifie la capacité de formuler des problèmes, de penser de manière créative aux solutions, et d'exprimer une solution claire et précise. Il se trouve que le processus d'apprentissage de la programmation est une excellente occasion de pratiquer les compétences de résolution de problèmes. Voilà pourquoi ce chapitre est appelé « Le chemin du programme ».

À un certain niveau, vous allez apprendre à programmer, une compétence utile en elle-même. Sur un autre plan, vous pourrez utiliser la programmation comme un moyen pour une fin. Au fur et à mesure que nous nous avançons, cette fin deviendra plus claire.

1-1. Qu'est-ce qu'un programme ?

Un programme est une séquence d'instructions qui spécifie comment effectuer un calcul. Le calcul pourrait être quelque chose de mathématique, comme résoudre un système d'équations ou trouver les racines d'un polynôme, mais il peut aussi être un calcul symbolique tel que la recherche et remplacement de texte dans un document ou quelque chose de graphique, comme le traitement d'une image ou la lecture d'une vidéo.

Les détails diffèrent d'un langage à un autre, mais quelques instructions de base apparaissent dans à peu près tous les langages :

  • entrée : obtenir des données à partir du clavier, d'un fichier, du réseau ou un autre dispositif ;
  • sortie : afficher des données à l'écran, les enregistrer dans un fichier, les envoyer sur le réseau, etc. ;
  • maths : effectuer des opérations mathématiques de base, comme l'addition et la multiplication ;
  • exécution conditionnelle : vérifier certaines conditions et exécuter le code approprié ;
  • répétition : effectuer une action à plusieurs reprises, le plus souvent avec une certaine variation.

Croyez-le ou non, c'est à peu près tout ce qu'il y a à faire. Chaque programme que vous avez déjà utilisé, quelle que soit sa complexité, est constitué d'instructions qui ressemblent à peu près à celles-ci. Alors, vous pouvez penser à la programmation comme au processus de division d'une grande tâche complexe en sous-tâches de plus en plus petites, jusqu'à ce que les sous-tâches soient assez simples pour être effectuées en utilisant l'une de ces instructions de base.

1-2. Exécuter Python

L'un des défis de débuter avec Python est que vous pourriez avoir à installer Python et des logiciels connexes sur votre ordinateur. Si vous connaissez bien votre système d'exploitation, et surtout si vous êtes à l'aise avec l'interface de ligne de commande, vous n'aurez aucune difficulté à installer Python. Mais pour les débutants, il peut être douloureux à apprendre en même temps l'administration système et la programmation.

Pour éviter ce problème, je vous recommande de commencer par exécuter du code Python dans un navigateur. Plus tard, lorsque vous serez à l'aise avec Python, je vous suggérerai de l'installer sur votre ordinateur.

Il y a un certain nombre de pages web que vous pouvez utiliser pour exécuter du Python. Si vous en avez déjà une favorite, utilisez-la. Sinon, je recommande PythonAnywhere. Je fournis des instructions détaillées pour commencer à l'adresse http://tinyurl.com/thinkpython2e.

Il existe deux versions de Python, appelées Python 2 et Python 3. Elles sont très semblables, de sorte que si vous apprenez l'une, il est facile de passer à l'autre. En tant que débutant, vous ne rencontrerez que peu de différences. Ce livre est écrit pour Python 3, mais j'y ai inclus quelques notes sur Python 2.

L'interpréteur Python est un programme qui lit et exécute du code Python. Selon votre environnement, vous pourriez lancer l'interpréteur en cliquant sur une icône, ou en tapant python sur une ligne de commande. Quand il démarre, vous devriez voir s'afficher quelque chose de ce genre :

 
Sélectionnez
Python 3.4.0 (default, Jun 19 2015, 14:20:21)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Les trois premières lignes contiennent des informations sur l'interpréteur et le système d'exploitation sur lequel il tourne, si bien que les informations affichées en sortie peuvent être différentes dans votre cas. Mais vous devez vérifier que le numéro de version, qui est 3.4.0 dans cet exemple, commence par 3, ce qui indique que vous utilisez Python 3. S'il commence par 2, vous utilisez (vous l'aurez deviné) Python 2.

La dernière ligne est une invite qui indique que l'interpréteur est prêt pour la saisie de votre code. Si vous tapez une ligne de code et appuyez sur la touche Entrée, l'interpréteur affiche le résultat :

 
Sélectionnez
>>> 1 + 1
2

Maintenant, vous êtes prêt à commencer. À partir de maintenant, je suppose que vous savez comment démarrer l'interpréteur Python et exécuter du code.

1-3. Le premier programme

Traditionnellement, le premier programme que vous écrivez dans un nouveau langage est appelé « Hello, World! », parce que tout ce qu'il fait est d'afficher les mots « Hello, World! ». En Python, il ressemble à ceci :

Python 3
Sélectionnez
>>> print('Hello, World!')

Ceci est un exemple d'une instruction d'impression, même si elle n'imprime rien sur du papier. Elle affiche un résultat sur l'écran. Dans ce cas, le résultat est

Hello, World!

Les guillemets dans le programme marquent le début et la fin du texte à afficher ; ils ne figurent pas dans le résultat.

Les parenthèses indiquent que l'impression est une fonction. Nous étudierons les fonctions dans le chapitre 3Fonctions.

En Python 2, l'instruction print est légèrement différente ; ce n'est pas une fonction, et elle n'utilise donc pas de parenthèses.

Python 2
Sélectionnez
>>> print 'Hello, World!'

Bientôt, vous comprendrez mieux cette différence, mais c'est suffisant pour commencer.

1-4. Opérateurs arithmétiques

Après « Hello, World! », l'étape suivante est l'arithmétique. Python fournit des opérateurs, qui sont des symboles spéciaux qui représentent des calculs comme l'addition et la multiplication.

Les opérateurs +, - et * effectuent l'addition, la soustraction et la multiplication, comme dans les exemples suivants :

 
Sélectionnez
>>> 40 + 2
42
>>> 43 - 1
42
>>> 6 * 7
42

L'opérateur / effectue la division :

 
Sélectionnez
>>> 84 / 2
42.0

Vous pourriez vous demander pourquoi le résultat est 42.0 au lieu de 42. Je vais vous l'expliquer dans la section suivante.

Enfin, l'opérateur ** effectue l'exponentiation, c'est-à-dire qu'il élève un nombre à une puissance :

 
Sélectionnez
>>> 6**2 + 6
42

Dans d'autres langages, c'est l'opérateur ^ qui est utilisé pour l'exponentiation, mais, en Python, ce dernier est un opérateur de bits appelé XOR (ou exclusif). Si vous n'êtes pas habitué aux opérateurs de bits, le résultat vous surprendra :

 
Sélectionnez
>>> 6 ^ 2
4

Je ne vais pas traiter les opérateurs de bits dans ce livre, mais vous pouvez lire à leur sujet sur http://wiki.python.org/moin/BitwiseOperators.

1-5. Valeurs et types

Une valeur est l'une des choses fondamentales avec lesquelles fonctionne un programme, comme une lettre ou un chiffre. Certaines des valeurs que nous avons vues jusqu'à présent sont 2, 42.0, et 'Hello, World!'.

Ces valeurs appartiennent à différents types : 2 est un entier, 42.0 est un nombre à virgule flottante, et 'Hello, World!' est une chaîne ou chaîne de caractères, appelée ainsi parce que les lettres qu'elle contient sont enchaînées.

Si vous n'êtes pas sûr du type d'une valeur, l'interpréteur peut vous le dire :

 
Sélectionnez
>>> type(2)
<class 'int'>
>>> type(42.0)
<class 'float'>
>>> type('Hello, World!')
<class 'str'>

Dans ces résultats, le mot « class » est utilisé dans le sens d'une catégorie ; un type est une catégorie de valeurs.

Les entiers (en anglais, integers) appartiennent au type int, les chaînes (strings) appartiennent au type str et les nombres à virgule flottante (floating-point numbers) sont de type float.

Qu'en est-il des valeurs comme '2' et '42.0' ? Ils ressemblent à des nombres, mais ils sont entre guillemets comme les chaînes.

 
Sélectionnez
>>> type('2')
<class 'str'>
>>> type('42.0')
<class 'str'>

Ce sont des chaînes.

Lorsque vous tapez un grand nombre entier, vous pourriez être tenté d'utiliser des virgules (ou des points) entre les groupes de chiffres, comme dans 1,000,000. Cela n'est pas un entier valide en Python, mais c'est une notation autorisée :

 
Sélectionnez
>>> 1,000,000
(1, 0, 0)

Ce n'est pas du tout ce que nous attendions ! Python interprète 1,000,000 comme une séquence de nombres entiers séparés par des virgules. Nous en apprendrons plus sur ce genre de séquences plus tard.

1-6. Langages naturels et formels

Les langages naturels sont les langues que les gens parlent, comme l'anglais, l'espagnol et le français. Ils n'ont pas été inventés par des personnes (bien que les gens essaient d'y imposer un certain ordre) ; ils ont évolué naturellement.

Les langages formels sont des langages conçus par des personnes pour des applications spécifiques. Par exemple, la notation utilisée par les mathématiciens est un langage formel qui convient particulièrement bien pour désigner les relations entre les chiffres et les symboles. Les chimistes utilisent un langage formel pour représenter la structure chimique des molécules. Et surtout :

Les langages de programmation sont des langages formels qui ont été conçus pour exprimer des calculs.

Les langages formels ont tendance à avoir des règles de syntaxe strictes, qui régissent la structure des instructions. Par exemple, en mathématiques l'instruction 3 + 3 = 6 a une syntaxe correcte, mais 3 + = 3 $ 6 n'en a pas une. En chimie, H2O est une formule syntaxiquement correcte, mais 2Zz ne l'est pas.

Il y a deux types de règles de syntaxe, se rapportant aux symboles et à la structure. Les symboles sont les éléments de base du langage, tels que les mots, les chiffres et les éléments chimiques. Un des problèmes avec 3 + = 3 $ 6 est que $ n'est pas un symbole valide en mathématiques (du moins autant que je sache). De même, 2Zz n'est pas valide parce qu'il n'y a aucun élément chimique avec le symbole Zz.

Le deuxième type de règle de syntaxe se rapporte à la façon dont les symboles sont combinés. L'équation 3+ = 3 est invalide parce que même si + et = sont des symboles valides, vous ne pouvez pas les avoir l'un après l'autre. De même, dans une formule chimique, l'indice vient après le nom de l'élément, pas avant.

Ceci est une phrase bien $tructurée en fr@nçais, m@is c*ntenant des symboles invalides. Cette phrase tous les symboles valides a, mais est invalide sa structure.

Lorsque vous lisez une phrase en français ou une expression dans un langage formel, vous devez comprendre sa structure (même si, dans un langage naturel, vous faites cela subconsciemment). Ce processus est appelé analyse (grammaticale, lexicale, syntaxique, etc.).

Même si les langages formels et naturels ont de nombreuses caractéristiques en commun - symboles, structure et syntaxe - il y a quelques différences :

  • ambiguïté : les langages naturels sont pleins d'ambiguïté, que les gens traitent en utilisant des indices contextuels et d'autres informations. Les langages formels sont conçus pour être presque ou complètement sans ambiguïté, ce qui signifie que toute instruction a exactement un sens, peu importe le contexte ;
  • redondance : afin de compenser l'ambiguïté et de réduire les malentendus, les langages naturels emploient beaucoup de redondance. En conséquence, ils sont souvent verbeux. Les langages formels sont moins redondants et plus concis ;
  • littéralité : les langages naturels sont pleins d'expressions idiomatiques et de métaphores. Si je dis, « Les dés sont jetés », il n'y a probablement aucun dé et rien n'est jeté (cette expression signifie que quelqu'un a pris une décision). Les langages formels veulent dire exactement ce qu'ils disent.

Comme nous grandissons tous en parlant des langages naturels, il est parfois difficile de s'adapter aux langages formels. La différence entre le langage formel et naturel est analogue à la différence entre la poésie et la prose, mais plus encore :

  • poésie : les mots sont utilisés pour leur sonorité ainsi que pour leur signification, et le poème dans son ensemble crée un effet ou une réaction émotionnelle. L'ambiguïté est non seulement fréquente, mais souvent délibérée ;
  • prose : le sens littéral des mots est plus important et la structure contribue plus au sens. La prose est plus susceptible à l'analyse que la poésie, mais encore souvent ambiguë ;
  • programmes : la signification d'un programme d'ordinateur est littérale et sans ambiguïté, et peut être comprise en totalité par l'analyse des symboles et de la structure.

Les langages formels sont plus denses que les langages naturels, il faut donc plus de temps pour les lire. En outre, la structure est importante, si bien qu'il n'est pas toujours préférable de lire de haut en bas et de gauche à droite. Au lieu de cela, apprenez à analyser le programme dans votre tête, en identifiant les symboles et en interprétant la structure. Enfin, les détails comptent. De petites erreurs d'orthographe et ponctuation, que vous pouvez plus ou moins ignorer dans les langages naturels, peuvent faire une grande différence dans un langage formel.

1-7. Débogage

Les programmeurs font des erreurs. Pour des raisons historiques anecdotiques, les erreurs de programmation sont appelées bogues et le processus de leur traque est appelé débogage.

La programmation, surtout le débogage, apporte parfois des émotions fortes. Si vous luttez avec un bogue difficile, vous pourriez vous sentir en colère, déprimé, ou embarrassé.

Il existe des preuves que les gens réagissent naturellement aux ordinateurs comme si ces derniers étaient des personnes. Quand ils fonctionnent bien, nous pensons à eux comme coéquipiers, et quand ils sont têtus ou grossiers, nous leur répondons de la même manière qu'à des gens grossiers, obstinés (Reeves et Nass, L'équation Média : Comment les gens traitent les ordinateurs, la télévision et les nouveaux médias comme de vraies personnes et lieux).

Se préparer à ces réactions peut vous aider à y faire face. Une approche est de considérer l'ordinateur comme un employé ayant certains points forts, comme la vitesse et la précision, et des faiblesses particulières, comme le manque d'empathie et l'incapacité de saisir l'image d'ensemble.

Votre travail est d'être un bon manager : trouver des moyens de tirer parti des points forts et atténuer les faiblesses. Et trouvez des façons d'utiliser vos émotions pour résoudre le problème, sans laisser vos réactions interférer avec votre capacité de travailler efficacement.

Apprendre à déboguer peut être frustrant, mais c'est une aptitude précieuse qui est utile pour de nombreuses activités au-delà de la programmation. À la fin de chaque chapitre se trouve une section, comme celle-ci, avec mes suggestions pour le débogage. J'espère que cela sera utile !

1-8. Glossaire

  • résolution de problème : le processus de formuler un problème, de trouver une solution et de l'exprimer.
  • langage de haut niveau : un langage de programmation comme Python, conçu pour être facile à lire et à écrire pour les humains.
  • langage de bas niveau : un langage de programmation conçu pour être facile à exécuter par un ordinateur ; également appelé « langage machine » ou « langage assembleur ».
  • portabilité : une propriété d'un programme qui peut fonctionner sur plus d'un type d'ordinateur.
  • interpréteur : un programme qui lit un autre programme et l'exécute.
  • invite : caractères affichés par l'interpréteur pour indiquer qu'il est prêt à traiter la saisie de l'utilisateur.
  • programme : un ensemble d'instructions qui spécifie un calcul.
  • instruction d'impression : une instruction qui dit à l'interpréteur Python d'afficher une valeur sur l'écran.
  • opérateur : un symbole spécial qui représente un calcul simple, comme l'addition, la multiplication ou la concaténation de chaînes.
  • valeur : une des unités élémentaires de données, comme un nombre ou une chaîne, qu'un programme manipule.
  • type : une catégorie de valeurs. Les types que nous avons vus jusqu'à présent sont des nombres entiers (type int), nombres à virgule flottante (type float), et chaînes (type str).
  • entier : un type qui représente des nombres entiers.
  • virgule flottante : un type qui représente des nombres avec des parties fractionnaires.
  • chaîne ou chaîne de caractères : un type qui représente des séquences de caractères.
  • langage naturel : toute langue parlée par des gens, qui a évolué naturellement.
  • langage formel : tout langage conçu par des gens à des fins spécifiques, comme la représentation des idées mathématiques ou des programmes informatiques ; tous les langages de programmation sont des langages formels.
  • symbole : l'un des éléments de base de la structure syntaxique d'un programme, analogue à un mot dans une langue naturelle.
  • syntaxe : les règles qui régissent la structure d'un programme.
  • analyser : examiner un programme et en analyser la structure syntaxique.
  • bogue : une erreur dans un programme.
  • débogage : le processus de détection et de correction des bogues.

1-9. Exercices

Exercice 1

C'est une bonne idée de lire ce livre en face d'un ordinateur afin que vous puissiez essayer les exemples au fur et à mesure.

Chaque fois que vous expérimentez une nouvelle fonctionnalité, vous devriez essayer de faire des erreurs. Par exemple, dans le programme « Hello, world! », que se passe-t-il si vous omettez l'un des guillemets ? Ou si vous les omettez tous les deux ? Et si vous écrivez print de façon incorrecte ?

Ce genre d'expérience permet de vous rappeler ce que vous lisez ; il vous aide également lorsque vous programmez, parce que vous arrivez à apprendre ce que les messages d'erreur veulent dire. Il est préférable de faire des erreurs aujourd'hui et intentionnellement que plus tard et accidentellement.

  1. Dans une instruction print , que se passe-t-il si vous laissez de côté l'une des parenthèses, ou les deux ?
  2. Si vous tentez d'afficher une chaîne, que se passe-t-il si vous laissez de côté l'un des guillemets, ou les deux ?
  3. Vous pouvez utiliser un signe moins pour obtenir un nombre négatif comme -2 . Qu'advient-il si vous mettez un signe plus devant un nombre ? Mais si vous écrivez 2++2  ?
  4. Dans la notation mathématique, des zéros devant un nombre ne posent aucun problème, comme dans le cas de 02 . Qu'est-ce qu'il se passe si vous essayez ceci en Python ?
  5. Qu'est-ce qu'il se passe si vous avez deux valeurs avec aucun opérateur entre elles ?

Exercice 2

Lancez l'interpréteur Python et utilisez-le comme calculatrice.

  1. Combien de secondes y a-t-il dans 42 minutes et 42 secondes ?
  2. Combien de miles y a-t-il dans 10 kilomètres ? Indice : il y a 1,61 kilomètre dans un mile.
  3. Si vous exécutez une course de 10 kilomètres en 42 minutes et 42 secondes, quel est votre rythme moyen (durée écoulée par mile en minutes et secondes) ? Quelle est votre vitesse moyenne en miles par heure ?

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.