Tags:
create new tag
view all tags

Les exercices Python

Introduction

Le cours IoT utilise le langage MicroPython, une version de Python restreinte, basé sur Python-3.5 et adapté à des microcontrôleurs. Le cours suppose une connaissance de programmation en général et une connaissance du langage de programmation Python en particulier.

Une carte CPU avec le processeur ESP32-WROVER-B est utilisé sur laquelle le portage de MicroPython pour le chip ESP32 est installé.

Si la connaissance Python est insuffisante, il sera nécessaire de l'améliorer en étudiant p.e. le tutoriel Python. La documentation de MicroPython décrit les différences enter la version Python standard (CPython) et MicroPython ainsi que les modules mise à disposition pour accéder à la fonctionnalité spécifique de l'ESP32 et des pilotes pour un nombre de capteurs disponible pour le ESP32.

Les exercices Python purs

Les premières exercices vous permettent de vérifier vos compétences en Python. Ils nécessitent aucun hardware à part le processeur avec l'interpréteur Python et les solutions peuvent être exécuté sur un PC aussi bien que sur l'ESP32.

Exercice 1: Utilisation du REPL (Read, Evaluate,Print Loop)

Connecter l'ESP32 à minicom ou thonny. Vous pouvez essayer cet exercice aussi avec CPython sur PC.

Après connexion on obtient le prompt de MicroPython

mp_prompt.png

En utilisant REPL:

  • Imprimer "Hello World!"
  • Lire un texte avec input() et l'imprimer
  • Calculer
    calculations.png
  • Calculer sin(30°)
    S'il y a des erreurs, comment les corriger ? Est-ce que le résultat est correct ?
  • Finalement convertir "Hello World!" en un script et l'exécuter.

Exercice 2: Un Calculateur simple

Écrire un script qui attribue les valeurs 5 et 3 aux variables a et b respectivement.

Imprimer les résultats des calculs :

  • a+b
  • a-b
  • a*b
  • a/b
Imprimer les résultats avec un format décimal et un format flottant.

Améliorer le programme en demandant l'utilisateur d'entrer un opérant suivi d'un opérateur suivi du deuxième opérant, séparé par des espaces. Voilà ce qu'on doit voir sur l'écran :

calcOk.png

Si l'utilisateur se trompe et il entre une valeur fausse (p.e. un opérant non numérique) ceci peut arriver :

invalidFloat.png

Est-ce que vous pouvez capturer cette erreur et simplement re-demander d'entrer le calcul à exécuter ?

Exercice supplémentaire plus difficile :

Il est assez facile d'écrire un analyseur du texte entré par l'utilisateur si opérant et opérateur sont séparé par une espace (voir la méthode "split" de l'objet "string"). Il est beaucoup plus difficile si on permet d'omettre ces espaces. Est-ce que vous pouvez écrire un analyseur pour ce cas ?

Indice : Une solution très élégante peut être trouvé avec les expressions régulières et Python fourni un module pour l'implementation:

https://docs.micropython.org/en/latest/library/ure.html

Une valeur flottante est défini comme suit :

  • zéro ou plus d'espaces
  • suivi par un "+" ou un "-"
  • suivi par
    • un "." suivi par au moins un digit
  • ou
    • au moins un digit suivi par zéro ou un "." suivi par zéro ou plus de digits
  • suivi par zéro ou plus d'espaces
Essayer l'analyseur avec ces textes comme entrée:

Input ok or not ok
5.3+4.7 ok
5.3++4.7 not ok
5..3 + 4.7 not ok
.3+.7 ok
5.3+4b7 not ok
empty string not ok
5.3+. not ok
5.3+ not ok
-1--1 ok
--1--1 not ok
Essayer aussi plusieurs espaces entre opérants et opérateur. Dans votre programme vérifier laquelle des deux nombres est plus grande et imprimer le résultat:

Exercice 3: Les conditions

Comme en exercice 2 débuter avec deux valeurs 5 et 7. Dans votre programme vérifier laquelle des deux nombres est plus grande et imprimer le résultat. Améliorer le programme en demandant l'utilisateur d'entrer les deux nombres. Vérifier que le deux nombres sont des valeurs flottantes valables et capturer d'éventuelles erreurs. Voilà une copie d'écran d'utilisation du programme :

conditions.png

Exercice 4 : La série Fibonacci

La série Fibonnacci est défini comme suite :

F(0) = 0; F(1) = 1

F(n) = F(n-1) + F(n-2)

  • Calculer et imprimer les nombres Fibonacci jusqu'à F(n). Essayer le programme avec n=0, n=1, n=2, n=3, n=20
  • Demander l'utilisateur d'entrer la valeur n
  • Demander l'utilisateur la valeur F(n) maximum à calculer

Exercice 5 : Un peu de Mathematique

Écrire un script qui demande à l'utilisateur un angle en dégrées. Calculer le sinus de cet angle.

Exercice 6 : Les classes Python

Écrire une classe MathSeries qui calcule des séries de nombres. La classe doit contenir des méthodes qui calcule les séries suivantes :

  • Les nombres Fibonacci jusqu'à F(n). n est passé comme paramètre dans la méthode
  • Les nombres Fibonacci plus petits que max. max est passé comme paramètre dans la méthode
  • Les nombres primaires jusqu'à max
  • Factoriel :
    factorial.png
  • La série de nombres géométriques :
    geometric.png
  • La série de nombres harmoniques :
    harmonic.png
  • Est-ce que vous reconnaissez les valeurs qui sont approximé par les séries suivantes?
    ln2.png pi.png wallis1.png e.png

Rajouter ces séries à la classe et essayer. Écrire un script pour tester toutes les méthodes.

Pour avoir accès à la classe sur l'ESP32 on doit d'abord télécharger le module qui implémente la classe "MathSeries dans le système de fichier de l'ESP32. Créer un classeur lib est transférer MathSeries dedans.

ampy mkdir /lib

ampy put mathSeries.py /lib/mathSeries.py

Maintenant on peut créer une instance de la classe MathSeries:

series = mathSeries.MathSeries()

Si on tourne le programme sur le PC vous pouvez aussi tracer les séries. Si vous ne savez pas comment tracer une fonction en Python, vous trouvez toutes les informations nécessaire ici :

https://matplotlib.org/3.2.1/index.html

-- Uli Raich - 2021-06-19

Comments

Topic attachments
I Attachment History Action Size Date Who Comment
PNGpng calcOk.png r1 manage 21.7 K 2021-06-25 - 19:23 UliRaich  
PNGpng calculations.png r1 manage 2.3 K 2021-06-25 - 19:23 UliRaich  
PNGpng conditions.png r1 manage 28.8 K 2021-06-26 - 10:24 UliRaich  
PNGpng e.png r1 manage 1.9 K 2021-06-26 - 10:24 UliRaich  
PNGpng factorial.png r1 manage 2.8 K 2021-06-26 - 10:24 UliRaich  
PNGpng geometric.png r1 manage 3.9 K 2021-06-26 - 10:24 UliRaich  
PNGpng harmonic.png r1 manage 1.6 K 2021-06-26 - 10:24 UliRaich  
PNGpng invalidFloat.png r1 manage 32.0 K 2021-06-25 - 19:23 UliRaich  
PNGpng ln2.png r1 manage 2.0 K 2021-06-26 - 10:24 UliRaich  
PNGpng mp_prompt.png r1 manage 15.9 K 2021-06-25 - 19:23 UliRaich  
PNGpng pi.png r1 manage 2.7 K 2021-06-26 - 10:24 UliRaich  
PNGpng wallis1.png r1 manage 14.8 K 2021-06-26 - 10:24 UliRaich  
Edit | Attach | Watch | Print version | History: r4 < r3 < r2 < r1 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r4 - 2021-06-27 - UliRaich
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2022 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback