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

-- 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: r3 - 2021-06-26 - UliRaich
 
  • Edit
  • Attach
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback