ExercicesPython

Page Actions

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

mp_prompt.png

En utilisant REPL:
  • Imprimer "Hello World!"
  • Lire un texte avec input() et l'imprimer
  • Calculer
    calculations.png
  • 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 :
  • a+b
  • a-b
  • a*b
  • a/b
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 :

calcOk.png

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

invalidFloat.png

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 :

conditions.png

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 :
  • Les nombres Fibonacci jusqu'\xE0 F(n). n est pass\xE9 comme param\xE8tre dans la m\xE9thode
  • Les nombres Fibonacci plus petits que max. max est pass\xE9 comme param\xE8tre dans la m\xE9thode
  • Les nombres primaires jusqu'\xE0 max
  • Factoriel :
    factorial.png
  • La s\xE9rie de nombres g\xE9om\xE9triques :
    geometric.png
  • La s\xE9rie de nombres harmoniques :
    harmonic.png
  • Est-ce que vous reconnaissez les valeurs qui sont approxim\xE9 par les s\xE9ries suivantes?
    ln2.png pi.png wallis1.png e.png

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}%

Comments

 
I Attachment Action SizeSorted descending Date Who Comment
invalidFloat.pngpng invalidFloat.png manage 31 K 25 Jun 2021 - 19:23 UnknownUser  
conditions.pngpng conditions.png manage 28 K 26 Jun 2021 - 10:24 UnknownUser  
calcOk.pngpng calcOk.png manage 21 K 25 Jun 2021 - 19:23 UnknownUser  
mp_prompt.pngpng mp_prompt.png manage 15 K 25 Jun 2021 - 19:23 UnknownUser  
wallis1.pngpng wallis1.png manage 14 K 26 Jun 2021 - 10:24 UnknownUser  
geometric.pngpng geometric.png manage 3 K 26 Jun 2021 - 10:24 UnknownUser  
calculations.pngpng calculations.png manage 2 K 25 Jun 2021 - 19:23 UnknownUser  
factorial.pngpng factorial.png manage 2 K 26 Jun 2021 - 10:24 UnknownUser  
pi.pngpng pi.png manage 2 K 26 Jun 2021 - 10:24 UnknownUser  
e.pngpng e.png manage 1 K 26 Jun 2021 - 10:24 UnknownUser  
harmonic.pngpng harmonic.png manage 1 K 26 Jun 2021 - 10:24 UnknownUser  
ln2.pngpng ln2.png manage 1 K 26 Jun 2021 - 10:24 UnknownUser  
Topic revision: r4 - 27 Jun 2021, UliRaich