Afficher avec Python

Identification

Infoforall

2 - Expressions numériques


Cette activité vous présente une première utilisation de Python de façon à afficher des calculs.

Nous n'allons pas réellement faire des choses complexes mais une idée devrait émerger : celle que l'interpréteur Python évalue les ordres qu'on lui transmet en respectant des règles précises.

Nous finirons par la réalisation d'une interface graphique permettant de simuler un damier.

Logiciel nécessaire pour l'activité : Python 3 : Thonny, IDLE ou un site sur lequel on peut faire interpréter du Python

Evaluation ✎ : questions 01-05-07-08-10-11-12-13-16-17

Documents de cours : open document ou pdf

Résumé : Version HTML ou imprimable ou ou PDF (couleur ou gris)

1 - Expression comportant un opérateur

1.1 DEFINITIONS : Expression - Valeur - Opérateur

Une expression caractérise une séquence de valeurs associées à des opérateurs.

Que fait Python d'une expression ? Il l'évalue et fournit sa valeur associée.

Cas simple :

>>> 4 + 5 9
  • 4 et 5 sont des valeurs.
  • + est un opérateur.
  • 4 + 5 est une expression.
  • 9 est la valeur calculée à partir de l'expression.

Les opérateurs arithmétiques classiques sont représentés de cette façon en Python :

  • + symbolise l'addition
  • - symbolise la soustraction
  • * symbolise la multiplication
  • / symbolise la division
  • ** symbolise la puissance
1.2 DEFINITION : Evaluation et priorité d'évaluation

Lorsque l'interpréteur rencontre une expression, il l'évalue et obtient donc une nouvelle valeur.

Cette action sur l'expression se nomme une évaluation .

L'évaluation est séquentielle et progressive sur une ligne : l'interpréteur Python effectue certaines opérations en priorité.

Voici les règles de priorité que respecte l'interpréteur :

  1. Si l'expression comporte des parenthèses (...), Python commence par cette opération.
  2. Sinon, l'opérateur prioritaire est l'opérateur de puissance **.
  3. Ensuite, on passe à l'opérateur de multiplication * ou de division /.
  4. Enfin, l'opérateur d'addition + ou de soustraction - sont les opérateurs les moins prioritaires.
  5. En cas d'égalité de priorité, on commence par l'opérateur le plus à gauche d'abord.

Exemple

10 + (5 + 3) * 2

10 + (5 + 3) * 2

10 + 8 * 2

10 + 8 * 2

10 + 8 * 2

10 + 16

10 + 14

10 + 16

26

Pour vérifier, il suffit de demander poliment à Python de faire le calcul :

>>> 10 + (5 + 3) * 2 26

Exemple 2

5 + 10 / 2 * 3

5 + 10 / 2 * 3

5 + 5.0 * 3

5 + 5.0 * 3

5 + 5.0 * 3

5 + 15.0

5 + 15.0

5 + 15.0

20.0

1.3 Quotient et reste d'une division euclidienne avec // et %

On désigne parfois ces divisions euclidiennes sous le terme de "divisions entières".

Rappels sur les divisions euclidiennes

Il s'agit de diviser un nombre a par un nombre b, en trouvant :

  • Le quotient, c'est à dire le nombre de paquets égaux qu'on peut faire en divisant a par b.
  • Le reste, c'est à dire le nombre d'éléments restants après création des paquets.
  • Exemple avec la division euclidienne de 10 par 5 :
  •      10 │ 5
            ├────
    reste 02
    

    Le quotient vaut 2 et le reste vaut 0.

    On remarquera qu'on peut également le justifier en écrivant 10 = 2*5 + 0

Opérateur Python //

En Python, la syntaxe permettant d'obtenir le quotient de la division entière de 10 par 5 est 10 // 5.

Cela revient à demander à Python "Python, quel est le quotient de la division euclidienne de 10 par 5 ?"

>>> 10 // 5 2

Opérateur Python %

En Python, la syntaxe permettant d'obtenir le reste de la division entière de 10 par 5 est 10 % 5.

Cela revient à demander à Python "Python, quel est le reste de la division euclidienne de 10 par 5 ?"

>>> 10 % 5 0

Quelques autres exemples

  1. Division entière de 11 par 5
  2. Voici la division posée :

         11 │ 5
            ├────
    reste 12
    

    On peut également le justifier en écrivant 11 = 2*5 + 1

    Et voici pour Python :

    >>> 11 // 5 2 >>> 11 % 5 1
  3. Division entière de 13 par 5
  4. Voici la division posée :

         13 │ 5
            ├────
    reste 32
    

    On peut également le justifier en écrivant 13 = 2*5 + 3

    Et voici pour Python :

    >>> 13 // 5 2 >>> 13 % 5 3
  5. Division entière de 14 par 3
  6. Voici la division posée :

         14 │ 3
            ├────
    reste 24
    

    On peut également le justifier en écrivant 14 = 4*3 + 2

    Et voici pour Python :

    >>> 14 // 3 4 >>> 14 % 3 2

Priorité

L'opérateur // et l'opérateur % possèdent la même priorité que la multiplication ou la division.

Lorsque les deux sont présents, c'est donc l'ordre d'apparition qui tient lui de priorité. Attention, ils ne sont pas interchangeables.

>>> 1407 % 5 // 2 1 >>> 1407 // 2 % 5 3

Pourquoi ? Voici la décomposition des deux évaluations précédentes.

Déroulé de la première évaluation : 1407 % 5 // 2

1407 % 5 // 2

2 // 2

1

Déroulé de la première évaluation : 1407 // 2 % 5

1407 // 2 % 5

703 % 5

3

Vous avez vu plusieurs lignes de calcul possèdant des espacements. Ceux-ci ne sont pas positionnés au hasard :

Ecrire un code clair 1 : les espaces dans les expressions

Lorsqu'une expression ne contient que des opérateurs ayant la même priorité, on laisse un espace entre les différentes termes :

Expressions correctement écrites : >>> 25 % 10 >>> 25 + 10 - 5 Expressions posant des problèmes de lecture : >>> 25%10 >>> 25+10+5

Lorsqu'une expression ne contient que des opérateurs ayant des priorités différentes, on ne place pas d'espace sur les opérateurs prioritaires :

Expressions correctement écrites : >>> 10 + 25*5 >>> 25/10 - 5 Expressions posant des problèmes de lecture : >>> 10+25*5 >>> 10 + 25 * 5 >>> 25/10-5 >>> 25 / 10 - 5

S'il faut des parenthèses, on ne rajoute pas d'espace au début ou à la fin de l'expression située dans les parenthèses.

L'expression dans la parenthèse est prioritaire sur la multiplication. Cette fois, on ne placera donc pas d'espace entre le + mais on en place autour du * :

Expressions correctement écrites : >>>(25 + 5) * 5 >>> (4 + 5) * (12 + 55) Expressions posant des problèmes de lecture : >>> (25+5)*5 >>> ( 25 + 5 ) * 5 >>> ( 25+5 ) * 5

Et pour les cas plus complexes ? On fait appel à son bon sens !

Les question sans icone particulière :

C'est une question "normale". Que faire ?

  • Vous tentez de faire la question
  • Si vous bloquez (trop longtemps), vous regardez la réponse en cliquant dessus.
  • Correction ?

    ...CORRECTION...

    Si ce n'est toujours pas clair malgré la réponse, vous m'appelez.

01° Tapez ceci dans la console interactive.

>>> 5 * 10 ??? >>> 15 - 4 ???

Questions :

  • Quelles sont les valeurs de la première expression ?
  • Que donne l'évaluation de la deuxième expression ?
  • Quel est le symbole de l'opérateur de la deuxième expression ? Quel est son sens (son signification, sa sémantique) ?

...CORRECTION 1-2...

  • Quelles sont les valeurs de la première expression ?
  • Les valeurs de la première expression sont 5 et 10

  • Que donne l'évaluation de la deuxième expression ?
  • "Evaluer" veut dire fournir la valeur attribuée à l'expression. Ici 15-4 donne simplement 9

  • Quel est le symbole de l'opérateur de la deuxième expression ? Quel est son sens ?
  • Le seul opérateur de la deuxième expression est - dont le sens est la soustraction.

02° Donner, de tête, la valeur que va fournir Python en évaluant ces expressions. Vérifier ensuite en évaluant dans la console.

>>> 9*9 + 2 ? >>> 2 + 9*9 ? >>> 12 - 2*0.2 ? >>> 3*0.1 + 12 ?

...CORRECTION 1-2...

Pour comprendre ce calcul, il faut se souvenir que l'opérateur multiplication * est prioritaire sur l'opérateur addition +.

L'ordinateur va ainsi évaluer votre calcul progressivement, étape par étape :

>>> 9*9 + 2 >>> (9*9) + 2 >>> 81 + 2 83

Ca ne change rien pour le second du coup, les priorités sont les mêmes :

>>> 2 + 9*9 >>> 2 + (9*9) >>> 2 + 81 83

...CORRECTION 3-4...

Même principe : l'opérateur multiplication * est prioritaire sur l'opérateur soustraction -.

L'ordinateur va ainsi évaluer votre calcul progressivement, étape par étape :

>>> 12 - 2*0.2 >>> 12 - (2*0.2) >>> 12 - 0.4 11.6

Ca ne change rien pour le second du coup, les priorités sont les mêmes :

>>> 3*0.1 + 12 >>> (3*0.1) + 12 >>> 0.3 + 12 12.3

03° Evaluer de tête ces deux expressions. Donnent-elles le même résultat ?

>>> 3 + 2*3 + 2 ? >>> (3+2) * (3+2) ?

...CORRECTION...

L'ordinateur évalue ainsi la première expression :

>>> 3 + 2*3 + 2 >>> 3 + (2*3) + 2 >>> 3 + 6 + 2 >>> (3 + 6) + 2 >>> 9 + 2 11

Pour la deuxième expression, on respecte juste les parenthèses :

>>> (3+2) * (3+2) >>> 5 * (3+2) >>> 5 * 5 25

Les question avec l'icône stylo ✎ 

Ces questions seront notées si vous êtes sélectionné. Il faut donc mettre votre réponse sur votre cop.

✎ 04° Expliquer clairement les réponses fournies par Python sur ces calculs. Vérifier votre réponse en tapant l'expression dans la console.

>>> 12 // 5 ? >>> 12 % 5 ? >>> 12 // 9 ? >>> 12 % 9 ? >>> 7 // 2 ? >>> 7 % 2 ? >>> 380 % 360 ?

05° Vous voulez acheter des paquets de gateaux. Un paquet coûte 12 euros. Vous avez 100 euros sur vous :

  1. Ecrire le calcul à demander à l'interpréteur pour savoir combien de paquets vous pouvez acheter avec 100 euros.
  2. Ecrire le calcul à demander à l'interpréteur pour savoir combien d'euros il va vous rester après cet achat.

...Correction...

On trouve le résultat avec deux lignes.

"Python, combien de paquets puis-je acheté ?"

>>> 100 // 12 8

"Python, combien va-il me rester ?"

>>> 100 % 12 4

On peut donc acheter 8 paquets et il nous restera 4 euros.

Cela revient à dire que 100 = 8*12 + 4.

✎ 06° Taper les expressions suivantes qui illustrent l'opérateur ** : la puissance.

>>> 3**2 9 >>> 4**2 16 >>> 5**2 25 >>> 10**2 100 >>> 10**3 1000

Question :

Comment peut-on écrire 10**6 uniquement en utilisant des multiplications ?

✎ 07° Noter sur votre copie les résultats des puissances de 2 successives suivantes :

>>> 2**2 ? >>> 2**3 ? >>> 2**4 ? >>> 2**5 ? >>> 2**6 ? >>> 2**7 ?

Question supplémentaire :

Proposer une autre façon de calculer 27 qui n'utilise que des multiplications.

08° On considère l'expression suivante : 5**2*5**2.

Question

  1. Réaliser sur papier l'évaluation de cette expression en expliquant clairement les étapes successives.
  2. Vérifier votre résultat sur la console Python.
  3. Ecrire l'expression de façon plus claire en utilisant des espaces de façon pertinente.

...correction...

>>> 5**2*5**2 >>> (5**2)*(5**2) >>> 25*25 625

La puissance étant prioritaire, nous aurions dû écrire l'expression sous cette forme plus claire :

>>> 5**2 * 5**2

On notera bien que 2**5 veut dire 25, ce qui correspond à 2*2*2*2*2 et pas 2*5.

De la même façon,

  • 10**1 veut dire 101, ce qui correspond à 10
  • 10**2 veut dire 102, ce qui correspond à 10*10
  • 10**3 veut dire 103, ce qui correspond à 10*10*10
  • 10**4 veut dire 104, ce qui correspond à 10*10*10*10

2 - Application à la résolution de problèmes

A quoi peut bien servir ce que nous venons de voir aujourd'hui, notamment la division euclidienne et le modulo ?

La programmation consiste en partie à faire une traduction : comment faire comprendre à l'interpréteur Python ce qu'on veut faire en utilisant uniquement les quelques mots qu'il utilise.

2.1 - Détection de décennie

Imaginons un ensemble de personnes dont on connait les années de naissance et que sont toutes nées en 2000 et plus. Nous voudrions parvenir à déterminer informatiquement si une personne est bien nés entre 2000 et 2009. Comment faire ? Il faudra savoir comment poser la question suivante à l'interpréteur Python : "Quel est le chiffre de la dizaine de l'année de naissance de cette personne ?"

Imaginons par exemple que vous vouliez trouver le chiffre de la dizaine dans 2004. C'est 0 bien entendu. Ok. Mais comment demander à Python de nous répondre 0 sur ce cas ?

Il n'existe pas d'opérateurs basiques pour faire cela... Il va falloir composer avec ce qu'on sait demander à Python pour l'instant : + - * / // % **...

2.1 - Extraire le chiffre de l'unité, de la dizaine et de la centaine
  • Entrée du problème : un nombre ENTIER M positif
  • Exemple d'entrée : M =  1234 

  • Sortie du problème : un ensemble de chiffres représentant
    • le chiffre de l'unité u (avec l'exemple u =  4 ),
    • le chiffre de la dizaine d (avec l'exemple d =  3 ),
    • le chiffre de la centaine c (avec l'exemple c =  2 ),
Nombre M = 1 2 3 4
La case code 1000 100 10 1
On obtient donc 1000 200 30 4

Unité

Il suffit de faire une division euclidienne par 10 et de récupérer le reste.

Exemples :

>>> 1234 % 10 4 >>> 489 % 10 9

Dizaine

Il suffit de diviser le nombre par 10. Le chiffre de la dizaine se retrouve alors à la position de l'unité.

Pour récupérer ce chiffre, il suffit donc de faire une deuxième division euclidienne par 10 et de récupérer le reste.

Exemples :

# En deux étapes >>> 1234 // 10 123 >>> 123 % 10 3 # En une étape >>> 1234 // 10 % 10 3

Centaine

Il suffit de diviser le nombre par 100. Le chiffre de la centaine se retrouve alors à la position de l'unité.

Il suffit de faire une deuxième division euclidienne par 10 et de récupérer le reste.

Exemples :

# En deux étapes >>> 1234 // 100 12 >>> 12 % 10 2 # En une étape >>> 1234 // 100 % 10 2

✎ 09° Expliquer clairement ce qu'on doit taper dans la console pour récupérer la dizaine (0) de l'année 2008.

>>> 2008...

✎ 10° Expliquer clairement ce qu'on doit taper dans la console pour récupérer la dizaine (8) de l'année 1987.

>>> 1987...

✎ 11° Expliquer clairement ce qu'on doit taper dans la console pour récupérer la centaine (9) de l'année 1987.

>>> 1987...

✎ 12° Expliquer clairement ce qu'on doit taper dans la console pour récupérer le chiffre des milliers (1) de l'année 1987.

>>> 1987...

Voici pour une première utilisation possible de ces deux opérateurs : récupérer certains chiffres bien précis.

2.2 Position d'une case sur un plateau

2.2 - Position d'une case sur un plateau de jeu

2.2.A - Description du plateau

Imaginons qu'on dispose d'un plateau de jeu de 4 cases sur 4 cases. Les cases sont numérotées de 0 à 15, comme indiqué ci-dessous :

La ligne du haut porte le numéro 0, la ligne du dessous le numéro 1...

La colonne de gauche porte le numéro 0 puis les autres 1, 2 et 3.

2.2.B - Numéro de ligne

Comment trouver le numéro de ligne d'une case dont on connaît le numéro ?

Assez facile : il y a 4 cases par ligne et les cases commencent à 0.

Il suffit de récupérer le quotient de la division euclidienne du numéro de la case par 4.

>>> 3 // 4 0 >>> 4 // 4 1 >>> 7 // 4 1 >>> 8 // 4 2

2.2.C - Numéro de colonne

Comment trouver le numéro de colonne d'une case dont on connaît le numéro ?

Assez facile aussi : il y a 4 cases par ligne et les cases commencent à 0.

Il suffit de récupérer le reste de la division euclidienne du numéro de la case par 4.

>>> 3 % 4 3 >>> 4 % 4 0 >>> 7 % 4 3 >>> 8 % 4 0

13° Quel calcul faire pour obtenir le numéro de colonne de la case n°9 ?

...Correction...

9 % 4

14° Quel calcul faire pour obtenir le numéro de ligne de la case n°9 ?

...Correction...

9 // 4

✎ 15° Comment trouver la colonne de la case 117 d'un plateau de jeu comportant 34 cases par ligne ?

✎ 16 (difficile)° On considère un plateau comportant 42 cases par ligne. Un monstre est dans la case 1432 et un héros dans la case 1417. Les deux sont-ils adjacentes, c'est à dire sur deux cases situées directement l'une à côté de l'autre dans le plateau ?

3 - Interface graphique

4 -

5 - Conclusion temporaire

Nous venons de voir que l'interpréteur Python analyse chacune de vos demandes en la traitant progressivement par petit bout en fonction des priorités des opérateurs.

L'interpréteur n'est qu'une machine qui applique des consignes transmises via un langage fermé et définie à l'avance. Ces règles forment ce qu'on nomme la syntaxe.

Conclusion 1 - Syntaxe et sémantique
  • L'interpréteur est un programme qui reçoit une demande sous forme d'une ligne à analyser
  • L'interpréteur n'a AUCUNE MARGE DE MANOEUVRE pour comprendre une demande mal formulée : si la demande ne respecte pas scrupuleusement la syntaxe de langage choisi, l'interpréteur ne pourra pas la comprendre (c'est l'erreur de syntaxe : la demande est mal formulée)
  • Il est possible que la syntaxe soit bonne mais que vous ayez mal compris la façon dont l'interpréteur va la comprendre : c'est votre faute, pas celle de l'interpréteur (c'est l'erreur de sémantique : la demande n'est pas appliquée avec le sens que vous pensiez lui donner).

Nous avons vu comment programmer avec 3 outils (Python directement, l'IDE Thonny ou l'interface Web Basthon)... Reste à voir pourquoi programmer !

Conclusion 2 - Les 4 piliers de l'informatique

Globalement, on pourra dire que l'informatique est une science qui consiste à résoudre les problèmes. Mais c'est une science assez difficile à appréhender car elle est composée de plusieurs piliers, plus ou moins dépendants.

  • 1er pilier : l'information ou les données. Pour travailler sur un problème, il faut déjà parvenir à stocker les informations liées à ce problème.
  • L'informatique consiste donc en partie à savoir encoder les informations du monde réel de façon à pouvoir les traiter efficacement.

  • 2e pilier : l'algorithmique. C'est la science de la résolution de problèmes en utilisant
    • une méthode qui répond toujours une bonne réponse
    • une méthode qui répond rapidement
    • une méthode qui serait applicable par une machine

    L'informatique consiste donc en partie à savoir résoudre les problèmes en optimisant la solution.

  • 3e pilier : la machine justement. Les deux premiers piliers permettent de réfléchir à la notion d'information et d'algorithme, mais il reste bien entendu falloir appliquer ces méthodes sur des machines.
  • L'informatique consiste donc en partie à concevoir de ces machines et à déterminer les tâches élémentaires basiques qu'elles doivent réaliser.

  • 4e pilier : le langage. L'informatique traite beaucoup de la notion de langage formel, à savoir :
    • la syntaxe (comment écrire).
    • la sémantique (que veut dire ce qu'on a écrit en respectant la syntaxe)
    • comment faire disparaître toute ambiguïté lorsqu'on utilise ce langage ?
    • comment décrire un objet en utilisant un langage ?
    • comment décrire une action en utilisant un langage ?
    • comment décrire une démonstration en utilisant un langage ?
    • comment formule une requête en utilisant un langage ?

Chacun de ces piliers fait partie de l'informatique, tout en ayant des liens avec d'autres disciplines que l'informatique (mathématiques, physique, linguistique...).

Et c'est la programmation qui va permettre de relier ces 4 notions entre elles.

Les questions avec l'icône main ✌ :

La question est notée directement en classe. Pensez à faire appel à moi, sinon elle sera non validée.

Pas de question de ce type de cette activité.

6 - FAQ (Frequently Asked Questions)

Cette partie contiendra à chaque fois des questions d'élèves qu'on retrouve d'année en année mais dont les réponses nécessitent des notions qui ne sont pas au programme ou qui seront détaillées plus tard. Pratique et intéressant mais absolument pas indispensable du coup.

J'ai vu une erreur sur le site, comment la signaler ?

Utilisez le bouton CONTACT en bas de chaque page.

Notez l'URL de l'activité ou son nom et copiez le texte qui pose problème, si besoin avec une description de ce qu'il faut changer si vous pensez que c'est nécessaire.

Merci !

Voici pour ce premier contact avec la console de Python.

Pour la plupart des activités, vous trouverez un récapitulatif des notions à connaître. Il ne s'agit d'un ensemble de questions auxquelles il faudra savoir répondre si vous voulez une bonne note.

Le résumé de l'activité regroupe lui l'ensemble des points de cours, les encarts verts .

LIEN VERS LES RECAPITULATIFS

LIEN VERS LES RESUMES

Activité publiée le 28 08 2019
Dernière modification : 17 10 2021
Auteur : ows. h.