SNT Python 2

Identification

Infoforall

3 - Variables


Maintenant que vous savez enregistrer et lancer des programmes Python, un nouveau type de prompt s'offre à vous :

Chat GPT sait aussi fournir des scripts Python simples
Les prompts Python ?

Documents de cours : pdf ou odt.

Document-élève : pdf ou odt.

1 - Affectation

Un langage de programmation permet de stocker des données dans la mémoire.

calcul bizarre
Image issue de http://hcc-cs.weebly.com/variables.html

Les variables permettent d’enregistrer des données puis de les lire plus tard.

Intro A (Mise en place)° Réaliser les actions suivantes :

  • Ouvrir Thonny. Réduire la fenêtre de Thonny et de votre navigateur Web pour que chaque fenêtre occupe la moitié de l'écran.
  • Ouvrir votre dossier/répertoire personnel. Créer dans le dossier SNT un nouveau sous-dossier qu'on nommera python03.
  • Sur Windows : vérifier via le menu affichage de votre explorateur de dossiers que vous avez bien coché la case "Afficher les extensions".

Intro B° Dans Thonny, aller dans le menu Affichage/Views et sélectionner Variables si l’onglet Variables n’est pas ouvert.

Si vous ne voyez pas l'onglet Variables apparaître, demandez de l'aide.

Intro C° Dans la zone de programmation, sauvegarder ce programme sous le nom decouvertevariable.py. Ensuite :

  1. Lancer le programme
  2. Regarder l'onglet variables de Thonny pour voir ce qu'il contient
  3. Regarder la console pour voir si elle a affiché quelque chose
1 2 3 4 5
a = 20 b = 10 c = a + b a

Vous devriez obtenir ceci :

Résultat du programme
  • une variable a a été créée dans l'onglet VARIABLES et elle référence 20.
  • une variable b a été créée dans l'onglet VARIABLES et elle référence 10.
  • une variable c a été créée dans l'onglet VARIABLES et elle référence 30.
  • la console n'affiche rien : la ligne 5 ne semble pas avoir eu d'effet !

Intro D° Remplacer le programme par celui-ci qui diffère juste par la ligne : la ligne 5. On utilise la fonction print() vue dans Python 01 : elle permet de demander à Python d'afficher dans la console.

  1. Lancer le programme
  2. Regarder la console pour voir si elle a affiché quelque chose cette fois
1 2 3 4 5
a = 20 b = 10 c = a + b print(a)

Vous devriez obtenir ceci :

Résultat du programme
  • la console affiche 20 cette fois. C'est bien le contenu de a.

Intro E° Utiliser ce nouveau programme et répondre à cette question : la ligne 04 a-t-elle permis de modifier la valeur de a ?

1 2 3 4 5
a = 20 print(a) a + 100 print(a)

Vous devriez obtenir ceci :

Résultat du programme
  • On voit qu'on affiche deux fois 20 : la ligne 4 n'a pas modifié a : on a juste demandé à Python de calculer ce que fait a + 100 sans lui demander d'afficher le résultat.

Intro F° Utiliser ce dernier programme et répondre à cette question : la ligne 04 a-t-elle permis de modifier la valeur de a ?

1 2 3 4 5
a = 20 print(a) a = a + 100 print(a)

Vous devriez obtenir ceci :

Résultat du programme
  • On voit qu'on affiche 20 puis 120 : cette fois la ligne 4 a bien modifié a.

Quelques exercices pratiques.

⚙ 01° Compléter ce programme pour qu'il mémorise dans la variable moyenne la moyenne des notes contenues dans note1 et note2, puis affiche la valeur de moyenne à l'aide d'une instruction sur la dernière ligne.

CONSIGNE : vous ne devez pas écrire de valeurs visibles sur le programme en dehors des lignes 1 et 2 (20 et 14). Utilisez uniquement les noms des variables. De cette façon, lorsqu'on modifiera l'une des notes, le programme continuera de fonctionner.

1 2 3 4 5
note1 = 20 note2 = 14 moyenne = ... ...

...CORRECTION...

1 2 3 4 5
note1 = 20 note2 = 14 moyenne = (note1 + note2) / 2 print(moyenne)

⚙ 02° Utiliser l'exemple ci-dessous qui utilise la concaténation progressive de strings et vérifier que vous comprennez les réponses de Python.

1 2 3 4 5 6 7 8
e1 = "Alice" e2 = "Bob" e3 = "Charlie" eleves = e1 + ";" + e2 + ";" + e3 print(eleves) print("Zoé" in eleves)

⚙ 03° Analyser le programme pour répondre aux questions suivantes :

1 2 3 4
age = 16 limite = 18 autorisation = age > limite limite = 15
  1. Que contient autorisation après exécution de la ligne 3 ? True ou False ?
  2. La ligne 4 a-t-elle un effet sur ce qui s'est passé en ligne 3 ?
  3. Quelles sont les deux lignes à rajouter si on veut que le programme affiche exactement ce message montrant le contenu de la variable autorisation :
  4. Autorisation accordée : (Ici devra apparaître True ou False)

...CORRECTION...

Visuel q3
Résultat à la fin du programme
  1. L'age n'est pas supérieur à la limite. autorisation contient donc False.
  2. Le fait de modifier en ligne 4 l'une des variables ne va clairement pas modifier ce qui s'est passé en ligne 3 : séquentialité.
  3. Le programme avec l'affichage demandé :
  4. 1 2 3 4 5 6
    age = 16 limite = 18 autorisation = age > limite limite = 15 print("Autorisation accordée :") print(autorisation)

⚙ 04° Réaliser ceci dans l'ordre :

  • Compléter les lignes 4 et 5 pour mémoriser le périmètre et l'aire du rectangle de côté cote1 et cote2.
  • Compléter alors les lignes 8 et 10 pour que le programme affiche les valeurs du périmètre et de l'aire.
  • Lancer ensuite le programme en modifiant uniquement les valeurs des variables en ligne 1 et 2.
1 2 3 4 5 6 7 8 9 10
cote1 = 100 cote2 = 150 perimetre = ... aire = ... print("Périmètre") ... print("Aire") ...

...CORRECTION...

1 2 3 4 5 6 7 8 9 10
cote1 = 100 cote2 = 150 perimetre = 2 * cote1 + 2 * cote2 aire = cote1 * cote2 print("Périmètre") print(perimetre) print("Aire") print(aire)

✎ 05° Lancer ce programme pour voir ce qu'il trace. Modifier ensuite uniquement les trois premières variables de façon à tracer un carré rouge foncée de 150 pixels de côté. Sur votre copie, écrire uniquement les 3 lignes modifiées.

1 2 3 4 5 6 7 8 9 10 11 12 13 14
from turtle import * couleur1 = "#FF0000" cote1 = 100 cote2 = 200 epaisseur = 15 pencolor(couleur1) pensize(epaisseur) goto(cote1, 0) goto(cote1, cote2) goto(0, cote2) goto(0, 0)

Que choisir pour les noms des variables ?

  1. Un nom EXPLICITE : le nom doit être suffisant pour comprendre l'information contenue.
  2. Toujours une minuscule au début.
  3. Aucun espace. Si vous voulez utiliser un nom composé, choisissez entre
    • les underscores : note_ds
    • une majuscule de séparation : noteDs

Voici le bilan des notions abordées ici :

1.1 VARIABLE - Affectation

Affectation

L'affectation est le nom qu'on donne au mécanisme permettant de créer une liaison entre un NOM et un CONTENU MEMOIRE.

une sorte de boite
Image issue de http://hcc-cs.weebly.com/variables.html
L'opérateur d'affectation = en Python
1
a = 10

L'opérateur = permet de créer une variable nommée a et y stocker la valeur 10.

On peut représenter naïvement ce mécanisme comme une boite qui porte un NOM et dans laquelle on place le CONTENU associé.

Boite a contenant 10

Néanmoins, une affectation est simplement un moyen de faire la liaison entre un NOM et un CONTENU en mémoire :

une sorte de liaison
L'opérateur d'affectation dans les algorithmes

Notez bien que c'est le CONTENU 10 qu'on associe au NOM a : on va de la droite vers la gauche. C'est pour cela qu'on écrit plutôt ceci dans les algorithmes :

a  10

Lire une variable

Pour obtenir le contenu d'une variable, il suffit

  • Dans la console interactive : de taper le nom de cette variable .
  • >>> a = 100 >>> a 100
  • Dans un programme : d'utiliser print() sur cette variable .
  • 1 2
    a = 100 print(a)
1.2 VARIABLE - Exemples d'affectation

Déroulé de l'affectation

On commence par évaluer ce qui est à droite de =, puis on affecte cette valeur à la variable de gauche.

Exemple 1
1
a = 20 + 5

TRADUCTION : affecte 25 à la variable a.

Exemple 2
1 2
a = 20 b = a + 100

TRADUCTION : évalue a + 100 et affecte cette nouvelle valeur de 120 à la variable b.

2 - Récupérer les entrées clavier : input()

On peut se demander pourquoi passer par des variables alors que la valeur est écrite quelques lignes au dessus.

2.1 But des variables : stocker une future information

Exécuter mentalement un programme

Dans le programme qui calcule puis affiche une moyenne de deux notes, l'ordinateur a besoin de connaître les valeurs réelles pour réaliser les calculs.

1 2 3 4 5
note1 = 10 note2 = 20 moyenne = (note1 + note2) / 2 print(moyenne)

Vous pouvez EXECUTER MENTALEMENT ce programme : il va afficher une valeur de 15. Oui, mais : on ne vous demande pas d'EXECUTER le programme : c'est le travail de l'ordinateur.

Comprendre mentalement un programme

En tant qu'humain, vous avez juste besoin que de COMPRENDRE ce que réalise le programme.

J'ai remplacé les contenus réels des variables par ... : vous devriez comprendre ce que le programme va réaliser, un jour, lorsqu'il aura accès à des valeurs précises si vous savez qu'elles contiendront des notes comprises entre 0 et 20.

1 2 3 4 5
note1 = ... note2 = ... moyenne = (note1 + note2) / 2 print(moyenne)

L'utilisation d'une variable permet de COMPRENDRE un programme sans savoir EXACTEMENT ce que seront les données : on doit simplement connaître quel type d'informations elles contiennent.

2.2 Le cas de l'Interface Homme Machine (IHM)

Lorsqu'un programme doit récupérer les données qu'un utilisateur va taper (un jour) au clavier, sa future réponse ne peut pas apparaître en dur dans le programme.

En Python, une fonction permet d'"écouter le clavier". Lorsqu'on active la fonction input(), elle attend que l'utilisateur tape sur ENTREE et renvoie alors sa réponse sous forme d'un string.

Prenons ce court programme : tout ce que vous avez besoin de savoir pour le comprendre, c'est que la variable reponse va contenir le texte correspondant aux touches enfoncées par l'utilisateur.

1 2 3 4
print("Donnez votre nom puis validez avec la touche ENTREE : ") reponse = input() print("Merci. Votre nom est :") print(reponse)

On comprend qu'on demande son nom à l'utilisateur en ligne 2. On stocke sa réponse dans la variable nommée reponse. Et en ligne 4, on affichera sa réponse. Vous n'avez pas besoin de savoir EXACTEMENT ce qu'il va taper pour comprendre ce que va réaliser ce programme.

⚙ 06° Utiliser ce programme qui demande à l'utilisateur un texte puis le répète 3 fois. Tapez ce que vous voulez et visualisez bien que la variable reponse va contenir ce que vous venez de taper.

1 2 3 4
print("Donnez votre texte puis validez avec la touche ENTREE : ") reponse = input() print("Merci. La répétition donne ceci ") print(reponse * 3)

Exemple d'utilisation : si vous tapez "Bon", il affichera "BonBonBon".

Question

En lisant simplement le code, peut-on prévoir à l'avance le contenu de la variable reponse ?

...CORRECTION...

Non, on ne peut pas savoir ce que va taper l'utilisateur.

Par contre, on peut réfléchir et élaborer un programme en sachant que cette variable va contenir ce que l'utilisateur va taper un jour.

⚙ 07° Utiliser ce programme qui demande à l'utilisateur un texte puis le nombre de fois qu'il veut qu'on le répète.

1 2 3 4 5 6
print("Donnez votre texte puis validez avec la touche ENTREE : ") reponse = input() print("Combien de fois voulez-vous le répéter ? ") nb = int(input()) print("Merci. La répétition donne ceci ") print(reponse * nb)

Exemple d'utilisation : si vous tapez "Bon" puis "5", il affichera "BonBonBonBonBon".

Questions

  1. En lisant simplement le code, peut-on prévoir à l'avance le contenu des variables reponse et nb ?
  2. En ligne 4, pourquoi avoir utilisé la fonction int() sur le résultat que va renvoyer input() ?

...CORRECTION...

Non, toujours pas.

Si l'utilisateur tape 13 par exemple, la fonction input() va renvoyer "13" un string. Il faut donc utiliser int() pour parvenir à l'interpréter comme un entier.

✎ 08° Compléter le programme pour qu'il stocke l'année de naissance de l'utilisateur dans naissance. Il stocke ensuite l'année actuelle dans maintenant. Il calcule alors l'age de la personne en utilisant ces deux variables et stocke le résultat dans age. On ne tiendra pas compte de la date d'anniversaire, juste de l'année de naissance.

N'écrivez que les lignes sans print sur votre feuille.

1 2 3 4 5 6 7
print("Quelle est votre année de naissance (avec 4 chiffres) ? ") naissance = ... print("Quelle année sommes-nous (avec 4 chiffres) ? ") maintenant = ... age = ... print("Merci. Votre age : ") print(age)

✎ 09° Compléter le programme pour qu'il demande à l'utilisateur de fournir 3 intensités colorées RGB (sous le format 00 11 22 ... jusqu'à FF). Vous ne noterez que les lignes 10 à 13 sur votre feuille.

Ensuite, il faudra créer et stocker le string qui correspond uniquement à la couleur verte puis uniquement à la bleue.

Enfin, il faudra créer le string qui correspond à la vraie couleur RGB que veut l'utilisateur.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
from turtle import * print("Quelle intensité R ? ") r = input() print("Quelle intensité G ? ") g = input() print("Quelle intensité B ? ") b = input() rouge = "#" + r + "00" + "00" vert = ... bleu = ... couleur_voulue = ... pencolor(rouge) dot(40) goto(50, 0) pencolor(vert) dot(40) goto(100, 0) pencolor(bleu) dot(40) goto(150, 0) pencolor(couleur_voulue) dot(40)

Exemple de résultat si l'utilisateur tape FF FF 00 :

exemple de résultat
Exemple de résultat affiché

3 - Incrémentation

3.1 - VARIABLE - Incrémentation

Vocabulaire

Incrémenter veut dire utiliser la valeur actuelle d'une variable pour calculer sa nouvelle valeur.

Incrémenter de 1 en partant de 45 veut dire qu'on passe à 46.

Incrémenter de 2 en partant de 45 veut dire qu'on passe à 47.

Incrémenter de 5 en partant de 45 veut dire qu'on passe à 50.

Incrémenter de -1 en partant de 45 veut dire qu'on passe à 44.

On dit plutôt décrémenter.

Incrémenter (sans autre information donnée) veut dire qu'on incrémenter de +1. il s'agit de la valeur par défaut.

Faire une incrémentation en Python
1 2
a = 10 # après cette ligne, a référence 10 a = a + 1 # après cette ligne, a référence 11

La demande s'effectue bien de la droite vers la gauche :

  1. a = a + 1 : évaluer ce que donne cette valeur + 1 (donc 10+1=11 sur l'exemple)
  2. a = a + 1 : affecter le résultat de cette évaluation à a.
3.2 - VARIABLE - Exemples d'incrémentation

Exemple 1
1 2 3
a = 20 a = a + 100 print(a)

On calcule a+100 puis affecte ce 120 à la variable a. On affiche donc finalement 120.

Exemple 2
1 2 3
a = 10 a = a + 3 print(a)

On calcule a+3 puis affecte ce 13 à la variable a. On affiche donc finalement 13.

Exemple 2
1 2 3 4
a = 10 a = a + 10 a = a + 50 print(a)

On calcule a+10 puis affecte ce 20 à la variable a. Ensuite, on calcule a+50 et on affecte ce 70 à la variable a. On affiche donc finalement 70.

⚙ 10° Utiliser l'exemple ci-dessous et vérifier que vous comprennez les affichages obtenus.

1 2 3 4 5 6 7 8 9 10 11
note = 12 print(note) note = note + 4 print(note) note = note - 2 print(note) note = note + 3 print(note)

✎ 11° Compléter ce programme pour qu'il fasse ceci au final :

  • stocke le prix d'un objet dans une variable prix (fait en ligne 1)
  • stocke le nombre d'objets voulus dans une variable nb (fait en ligne 2)
  • calcule et stocke le prix à payer dans une variable total.
  • calcule et stocke dans total le prix en rajoutant 5 euros de frais de dossier. Il faudra faire ce calcul en utilisant une incrémentation.
  • affiche le total à payer.

Vous noterez sur votre copie uniquement les lignes qu'il faudra compléter.

1 2 3 4 5 6 7 8
prix = 10 nb = 7 total = ... total = ... print("Total") ...

Voyons comment tracer des cercles ou des arcs de cercle avec Turtle. Si c'est un rappel pour vous, vous pouvez passer directement aux questions suivantes.

3.3 - Turtle : tracer un arc de cercle avec circle()

Tracer un cercle complet

La fonction circle() trace un cercle dont on doit fournir le rayon. La position actuelle correspond au point de départ sur le périmètre du cercle.

1 2 3 4
from turtle import * circle(100) circle(50)
circle
Tracer un arc de cercle

On peut envoyer deux arguments à la fonction circle() : le premier est le rayon, le deuxième est l'angle vers lequel le crayon va s'arrêter lors du tracé. Pas facile à utiliser.

  1. 360° de rotation sur soi-même en suivant la trajectoire du cercle : facile, ça fait un cercle.
  2. 180° de rotation sur soi-même en suivant la trajectoire du cercle imaginaire : facile, ça fait un demi-cercle.
  3. 90° de rotation sur soi-même en suivant la trajectoire du cercle imaginaire : facile, ça fait un quart de cercle.

Regardons quelques exemples.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
from turtle import * pensize(10) color("red") circle(100, 90) color("blue") circle(100, 90) color("green") circle(100, 90) color("orange") circle(100, 90)
circles

✎ 12° Expliquer les effets visuels obtenus sur les trois premiers cercles en donnant :

  • lors du tracé du premier cercle : la valeur de la variable etape, la couleur et le rayon du cercle qu'on affiche avec circle().
  • lors du tracé du deuxième cercle : la valeur de la variable etape, la couleur et le rayon du cercle qu'on affiche avec circle().
  • lors du tracé du troisième cercle : la valeur de la variable etape, la couleur et le rayon du cercle qu'on affiche avec circle().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
from turtle import * pensize(etape*5) couleur1 = "#FF0000" couleur2 = "#0000FF" # Premier cercle etape = 1 pencolor(couleur1) circle(etape*30, 360) # Deuxième cercle etape = etape + 1 pencolor(couleur2) circle(etape*30, 360) # Troisième cercle etape = etape + 1 pencolor(couleur1) circle(etape*30, 360) # Quatrième cercle etape = etape + 1 pencolor(couleur2) circle(etape*30, 360) # Cinquième cercle etape = etape + 1 pencolor(couleur1) circle(etape*30, 360) # Sixième cercle etape = etape + 1 pencolor(couleur2) circle(etape*30, 360)

✎ 13° Expliquer pourquoi on obtient cette fois uniquement des demi-cercles.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
from turtle import * pensize(etape*5) couleur1 = "#FF0000" couleur2 = "#0000FF" # Premier demi-cercle etape = 1 pencolor(couleur1) circle(etape*30, 180) # Deuxième demi-cercle etape = etape + 1 pencolor(couleur2) circle(etape*30, 180) # Troisième demi-cercle etape = etape + 1 pencolor(couleur1) circle(etape*30, 180) # Quatrième demi-cercle etape = etape + 1 pencolor(couleur2) circle(etape*30, 180) # Cinquième demi-cercle etape = etape + 1 pencolor(couleur1) circle(etape*30, 180) # Sixième demi-cercle etape = etape + 1 pencolor(couleur2) circle(etape*30, 180)

4 - Condition, première rencontre

Instruction conditionnelle avec if elif

En Python, on peut demander de faire certaines choses sous condition. La première condition est exprimée derrière le mot if. On doit placer derrière ce mot-clé une expression qui sera évaluée comme un booléen (True ou False).

Les instructions à effectuer sous cette condition sont décalées de 4 espaces.

On peut placer des conditions supplémentaires en utilisant elif qui veut dire "sinon si".

⚙ 14° Donner les lignes que va exécuter Python sur ce programme. Cette fois, certaines ne seront pas peut-être pas faire à cause de la condition. Que va contenir appreciation à la fin du programme ?

1 2 3 4 5 6 7
note = 12 appreciation = "bof" if note > 13 : appreciation = "bien" elif note < 8 : appreciation = "pas bien" print(appreciation)

...CORRECTION...

D'abord la ligne 1 puis la ligne 2.

Ensuite, on va en ligne 3 pour tester la condition. Elle est évaluée à False puisque la note n'est pas

1 2 3 4 5
note1 = 20 note2 = 14 moyenne = (note1 + note2) / 2 print(moyenne)
Instruction conditionnelle avec if elif else

On peut encore faire mieux : on peut placer un else généraliste qui veut dire : si aucune des possibilités précédentes n’est vraie, fait ces dernières actions qu'on propose.

⚙ 15° A vous de deviner ce que va contenir autorisation au fur et à mesure du programme :

1 2 3 4 5 6
recu = "1234" mdp = "12345" if recu == mdp: autorisation = True else: autorisation = False

⚙ 16° On remarquera qu’on aurait pu faire plus simple en réalité. Expliquer ce que contient autorisation ci-dessous. La variable recu contient le mot de passe reçu. La variable mdp contient le vrai mot de passe attendu.

1 2 3
recu = "1234" mdp = "12345" autorisation = recu == mdp

Voici le cours récapitulant ce que vous venez de voir.

5 - FAQ

Pas de question pour le moment

Activité publiée le 27 11 2023
Dernière modification : 27 11 2023
Auteur : ows. h.