Les exercices Python
Introduction
Le cours IoT utilise le langage MicroPython, une version de Python restreinte, bas\xE9 sur Python-3.5 et adapt\xE9 \xE0 des microcontr\xF4leurs. Le cours suppose une connaissance de programmation en g\xE9n\xE9ral et une connaissance du langage de programmation Python en particulier.
Une carte CPU avec le processeur ESP32-WROVER-B est utilis\xE9 sur laquelle le portage de MicroPython pour le chip ESP32 est install\xE9.
Si la connaissance Python est insuffisante, il sera n\xE9cessaire de l'am\xE9liorer en \xE9tudiant p.e.
le tutoriel Python. La
documentation de MicroPython d\xE9crit les diff\xE9rences enter la version Python standard (CPython) et MicroPython ainsi que les modules mise \xE0 disposition pour acc\xE9der \xE0 la fonctionnalit\xE9 sp\xE9cifique de l'ESP32 et des pilotes pour un nombre de capteurs disponible pour le ESP32.
Les exercices Python purs
Les premi\xE8res exercices vous permettent de v\xE9rifier vos comp\xE9tences en Python. Ils n\xE9cessitent aucun hardware \xE0 part le processeur avec l'interpr\xE9teur Python et les solutions peuvent \xEAtre ex\xE9cut\xE9 sur un PC aussi bien que sur l'ESP32.
Exercice 1: Utilisation du REPL (Read, Evaluate,Print Loop)
Connecter l'ESP32 \xE0 minicom ou thonny. Vous pouvez essayer cet exercice aussi avec CPython sur PC.
Apr\xE8s connexion on obtient le prompt de MicroPython
En utilisant REPL:
- Imprimer "Hello World!"
- Lire un texte avec input() et l'imprimer
- Calculer
- Calculer sin(30\xB0)
S'il y a des erreurs, comment les corriger ? Est-ce que le r\xE9sultat est correct ?
- Finalement convertir "Hello World!" en un script et l'ex\xE9cuter.
Exercice 2: Un Calculateur simple
\xC9crire un script qui attribue les valeurs 5 et 3 aux variables a et b respectivement.
Imprimer les r\xE9sultats des calculs :
Imprimer les r\xE9sultats avec un format d\xE9cimal et un format flottant.
Am\xE9liorer le programme en demandant l'utilisateur d'entrer un op\xE9rant suivi d'un op\xE9rateur suivi du deuxi\xE8me op\xE9rant, s\xE9par\xE9 par des espaces. Voil\xE0 ce qu'on doit voir sur l'\xE9cran :
Si l'utilisateur se trompe et il entre une valeur fausse (p.e. un op\xE9rant non num\xE9rique) ceci peut arriver :
Est-ce que vous pouvez capturer cette erreur et simplement re-demander d'entrer le calcul \xE0 ex\xE9cuter ?
Exercice suppl\xE9mentaire plus difficile :
Il est assez facile d'\xE9crire un analyseur du texte entr\xE9 par l'utilisateur si op\xE9rant et op\xE9rateur sont s\xE9par\xE9 par une espace (voir la m\xE9thode "split" de l'objet "string"). Il est beaucoup plus difficile si on permet d'omettre ces espaces. Est-ce que vous pouvez \xE9crire un analyseur pour ce cas ?
Indice : Une solution tr\xE8s \xE9l\xE9gante peut \xEAtre trouv\xE9 avec les expressions r\xE9guli\xE8res et Python fourni un module pour l'implementation:
https://docs.micropython.org/en/latest/library/ure.html
Une valeur flottante est d\xE9fini comme suit :
- z\xE9ro 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\xE9ro ou un "." suivi par z\xE9ro ou plus de digits
- suivi par z\xE9ro ou plus d'espaces
Essayer l'analyseur avec ces textes comme entr\xE9e:
| 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\xE9rants et op\xE9rateur. Dans votre programme v\xE9rifier laquelle des deux nombres est plus grande et imprimer le r\xE9sultat:
Exercice 3: Les conditions
Comme en exercice 2 d\xE9buter avec deux valeurs 5 et 7. Dans votre programme v\xE9rifier laquelle des deux nombres est plus grande et imprimer le r\xE9sultat. Am\xE9liorer le programme en demandant l'utilisateur d'entrer les deux nombres. V\xE9rifier que le deux nombres sont des valeurs flottantes valables et capturer d'\xE9ventuelles erreurs. Voil\xE0 une copie d'\xE9cran d'utilisation du programme :
Exercice 4 : La s\xE9rie Fibonacci
La s\xE9rie Fibonnacci est d\xE9fini comme suite :
F(0) = 0; F(1) = 1
F(n) = F(n-1) + F(n-2)
- Calculer et imprimer les nombres Fibonacci jusqu'\xE0 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 \xE0 calculer
Exercice 5 : Un peu de Mathematique
\xC9crire un script qui demande \xE0 l'utilisateur un angle en d\xE9gr\xE9es. Calculer le sinus de cet angle.
Exercice 6 : Les classes Python
\xC9crire une classe
MathSeries qui calcule des s\xE9ries de nombres. La classe doit contenir des m\xE9thodes qui calcule les s\xE9ries suivantes :
Rajouter ces s\xE9ries \xE0 la classe et essayer. \xC9crire un script pour tester toutes les m\xE9thodes.
Pour avoir acc\xE8s \xE0 la classe sur l'ESP32 on doit d'abord t\xE9l\xE9charger le module qui impl\xE9mente la classe "MathSeries dans le syst\xE8me de fichier de l'ESP32. Cr\xE9er un classeur
lib est transf\xE9rer MathSeries dedans.
ampy mkdir /lib
ampy put mathSeries.py /lib/mathSeries.py
Maintenant on peut cr\xE9er une instance de la classe MathSeries:
series = mathSeries.MathSeries()
Si on tourne le programme sur le PC vous pouvez aussi tracer les s\xE9ries. Si vous ne savez pas comment tracer une fonction en Python, vous trouvez toutes les informations n\xE9cessaire ici :
https://matplotlib.org/3.2.1/index.html
-- %USERSIG{UliRaich - 2021-06-19}%