Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sde2:laboratoare:02_microbit_fr [2021/03/17 11:59]
alexandra.state2607 [Structures de données]
sde2:laboratoare:02_microbit_fr [2021/03/24 10:43] (current)
ioana_maria.culic [TP 3 - Set up BBC micro:bit]
Line 1: Line 1:
-====== TP 3 - Set up BBC micro:bit ======+====== TP 03 - Set up BBC micro:bit ======
  
 ==== Support pour TP ==== ==== Support pour TP ====
Line 46: Line 46:
 </​code>​ </​code>​
  
-Pour accéder le simulateur ​si vous utilisez Linux ou MacOS, tapez la commande: +Pour accéder le simulateur ​ouvrir un browser et ouvrez''​http://​localhost:​8000/​editor.html''​
-<​code>​ +
-$ firefox ​editor.html +
-</​code>​+
  
-Si vous utilisez Windows, vous pouvez soit utiliser la commande précédente,​ soit aller dans le dossier "​PythonEditor"​ et cliquer sur "​editor.html"​. 
  
 Pour simuler le code, cliquez sur "​Sim"​. Testez l '** Exemple 1 ** du section suivante. Pour simuler le code, cliquez sur "​Sim"​. Testez l '** Exemple 1 ** du section suivante.
Line 408: Line 404:
  
 === La boucle "​for"​ === === La boucle "​for"​ ===
 +
 +Contrairement aux autres langages, qui ont la forme standard **for(...) { code }** pour la boucle //for//, Python élimine les parantheses qui marquent l'​itération d'une liste et utilise les **:** pour indiquer le début du bloc de code qui sera exécuté a l'​intérieur de la boucle, comme dans l'​exemple suivant:
 +<code python>
 +listaDeNume = ["​Ana",​ "​Maria",​ "​Ioana",​ "​Irina",​ "​Andreea",​ "​Cristina"​]
 + 
 +for nume in listaDeNume:​
 +    print (nume)
 +</​code>​
 +
 +En Python, l'​indice du pas ou l'on se trouve a chaque moment lorsqu'​on parcourt une séquence n'est pas visible. Cependant, il y a une méthode pour compter les pas: la fonction **enumerate**:​
 +
 +<code python>
 +cours= [ "​Analyse",​ "​SdE",​ "​ALF"​]
 + 
 +
 +for index, hobby in enumerate(cours):​
 +    print (index, hobby)
 + 
 +# Output:
 +0 Analyse
 +1 SdE
 +2 ALF
 +</​code>​
 +
 +Une autre fonctionnalité est l'​utilitaire **zip**, qui permet de parcourir 2 listes simultanément:​
 +
 +<code python>
 +lista1 = [ 3, 9, 17, 15, 19]
 +lista2 = [ 2, 4, 30, 24, 3]
 + 
 +for a, b in zip( lista1, lista2 ):
 +    if a > b:
 +        print (a)
 +    else:
 +        print (b)
 + 
 +# Output:
 + 
 +3
 +9
 +30
 +24
 +19
 +</​code>​
 +
 +Une autre particularité du langage Python est le fait qu'on peut appliquer la condition //"​else"//​ aussi pour la boucle //"​for"//​. Dans ce cas, la branche "​else"​ sera executée après la boucle "​for",​ si et seulement si à l'​intérieur de "​for"​ on n'a pas une déclaration de type "​break"​. ​
 +Par exemple:
 +
 +<code python>
 +listeAnimaux = [ "​loup",​ "​lapin",​ "​lion",​ "​ours"​ ]
 +
 +for i in listeAnimaux:​
 +   print (i)
 +   if i == "​lapin"​
 +     print ("Le lapin n'est pas sauvage"​)
 +     break
 +else:
 +   print ("Tous les animaux!"​)
 +   
 +# Output
 +loup
 +lapin
 +Le lapin n est pas sauvage
 +
 +#Si on execute la sequence suivante:
 +for i in listeAnimaux:​
 +   print (i)
 +   if i == "​lapin"​
 +     print ("Le lapin n'est pas sauvage"​)
 +else:
 +   print ("Tous les animaux!"​)
 +   
 +# Output
 +loup
 +lapin
 +Le lapin n est pas sauvage
 +lion
 +ours
 +Tous les animaux!
 +</​code>​
 +
 +=== La boucle "​while"​ ===
 +
 +<code python>
 +#Afficher les chiffres de 0 a 9
 +
 +count = 0
 + 
 +while count < 10:
 +    print (count)
 +    count = count + 1
 +</​code>​
 +
 +Comme pour la boucle "​for"​ on a aussi la possiblité d'​appliquer la condition "​else"​ a la boucle "​while"​. La différence est que le bloc "​else"​ sera exécuté chaque fois que la condition de la structure répétitive sera évaluée comme fausse:
 +
 +<code python>
 +print ("​Dévinez de numéro de l'​intervalle [ 1, 10 ]")
 + 
 +monNr = 7
 +votreNr = 0
 + 
 +while votreNr!= monNr:
 +    votreNr = int( input("​Choisissez. ") )
 +else:
 +    print ("​Félicitations!"​)
 +</​code>​
 +
 +=== Déclarations "​break"​ et "​continue"​ ===
 +
 +L'​instruction //"​break"//​ est utilisée pour sortir d'une structure répétitive,​ en étant une alternative pour la condition de sortie. Par exemple, on peut afficher les numéros de 0 a 9 de la facon suivante:
 +
 +<code python>
 +count = 0
 + 
 +while True:
 +    print (count)
 +    count = count + 1
 +    if count > 10:
 +        break
 +</​code>​
 +
 +La déclaration //"​continue"//​ est utilisée pour ignorer un bloc d'​instructions. Par exemple, on peut l'​utiliser pour afficher les nombres pairs de 0 a 20:
 +
 +<code python>
 +number = 0
 + 
 +while number < 21:
 +    if number % 2 == 1
 +        continue
 +    print (number)
 +</​code>​
 +
 +===== Fonctions =====
 +
 +=== Déclaration ===
 +
 +<code python>
 +def myFunction():​
 +   print ("​Welcome"​)
 +   
 +# ou
 +
 +def simpleSum( a, b ):
 +   ​return a + b
 +</​code>​
 +
 +=== Appel ===
 +<code python>
 +myFunction()
 +
 +# ou
 +
 +first = 1
 +second = 1
 +sum = simpleSum( first, second )
 +print (sum)
 +
 +print (simpleSum( first, second ))
 +</​code>​
 +
 +===== Classes et Objets =====
 +
 +On appelle **objet** une encapsulation de variables et fonctions dans une seule entité, tandis qu'une **classe** représente un modèle pour la création des objets. Donc, in objet prend ses données d'une classe.
 +
 +<code python>
 +# Classe simple
 +
 +class MaClasse:
 +   ​variable = "​Bonjour"​
 +   
 +   def maFonction(self):​
 +      print ("​Bonjour de l'​autre part!"​)
 +
 +
 +# Association classe objet
 +monObjet = MaClasse()
 +
 +
 +# Afficher le contenu de la variable de MaClasse
 +print (monObjet.variable)
 +
 +# Appeler la fonction maFonction, qui va afficher sur l'​écran le message "​Bonjour de  l'​autre part!"
 +monObjet.maFonction()
 +</​code>​
 +
 +<note important>​
 +En Python **self** représente l'​instance d'une classe, en étant identique a **this** de Java. En utilisant le mot-clé **self**, on peut accéder aux attributs et aux méthodes définis dans la classe.
 +</​note>​
 +
 +Le nombre d'​objets qu'on peut créer a partir d'une classe n'est pas limité, tous les objets en héritant touts les particularités de la classe (variables et fonctions). Cependant, chaque objet contient des copies indépendantes des variables définies a l'​interieur de la classe. Donc, si on crée un nouvel objet de la classe mere, on peut modifier son contenu sans affecter la definition initiale de la classe:
 +
 +<code python>
 +
 +class MaClasse:
 +   ​variable = "​Bonjour"​
 +   
 +   def maFonction(self):​
 +      print ("​Bonjour de l'​autre part!"​)
 +
 +monObjet1 = MaClasse()
 +monObjet2 = MaClasse()
 +
 +monObjet2.variable = "au revoir"​
 +
 +print (monObjet1.variable)
 +print (monObjet2.variable)
 +
 +#Output
 +bonjour
 +au revoir
 +</​code>​
 +
 +====== Fonctions mathématiques =====
 +
 +Pour pouvoir utiliser des fonctions qui exécutent des opérations mathématiques en Python, il faut importer et utiliser le module **math**.
 +
 +<code python>
 +import math
 +</​code>​
 +
 +
 +<note tip>
 +Chaque fonction de la bibliotheque math sera appelée de la façon suivante:
 +
 +<code python>
 +math.functionName( params )
 +</​code>​
 +
 +Quelques fonctions élémentaires de ce type sont: **floor**, **ceil**, **pow**, **sqrt**.
 +</​note>​
 +
 +<note tip>
 +Il y a aussi des fonctions prédéfinies qui ne doivent pas être importées d'un module auxiliaire. Elles sont appelées comme il suit:
 +
 +<code python>
 +functionName( params )
 +</​code>​
 +
 +Quelques exemple de cette catégires sont: **abs**, **round**, **sum**.
 +</​note>​
 +
 +<note important>​
 +Une liste complète des fonctions mathématiques de Python peut être trouvée [[https://​docs.python.org/​2/​library/​math.html|ici]].
 +</​note>​
 +
 +===== Lecture du clavier =====
 +Comme l'​entrée des données peut provenir du clavier en nombreuses situations, Python 3 fournit la fonction **input()**. Cette fonction peut recevoir aussi un parametre supplémentaire,​ qui sera le string affiché dans la ligne de commande au moment de la lecture des données nécessaires:​
 +
 +<code python>
 +name = input("​Quel est votre nom? ")
 +print("​Bienvenue,​ " + name + "​!"​)
 +</​code>​
 +
 +<code bash>
 +# Output dans la ligne de commande
 +Quel est votre nom? "​Ana"​
 +Bienvenue, Ana!
 +</​code>​
 +
 +<note important>​
 +Exécuter l'​exemple ci-dessus sur BBC micro:bit. Connectez la plaque et ouvrir l'​éditeur du code. Connecter le micro:bit et puis appuyez //Flash//. Après quelques secondes vous devez ouvrir //Open Serial// clique sur l'​icône. Vous avez avoir un output similaire avec celui ci-dessous. Maintenait, vous devez taper l'​input. Pour revenir au vôtre code appuyez //Close Serial//.
 +
 +{{ :​sde2:​laboratoare:​open_serial.png?​450 |}}
 +</​note>​
 +
 +===== Exceptions en Python =====
 +
 +En Python, on a 2 types d'​erreurs:​ //erreurs de syntaxe// et //​exceptions//​.
 +
 +Les **erreurs de syntaxe**, connues aussi sur le nom d'​erreurs d'​analyse (parsing error) sont les plus communes:
 +
 +<code python>
 +>>>​ while True print('​Hello world'​)
 +  File "<​stdin>",​ line 1
 +    while True print('​Hello world'​)
 +                   ^
 +SyntaxError:​ invalid syntax
 +</​code>​
 +
 +Les **exceptions** sont détectées au moment de l'​exécution:​
 +
 +<code python>
 +>>>​ 10 * (1/0)
 +Traceback (most recent call last):
 +  File "<​stdin>",​ line 1, in <​module>​
 +ZeroDivisionError:​ division by zero
 +</​code>​
 +
 +=== Gestion des exceptions ===
 +
 +Pour gérer les exceptions en Python, on utilise le bloc **try - except**, comme dans l'​exemple suivant:
 +
 +<code python>
 +while True:
 +    try:
 +        x = int(input("​Please enter a number: "))
 +        break
 +    except ValueError:
 +        print("​Oops! ​ That was no valid number. ​ Try again..."​)
 +</​code>​
 +
  
 ===== Exercices ===== ===== Exercices =====
  
-   ​- ​Écrivez un programme qui en appuyant simultanément les boutons A et Bva afficher ​une image qui représente ​"OUI"​. ​Si pas de boutons est appuyé sur l'​écran va affiche ​une image qui représente ​"NON" "NON". Voir les image sur [[https://microbit-micropython.readthedocs.io/en/v2-docs/tutorials/images.html|documentation]]. +   ​- ​Créez 3 variables de types différentscomme il suit: **(0.5p)** 
-   ​-Modifier l’exercice antérieur tel que en appuyant le bouton A va afficher sur l’écran la lettre ​"A" et en appuyant le bouton B va afficher sur l’écran la lettre ​"B". +     ​- ​une variable "​int", ​qui va recevoir la valeur 80 
-   -Écrivez ​un programme qui affiche ​le nombre actuel de secousses ​sur lécran. Lorsque ​le micro-bit enregistre 9 secousses, une image apparaît sur l’affichage+     - une variable ​"float", ayant la valeur 20.
-   ​-Créez ​un programme qui enregistre le nombre ​des inclinaisons à gauche et à droiteChaque fois que le microbit est pointé ​dans l’un des deux côtésil doit  afficher sur l’écran ​le nombre actuel ​d’inclinaisons de ce côté//Hint//: utilisez ​la méthode [[https://​microbit-micropython.readthedocs.io/en/v1.0.1/​microbit.html#​microbit.sleep|sleep]] +     ​- ​une variable ​"string", qui va retenir la chaîne ​"python" 
-   -Écrivez ​un programme qui en atteignant ​le logo (le capteur tactile) va faire toggle entre une image avec un diamant ​et une image avec un petit diamant+   - En utilisant la fonction ​[[https://docs.python.org/2/library/functions.html#type|type]], déterminez le types des variables suivantes: **(0.5p)** 
-   -Écrivez ​un programme qui, lors de l’enregistrement ​d’un son, affichera ​une image sur lécran ​et parlera avec la parole "​ON"​. Si aucun son n’est pas enregistrél’affichage reste vide. Affichez ​le niveau sonore pour une action ​votre choix (appui sur un boutonlogo tactile, inclinaison,​ etc.) +     ​var1 = 80 
-   ​-Changer le code de [[https://​ocw.cs.pub.ro/​courses/​sde/​laboratoare/​02_microbit_ro?&#​senzorul_de_temperatura_si_de_lumina|exemple 7]] pour que le micro:bit détecte ​la lumière ​pour utiliser ​le haut-parleur ​pour lire de la musique JUMP_UP, et lorsque la lumière est éteinte ​pour lire de la musique JUMP_DOWNPour accéder ​à la bibliothèque "​musique",​ voir la [[https://microbit-micropython.readthedocs.io/​en/v2-docs/tutorials/music.html|documentation]].+     - var2 = 20.2 
 +     - var3 = "microbit
 +   ​- ​Ecrivez ​un programme qui recoit comme parametres de la ligne de commande 4 nombres (a,b,c,d) et affiche sur l'écran le résultat de l'​opération **a+b*c+d****(1p)** 
 +   - Créez ​une liste avec les noms des camarades de classeLes noms peuvent ne pas etre distincts. Résolvez les demandes suivantes**(2p)** 
 +     - Copier la liste intaille dans une autre liste appelle copyList et trier lui dans l ordre alphabétique. 
 +     - Déterminez le numéro d'​occurrences du chaque nom en utilisant une liste auxiliaire, qui contient ​des éléments distincts. 
 +     - Déterminez le nomqui a le numéro maxime ​d'​occurrences dans la liste initiale et le nom avec le numéro minime d'​occurrence (sil y a plusieurs éléments qui respect la condition toutes vont être affichées) 
 +     - Inversez ​la liste de copyList et supprimez le dernier élément de la liste initiale. 
 +   Créez une base de données d'un magasin avec des appareils électroménagers à l'aide du dictionnaireAjoutez des fonctionnalités:​ lorsqu'​un produit est lu à partir du clavier, son prix soit affichéUne erreur s'​affichera si le produit n'​existe pas "​Erreur"​ et les produits seront recherchés jusqu'​à ce que le texte "​stop"​ soit entré
 +   ​- ​Ecrivez ​un programme qui affichera ​le résultat retourne par la fonction // digitize ​(n//. Cette fonction ​va recevoir ​un int comme paramètre ​et va retourner ​une liste de chiffres du nombre dans l'​ordre inverse** (1p) ** Exemple: 348597 => [7,​9,​5,​8,​4,​3] 
 +   ​- ​Créez une classe Capteurs utilisée pour stocker les valeurs des capteurs suivants: température,​ lumière, humidité. Pour chaque capteur, vous pouvez lire et modifier les valeurs par des appels de fonction. ** (1p) ** 
 +   - Créez ​un programme qui, en utilisant la classe définie ci-dessus, stocker des valeurs provenant du différent ensembles ​de capteurs pour les suivantes chambres ​d'une maison et les affiche à l'écranla cuisine, le hall, la chambre ​couchéla salle a mangéLe programme effectue les opérations en recevant les commandes de la console comme suit: ** (2p**  ​ 
 +     * ''​insert <​chambre>​ <​capteru>​ <​valeur>'' ​où ''<​chambre>''​ , ''<​capteur>''​ et ''<​valeur>''​ vont être remplacés avec un de les 3 capteurs et une valeur - insérer une nouvelle valeur ​pour le capteur respectif 
 +     * ''​delete <​chambre>​ <​chambre>​ <​capteru>​ <​valeur>''​ - supprimer ​la valeur de ce capteur, la valeur après suppression sera 0 
 +     * ''​print <​chambre><​sensor>''​ - afficher la valeur ​pour le capteur de la chambre précise 
 +     * ''​print <​chambre>'' ​afficher tous capteurs el les valerus correspondantes ​pour la chambre spécifiée 
 +     * ''​add_room <​chambre>''​ - ajoute un nouvel ensemble de capteurs ​pour une nouvelle chambre 
 +     * ''​del_room <​chambre>''​ - efface l'​ensmeble ​de capteurs pour une chambre 
 +   ​S’il va être introduit une autre commande, le programme lèvera ​ une exception. 
 +    
 +== Bonus == 
 +  - Modifiez les programmes précédents pour afficher les valeurs sur micro: bit, pas sur la console. 
 +  - Créez un programme qui allume tour à tour chaque LED du micro:​bit. 
 +  - Créez un programme qui lit la température ambiante à l'aide du capteur existant sur micro:bit et l'​affiche à l'aide des LED. 
 + 
 + 
 +==== ==== 
 + 
 +[[https://github.com/UPB-FILS-SdE2/Solutions/tree/​main/​TP3|Solutions]] 
 + 
 + 
 + 
 + 
sde2/laboratoare/02_microbit_fr.1615975195.txt.gz · Last modified: 2021/03/17 11:59 by alexandra.state2607
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0