Ignorer la navigation

IV. Partie N°2 : parlons Python !

 Python est-il présent sur votre ordi ?

Cherchez dans la barre de taches si Python est installé.

Si ce n’est pas le cas installez la dernière version : vous devez vous rendre sur le site officiel de Python.

1. Cliquez sur le lien « download » dans le menu principal de la page.
2. Sélectionnez la dernière version de Python
3. On vous propose un (ou plusieurs) lien(s) vers une version Windows : sélectionnez celle qui conviendra à votre processeur. Si vous avez un doute, téléchargez une version « x86 »


Remarque: si vous avez besoin d’information, toutes les instructions sont sur: https://docs.python.org/fr (allez dans la ou les parties « Référence »). Il s’agit du site officiel. Il est donc totalement fiable !

Remarque N°2 : si vous voulez allez plus loin dans Python n’hésitez pas à faire le formation sur OpenClassRoom (https://openclassrooms.com)? Cette formation a inspirée une partie de TP.

 


Présentation du langage Python :

A partir du document : « langage_interp_compil.pdf » répondez aux questions suivantes :

1. Expliquez brièvement la différence entre un langage compilé et un langage interprété.

2. Le langage C d’Arduino est-il compilé ou interprété ? A quoi voit-on ça quand on utilise Arduino ?

3. Le langage Python est-il compilé ou interprété ?

 


Partie N°1 : essais sous Windows

 

Vous avez plusieurs façons d'accéder à la ligne de commande Python. La plus courante : menu « démarrer », puis « tous les programmes » puis vous choisissez Python

Vous pouvez également passer par la ligne de commande Windows : menu « démarrer" puis tapez « Exécuter ». Dans la fenêtre de commande tapez « py » et c’est parti !

 

Remarque : sous Linux on tape « Python3 » dans le terminal.

 

Vous devriez avoir un truc qui ressemble à ça (ici version Linux mais la version Windows est très proche):

 

On reconnaît l’interpréteur Python aux 3 chevrons >>>

Pour quitter interpréteur Python il faut taper « exit() »

 

Essai N° 1 : les variables en Python:

Vous savez tous ce qu’est une variable. Nous allons voir comment on les utilise avec Python.

En Python, pour donner une valeur à une variable, il suffit d'écrire :
nom_de_la_variable = valeur

Une variable doit respecter quelques règles de syntaxe incontournables :

  • Le nom de la variable ne peut être composé que de lettres, majuscules ou minuscules, de chiffres et du symbole souligné « _ » (appelé underscore en anglais, touche du 8 sur le clavier)).
  • Le nom de la variable ne peut pas commencer par un chiffre.
  • Le langage Python est sensible à la casse, ce qui signifie que des lettres majuscules et minuscules ne constituent pas la même variable (Toto n’est pas toto qui n’est pas TOTO. Ce sont 3 variables différentes)

 

Remarque : les espaces séparant « = » du nom et de la valeur de la variable sont facultatifs. Ils rendent juste la lecture plus facile

 

Tapez :
>>> jour = 1 (puis « entrée »)→ à faire à chaque fois
>>> mois = 9
>>> annee = 2020
>>> jour = jour +1
>>> print("nous sommes le ", jour, "/ ", mois, "/", annee)

1. Expliquez ce qu’ont fait nos instructions
2. Quelle est la fonction (instruction) utilisée dans cet exemple. Quel est son rôle ?
3. Quelle est la grande différence pour la gestion des variables entre le C (arduino) et Python ?

 


Tapez maintenant:

>>> nb1 = 3
>>> nb2 = 5
>>> resultat = nb1 * nb2
>>> print(resultat)

1. Expliquez ce qu’ont fait nos instructions

 

Tapez maintenant:
>>> type(nb1)
puis
>>> type(resultat)

2. Que fait la fonction type d’après vous ?

 

Tapez maintenant:

>>> nb1 = 3
>>> nb2 = 5
>>> resultat = nb1 / nb2
>>> print(resultat)
>>> type(resultat)


3. Que constatez-vous ?

 

Tapez maintenant (vous rentrerez d’abord 10 puis 12 comme chiffres):

>>> nbr1=input("Rentrez votre 1er nombre : ")
>>> nbr2=input("Rentrez votre 2ème nombre : ")
>>> resultat= nbr1 + nbr2
>>> print(resultat)

1. Quelle est la nouvelle fonction (instruction) utilisée dans cet exemple. Quel est son rôle ?
2. Expliquez ce qu’ont fait nos instructions. Est-ce ce qu’on voulait. Cherchez ce qui ne fonctionne pas comme prévu
3. Cherchez le rôle de la fonction « int » dans la documentation sur Python. Proposez un programme qui met en œuvre cette fonction et qui résout notre problème (proposez au moins 2 solutions d’utilisation de la fonction « int »).

  

Essai N° 2 : les boucles

Nous connaissons déjà l’utilisation de la boucle « while » vue dans la 1ère partie. Maintenant attardons nous sur la boucle « for » qui est très différente de la version vue en C (Arduino).

Tapez :
>>> for x in "LaMache":
...         print(x)                faites 2 fois « entrée »

 

Vous remarquerez que la fonction « for » ne se termine pas sur la première ligne. Quand vous appuyez sur « entrée », une ligne suivante apparaît avec « ... » signifiant que l’instruction n’est pas finie. Vous pouvez alors continuer (n’oubliez pas l’indentation!).

1. Expliquez ce qu’ont fait nos instructions.
2. Quel est la variable utilisée ?

 

Tapez maintenant:

>>> ma_chaine="LaMache"
>>> for x in "LaMache":
...        print(x) faites 2 fois « entrée »


Tapez maintenant:
>>> ma_chaine="LaMache Lyon 8"
>>> for lettre in ma_chaine:
...        if lettre in "AEIOUYaeiouy":
...              print(lettre) faites 2 fois « entrée »

3. A partir des 3 exemples précédents (et de la documentation si besoin) expliquez le fonctionnement de la fonction « for »
4. Expliquez ce qu’ont fait nos instructions sur le dernier programme.
5. Modifiez le dernier programme pour que celui-ci affiche les consonnes et « - » pour les autres caractères

 
Remarque : avec la ligne « if lettre in "AEIOUYaeiouy": » on teste si la lettre est dans ce groupe de caractère. On pourrait aussi faire l’inverse : « if lettre not in "AEIOUYaeiouy": »

 

 

Préambule avant la suite : écrire nos programmes Python dans des fichiers

Ce préambule vous explique comment mettre votre code Python dans un fichier pour l'exécuter, ce qui sera plus pratique que de taper ligne à ligne dans l’interpréteur de commande, non ?

Ouvrez un éditeur standard sans mise en forme (sous Windows on vous conseille Notepad++ qui est normalement déjà installé).

Écrivez votre programme dans ce fichier, par exemple : print("Toto").

Enregistrez ce fichier sous le nom que vous voulez mais avec l’extension « .py » : par exemple « toto.py »

Maintenant pour exécuter votre programme, vous pouvez faire un double-clic sur le fichier « toto.py » mais la fenêtre s'ouvre et se referme très rapidement et vous n’avez rien le temps de voir ! Pour éviter cela, vous avez deux possibilités :

  • mettre le programme en pause : il faut rajouter 2 lignes dans le code :
    import os # On importe le module os
    print("Toto")
    os.system("pause")
  • exécuter le programme avec IDLE (solution la plus pratique) : faites un clic droit sur le fichier toto.py. Dans le menu contextuel, vous devriez voir apparaître un intitulé du type « edit with IDLE... ». Cliquez dessus. La fenêtre d'IDLE devrait alors s'afficher. Vous pouvez voir votre code, ainsi que plusieurs boutons. Cliquez sur le menu « run » puis « run module ». Le code du programme devrait alors se lancer. Cette fois, la fenêtre de console reste ouverte pour que vous puissiez voir le résultat ou les erreurs éventuelles.

 

Remarque : sous linux, se mettre dans le répertoire du fichier et tapez « python3 toto.py ».

 

ATTENTION: comme d'habitude il faut remplacer les espaces par des Tabulations

 

Tapez maintenant le code suivant:

fruits = ["orange", "banane", "pomme", "kiwi", "banane", "raisin"]
for x in fruits:
   if x == "banane":
        print(x)


Tapez maintenant le code suivant:

fruits = ["orange", "banane", "pomme", "kiwi", "banane", "raisin"]
for x in fruits:
    if x == "banane":
        print(x)
        break

 
1. Comparez les 2 résultats de ces 2 codes.
2. En déduire le rôle du mot clef « break » (qui fonctionne aussi avec la fonction « while ».

 

Petite application

Programme à faire: la variable « chaine » contient le texte «Tout est pour le mieux dans le meilleur des mondes possibles. Ou pas ! » .

1. On vous demande de faire un programme qui va compter le nombre de fois où il y a la lettre o (majuscule et minuscule) et qui affiche : « votre texte contient …. fois la lettre o ».
2. Modifiez ensuite votre programme pour qu’il compte le nombre de consonnes.

Faites validez vos résultats (vos programmes) par votre professeur.

 


Essai N° 3 : les fonctions

 

Nous avons utilisé pas mal de fonctions depuis le début de ce TP, des fonctions déjà construites en Python. Toutefois, vous savez aussi que, très souvent, un programmeur ou une programmeuse crée ses propres fonctions qui doivent être réutilisée.

 

On crée une fonction selon le schéma suivant :

def nom_de_la_fonction(parametre1, parametre2, parametre3, ….):

     # Bloc d'instructions

 

Cela ressemble étrangement aux fonctions dans C (Arduino), non ?

 

En détail cela donne :

  • def, mot-clé qui est l'abréviation de « define » (définir, en anglais) et qui constitue le prélude à toute construction de fonction.
  • Le nom de la fonction, qui se nomme exactement comme une variable. On choisit en général un nom « intelligent » qui renseigne sur le rôle de la fonction.
  • La liste des paramètres qui seront fournis lors d'un appel à la fonction. Les paramètres sont séparés par des virgules et la liste est encadrée par des parenthèses ouvrante et fermante.
  • Les deux points, encore et toujours, qui clôturent la ligne.

 

Tapez le code suivant:

def tableMult(nb):
     i = 0
     while i < 10: # Tant que i est strictement inférieure à 10,
          print(i + 1, "*", nb, "=", (i + 1) * nb)
          i += 1 # On incrémente i de 1 à chaque tour de boucle.

tableMult(5)

 
1. Quel est le nom de la fonction créée dans le code ?
2. Combien de paramètres sont nécessaire à cette fonction ?
3. Que fait cette fonction ?

 


Tapez maintenant la fonction suivante :

def tableMult(nb):
      if type(nb) != int:
           return -1
      i = 0
     while i < 10: # Tant que i est strictement inférieure à 10
             print(i + 1, "*", nb, "=", (i + 1) * nb)
             i += 1 # On incrémente i de 1 à chaque tour de boucle.
     return 1


Testez la fonction de cette manière :

ok = tableMult("toto")
if ok == -1:
       print("il y a eu un problème dans le type de variable")

 
Testez maintenant la fonction de cette manière :

ok = tableMult(7)
if ok == -1:
       print("il y a eu un problème dans le type de variable")

 

1. Expliquez ce qui a été changé dans la fonction.

2. Un nouvelle variable est apparue dans le programme. Donnez son nom et son rôle. Comment une valeur lui est-elle affectée ?

 

 
Essai N° 4 : les chaînes de caractères

Les chaînes de caractères (globalement toutes les variables) sont des objets. On va découvrir quelques « méthodes » associé à cette objet.

 

Tapez :

ma_chaine = "LAMACHE CE N’EST PAS QUE DE LA SALADE !"
toto=ma_chaine.lower()
print(toto)

 
1. Combien y-a-t-il de variables dans notre programme ?
2. Expliquez ce qu’ont fait nos instructions

 

Tapez maintenant:

ma_chaine = "LAMACHE, CE N’EST PAS QUE DE LA SALADE !"
toto=ma_chaine.lower()
print(toto)
print(ma_chaine)

3. La méthode « lower » modifie-t-elle la variable ?

 

Tapez maintenant:

ma_chaine1 = "LAMACHE"
ma_chaine2 = ", CE N’EST PAS QUE DE LA SALADE !"
ma_chaine= ma_chaine1 + ma_chaine2
toto=ma_chaine.lower()
print(toto)

 
1. Combien y-a-t-il de variables dans notre programme ?
2. Expliquez ce qu’ont fait nos instructions

 

Tapez :

chaine = str()

while chaine.lower() != "q":
     print("Tapez 'Q' pour quitter...")
     chaine = input()
print("Merci !")

 
1. Décrivez en détail le fonctionnement du programme
2. Aurait-on obtenu la même chose si la première ligne avait été : chaine = ""
3. Expliquez à quoi sert au final la première ligne

 


On va maintenant voir quelques exemples utilisant la méthode « format »

Tapez :

age = 21
prenom = "Paul"
nom = "Dupont"
chaine = "Je m'appelle {0} {1} ({3} {0} pour l'administration) et j'ai {2} ""ans.".format(prenom, nom, age, nom.upper())
print(chaine)

 

1. Combien y-a-t-il de variables dans notre programme ?
2. De quelles types sont ces variables
3. Décrivez en détail le fonctionnement du programme
4. Proposez une modification pour affichez d’abord le nom puis le prénom...
5. Proposez une solution sans la méthode « format »

 


Tapez maintenant:

ecole = """ {niveau} {nom} {code_postal} """.format(niveau="lycée", nom="Lamache", code_postal=69008)
print(ecole)

 
1. Combien y-a-t-il de variables dans notre programme ?
2. De quelles types sont ces variables ?
3. Décrivez en détail le fonctionnement du programme

 

Ballade dans une chaîne :

Tapez :

chaine = "Toto à la plage"
i = 0 # indice
while i < len(chaine): #len() indique la longueur de la chaine
     print(chaine[i]) # On affiche le caractère à chaque tour de boucle
     i += 1

  

1. Décrivez en détail ce que fait le programme
2. Proposez le même fonctionnement avec l’instruction « for ».
3. Comparez les 2 versions

 

Et pour terminer la notion de « liste »

Tapez :

ma_liste = ['cette', 'année', 2020, 'est']

i = 0 # Notre indice pour la boucle while
while i < len(ma_liste):
       print(i, ma_liste[i])
       i+= 1 # On incrémente i!

print('\n methode .insert')
ma_liste.insert(2, 'particulière .... voire pourrie, non?') # 2 = position in the list

print('résultat:')

i = 0 # Notre indice pour la boucle while
while i < len(ma_liste):
      print(i, ma_liste[i])
      i+= 1 # On incrémente i!

print('\n', ma_liste)

 
1. Combien y-a-t-il de variables dans notre programme ?
2. De quelles types sont ces variables ? (vous avez le droit de rajouter une ligne dans le programme pour trouver la réponse!)
3. Décrivez en détail le fonctionnement du programme
4. Modifier le programme pour que l’affichage final soit plus cohérent

 

Il existe beaucoup de possibilités (méthodes) sur les listes.

 

 
Petite application (par rapports à l’ensemble de connaissances de cette partie)

 

Programme à faire: affichage date de naissance avec fonction (et boucle while si nécessaire)

On demande à l’utilisateur de rentrer sa date de naissance, dans 3 variables (jour_N, mois_N et annee_N).

Ensuite la date sera affichée de la manière suivante : vous êtes né le « 12 décembre 1995 ».

Contraintes :

  • il doit y avoir une fonction affichage_N() qui va gérer l’affichage de la date de naissance
  • Si l’utilisateur rentre autre chose qu’un entier ou une valeur incohérente on lui redemande la valeur
  • le programme doit être optimisé

  

Faites valider votre programme par le professeur une fois que celui-ci fonctionne.

  

 

Partie N°2 : retour sur la carte Micro:bit

 

Programme N°1 :

1. A partir de la documentation Micro:bit, expliquez comment est réaliser la fonction calibrage du compas électronique de la carte.

 

2. Tapez :

from microbit import *

#Calibrage du compas
compass.calibrate()

while True:
   angle = compass.heading()
   display.scroll(angle)

 
3. Analyser le programme et vérifier approximativement la justesse de la boussole.

 

4. Modifier le programme pour afficher les lettres N, S, E et O:

  • N : entre 315 et 45°
  • E : entre 45 et 135°
  • S : entre 135 et 225°
  • O : entre 225 et 315°

 

 

5. Soyez plus précis et modifiez le programme pour qu’il indique N, NE (Nord Est), E, SE (Sud Est), S, SO (Sud Ouest), O, NO (Nord Ouest).

 


Programme N°2 : boussole plus réaliste

 

Maintenant vous allez modifier le programme précédant pour afficher une flèche indiquant le Nord, comme dans une vraie boussole (on gardera le partage du cercle en 8 morceaux)