Un langage de programmation permet de stocker des données dans la mémoire.
Les variables permettent d’enregistrer des données puis de les lire plus tard.
✔ Intro A (Mise en place)° Réaliser les actions suivantes :
Sortir votre feuille de TP et y noter le titre Python 3.
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 :
Placer ce programme dans la zone de programmation de Thonny.
1
2
3
4
5
a=20b=10c=a+ba
Sauvegarder le programme sous le nom variable.py en le plaçant dans le dossier python03.
Lancer avec la flèche verte.
Vous devriez obtenir ceci :
Regarder l'onglet VARIABLES de Thonny pour voir ce qu'il contient
une variable a a été créée : elle référence 20.
une variable b a été créée : elle référence 10.
une variable c a été créée : elle référence 30.
Regarder la console : la ligne 5 ou 6 ne contenant que a n'a provqué AUCUN AFFICHAGE contrairement à ce qu'on aurait pu croire
✔ Intro D° Remplacer le programme par celui-ci qui diffère juste sur la ligne 5. On utilise la fonction print() vue dans Python 01 : elle permet de demander à Python d'afficher dans la console.
1
2
3
4
5
a=20b=10c=a+bprint(a)
Lancer le programme.
Vous devriez obtenir ceci :
Regarder la console : cette fois la console affiche bien la valeur 20.
Conclusion : dans un programme, toute demande d'affichage doit être faite de façon explicite avec print().
✔ 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=20print(a)a+100print(a)
Vous devriez obtenir ceci :
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 ni de l'afficher, ni de le stocker.
✔ 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=20print(a)a=a+100print(a)
Vous devriez obtenir ceci :
On voit qu'on affiche 20 puis 120 : cette fois la ligne 4 a bien modifié a.
Conclusion : dans un programme, toute demande de stockage d'informations doit être faite de façon explicite avec l'utilisation de =.
Passons aux 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.
Sur quelle ligne affecte-t-on la variable eleves ? Quel va être son type (int, float, str ou bool) ?
Sur quelle ligne affecte-t-on la variable presente ? Quel va être son type (int, float, str ou bool) ?
Sur quelle ligne demande-t-on d'afficher la variable presente ?
...CORRECTION...
eleves est créée en ligne 5 et on lui affecte un string.
presente est créée en ligne 6 et on lui affecte un bool, qui sera obtenue en se demandant ce que vaut "Zoé"ineleves.
Ligne 9.
⚙ 03° Analyser le programme pour répondre aux questions suivantes :
1
2
3
4
age=16limite=18autorisation=age>limitelimite=15
Que contient autorisation après exécution de la ligne 3 ? True ou False ?
La ligne 4 a-t-elle un effet sur ce qui s'est passé en ligne 3 ?
Rajouter un print() en fin de programme pour qu'on affiche le STRING suivant (un seul texte donc) :
Autorisation accordée :
Rajouter un second print() en fin de programme pour qu'on affiche le contenu de la variable autorisation : Python devrait vous afficher soit True, soit False sous le texte précédent.
Autorisation accordée :(Ici True ou False devra apparaître)
...CORRECTION...
L'age n'est pas supérieur à la limite. autorisation contient donc False.
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é.
✎ 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.
Un nom EXPLICITE : le nom doit être suffisant pour comprendre l'information contenue.
Toujours une minuscule au début.
Aucun espace. Si vous voulez utiliser un nom composé, choisissez entre
les underscores : note_ds
une majuscule de séparation : noteDs
Si vous êtes en TP, passez directement à la partie 2 suivante, sans lire les deux bilans ci-dessous : ils seront analysés oralement à la fin du TP.
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.
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é.
Néanmoins, une affectation est simplement un moyen de faire la liaison entre un NOM et un CONTENU en mémoire :
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=100print(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=20b=a+100
TRADUCTION : évalue a + 100 et affecte cette nouvelle valeur de 120 à la variable b.
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.
L'utilisation d'une variable permet de COMPRENDRE un programme sans savoir EXACTEMENT ce que seront les données. Par contre, vous avez besoin de connaître le type d'informations qu'elles contiendront.
⚙ 06° Mettre ce programme en mémoire sans le modifier puis le lancer : il va afficher un message dans la console et vous devriez voir que le curseur clignote : il attend votre réponse.
Tapez ce que vous voulez dans la console puis validez avec la touche ENTREE.
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 dans la console, il affichera BonBonBon.
En ligne 2, c'est input() qui demande à l'utilisateur de taper quelque chose.
C'est le print() de la ligne 4 qui provoque la répétion du texte à l'écran.
Question
En lisant simplement le code, peut-on prévoir à l'avance le contenu de la variable reponse ? Peut-on néanmoins comprendre ce que réalisera ce programme ?
...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.
2.2 La fonction native input()
Principe
La fonction input() permet de récupérer sous forme d'un STRING ce qu'un utilisateur va taper un jour sur le clavier.
L'utilisateur doit valider sa réponse avec la touche ENTREE.
1
2
3
4
print("Donnez votre nom puis validez avec la touche ENTREE : ")reponse=input()print("Merci. Votre nom est :")print(reponse)
Pour comprendre le programme ci-dessus, il vous suffit de savoir que la variable reponse va contenir un string correspondant aux touches enfoncées par l'utilisateur.
L2, à droite : on demande à l'utilisateur de fournir son nom;
L2, à gauche : on stocke sa réponse dans la variable nommée reponse;
L4 : on affichera sa réponse.
Récupérer un entier ?
Réponse simple : on ne peut pas ! Tout ce que vous tapez va être transmis à Python sous forme d'un string.
Si vous tapez 17, input() renvoie un string "17", et pas un int 17.
Mais; on peut utiliser la fonction native int() qui permet de tenter de créer un entier à partir de la donnée qu'on lui fournit. Exemple d'utilisation :
1
2
3
4
print("Donnez votre note puis validez avec la touche ENTREE : ")reponse=int(input())print("Comme je suis gentil, je vous rajoute 3 points :")print(reponse+3)
⚙ 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 dans la console, il affichera BonBonBonBonBon.
Questions
En lisant simplement le code, peut-on prévoir à l'avance le contenu des variables reponse et nb ?
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-B° Remplacer les ... du programme pour
(ligne 2) demander l'année de naissance de l'utilisateur (à l'aide d'une utilisation adapatée d'un input()) et la stocker dans naissance;
(ligne 4) demander l'année actuelle à l'utilisateur (à l'aide d'une utilisation adapatée d'un input()) et la stocker dans maintenant;
(ligne 6) en utilisant simplement les variables maintenant et naissance, calculer l'age de l'utilisateur dans la variable age.
On ne tiendra pas compte de la date d'anniversaire, juste de l'année de naissance.
N'écrivez que les lignes 2,4,5 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 qui demande à l'utilisateur de fournir 3 intensités colorées RGB (sous le format 00 11 22 ... jusqu'à FF) et les stocke dans r g b.
Vous allez devoir compléter un peu le programme pour parvenir à utiliser les trois réponses pour dessiner ce qui correspond à la partie rouge, la partie verte, la partie bleue et ce qui perçoit notre oeil lorsqu'il reçoit les trois à la fois.
Exemple de résultat si l'utilisateur répond FF suivi de FF puis 00 :
Vous ne noterez sur votre feuille que les lignes 10 à 13..
Votre travail :
Ligne 11 : créer et stocker dans vert string qui correspond à la couleur verte. Inspirez vous du rouge : on rappelle que le vert est au mileu : #00xx00.
Ligne 12 : créer et stocker dans bleu string qui correspond à la couleur bleue. Inspirez vous du rouge : on rappelle que le bleu est à droite : #0000xx.
Ligne 13 : il faudra créer le string qui correspond à la vraie couleur RGB que veut l'utilisateur : #xxxxxx.
fromturtleimport*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)
2.3
Objets connectés : IMH, actionneur, capteur
graph LR
subgraph "Monde Physique"
H([Humain])
end
subgraph interface
C([CAPTEUR : Clavier])
end
subgraph informatique
direction LR
E([signaux électroniques]) o--o O([Données sous forme d'octets])
end
H --- C --- informatique
graph RL
subgraph informatique
direction LR
E([signaux électroniques]) o--o O([Données sous forme d'octets])
end
subgraph interface
A([ACTIONNEUR : Ecran])
end
subgraph "Monde Physique"
H([Humain])
end
informatique --- A --- H
IHM
C'est l'acronyme d'Interface Homme Machine.
On retrouve la notion d'IHM dans tous systèmes où un utilisateur interagit avec un système informatique ou électronique.
Capteur
Dispositif qui récupère une information du monde extérieur et l'envoie au système informatique sous forme d'un signal physique.
Dans le cas de la console interactive, le clavier est un capteur : on récupère des données depuis le monde physique.
Sur un smartphone, le microphone est un capteur : il transforme les ondes mécaniques de votre voix en données informatiques.
Actionneur
Dispositif qui récupère une donnée informatique et la transforme en signal physique.
Dans le cas de la console interactive, l'écran est donc un actionneur : on transforme un code en affichage.
Sur un smartphone, le haut-parleur est un actionneur : il transforme les données informatiques d'un fichier-son en ondes mécaniques.
✎ 11° Compléter ce programme pour qu'il fasse ceci au final :
stocke le prix d'un objet dans une variable prix (déjà fait en ligne 1)
stocke le nombre d'objets voulus dans une variable nb (déjà 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
45
6
7
8
prix=10nb=7total=...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
fromturtleimport*circle(100)circle(50)
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.
360° de rotation sur soi-même en suivant la trajectoire du cercle : facile, ça fait un cercle.
180° de rotation sur soi-même en suivant la trajectoire du cercle imaginaire : facile, ça fait un demi-cercle.
90° de rotation sur soi-même en suivant la trajectoire du cercle imaginaire : facile, ça fait un quart de cercle.
fromturtleimport*pensize(5)couleur1="#FF0000"couleur2="#0000FF"# Premier cercleetape=1pencolor(couleur1)circle(etape*30,360)# Deuxième cercleetape=etape+1pencolor(couleur2)circle(etape*30,360)# Troisième cercleetape=etape+1pencolor(couleur1)circle(etape*30,360)# Quatrième cercleetape=etape+1pencolor(couleur2)circle(etape*30,360)# Cinquième cercleetape=etape+1pencolor(couleur1)circle(etape*30,360)# Sixième cercleetape=etape+1pencolor(couleur2)circle(etape*30,360)
✎ 13° Expliquer pourquoi on obtient cette fois uniquement des demi-cercles.
fromturtleimport*pensize(5)couleur1="#FF0000"couleur2="#0000FF"# Premier demi-cercleetape=1pencolor(couleur1)circle(etape*30,180)# Deuxième demi-cercleetape=etape+1pencolor(couleur2)circle(etape*30,180)# Troisième demi-cercleetape=etape+1pencolor(couleur1)circle(etape*30,180)# Quatrième demi-cercleetape=etape+1pencolor(couleur2)circle(etape*30,180)# Cinquième demi-cercleetape=etape+1pencolor(couleur1)circle(etape*30,180)# Sixième demi-cercleetape=etape+1pencolor(couleur2)circle(etape*30,180)
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 exécutées à cause de la condition. Que va contenir appreciation à la fin du programme ?
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 :
⚙ 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.