Pendant l’exécution d’un programme, les données qu’il manipule sont stockées en mémoire. Les variables permettent de manipuler ces données sans se préoccuper de leur position. Pour cela, il suffit de leur donner un nom (les déclarer).
En Python, la simple déclaration d’une variable ne suffit pas à la créer. Après avoir choisi son nom, il est nécessaire de lui affecter une valeur initiale (initialisation).
position_x = 10 # variable de type entier pi = 1.14159 # variable de type réel hello = "Hello world !" # variable de type chaîne de caractère
Différents types d’information (entier (int), réel (float), chaîne de caractère (string), etc.) peuvent être placés dans une variable.
En Python, il n’est pas nécessaire de préciser le type d’une variable. Python est dit typé dynamiquement.
Le contenu d’une variable var1 peut être placé dans var2.
var2 = var1
Pour cela, on utilise les fonctions suivantes :
type(nom_variable) print(nom_variable)
var1 = 5 var2 = 1 var3 = var1 + var2 # résultat var3 = 6
var1 = 5.2 var2 = 1.4 var3 = var1 + var2 # résultat var3 = 6.6
On peut réinitialiser une variable en l’affectant d’une valeur vide avec le mot None.
En programmation, le texte s’appelle chaîne de caractères. Pour créer une chaîne, il faut encadrer le texte de guillemets ou d’apostrophes. Une chaîne de caractère est une collection de caractères indexés, le premier élément de la chaîne est repéré par la valeur 0.
Python ne fait pas la différence entre les apostrophes simples (‘) et doubles (“).
Exemple
maChaine = "Ceci est une chaîne de caractères"
Exemple
monscore = 1000 mespoints = "Vous avez obtenu %s points" print(mespoints % monscore) texte1 = "Hello" texte2 = " World" texte3 = texte1 + texte2 # résultat texte3 = "Hello World" texte3 = texte2*3 # résultat texte3 = " World World World texte1[0] # correspond à 'H'
Les listes sont des collections d’entiers, réels, caractères, chaînes, etc.
une_liste = ["Journal", 9, 2.714, "pi"] print(une_liste) # résultat : ['Journal', 9, 2.714, 'pi'] len(une_liste) # résultat 4 une_liste.append("fin") # résultat : ['Journal', 9, 2.714, 'pi', 'fin'] del(une_liste[2]) # résultat : ['Journal', 9, 'pi', 'fin']
Un tuple, ou n-uplet est une liste de constantes.
tp = (1,2,4,8) print(tp[2]) # Résultat : 4
Dans les dictionnaires chaque élément est indexé par un élément choisi parmi les trois types simples. Il s’agit d’une sorte de matrice, 2 x n d’éléments simples, dont ceux de la première colonne réalisent l’index ou la clé d’accès au second.
dic = {"computer":"ordinateur"} dic["mouse"] = "souris" dic[2] = "two" print(dic) # résultat : {'computer': 'ordinateur', 'mouse': 'souris', 2: 'two'} del(dic["mouse"]) # résultat : {'computer': 'ordinateur', 2: 'two'}
Les instructions de contrôle utilisent des opérateurs logiques et de comparaison.
Les opérateurs de comparaison ==, >, <, >=, ⇐, != permettent de réaliser les conditions placées dans les structures de contrôle.
Ne pas confondre l’opérateur d’égalité == avec l’opérateur d’affectation =
Exemple
a >=5 # se traduit par a supérieur ou égale à 5
Les opérateurs not, or et and sont utilisés pour combiner des conditions.
Exemple
a >=5 and a<=10 # à placer dans un test comme dans l'exemple ci-dessous
Ce type d’instruction permet au code de suivre différents chemins.
Syntaxe
if condition: bloc de code 1 # si la condition est vraie alors on exécute le bloc de code 1 else: bloc de code 2 # sinon on exécute le bloc de code 2
Remarque : On dit du code décalé vers la droite qu’il est indenté. En Python l’indentation est fondamentale. Elle fait intégralement partie de la syntaxe du langage.
Exemple
a=5 if a<10: print("C'est vrai") else: print("c'est faux")
On utilise elif lorsqu’il est nécessaire d’enchaîner plusieurs tests.
Syntaxe
if condition 1: bloc de code 1 # si la condition 1 est vraie alors on exécute le bloc de code 1 elif condition 2: bloc de code 2 # sinon si la condition 2 est vraie alors on exécute le bloc de code 2 else: bloc de code 3 # sinon on exécute le bloc de code 3
Remarque : elif est une concaténation de else if. On peut utiliser autant de elif que nécessaire.
Exemple
a=5 if a<0: print("a est positif est inférieur à 5") elif a >=5 and a<=10: print("a appartient à [5,10]") else: print("a est supérieur à 10") # Résultat : a appartient à [5,10]
=== 3.2 d’instruction permet au programme de répéter, de compter ou d’accumuler avec très peu d’instruction.
Syntaxe
while condition: bloc de code # le bloc de code est exécuté tant que la condition est vraie
Attention : afin que la boucle puisse s’interrompre, il faut veiller à faire évoluer dans le bloc au moins une des variables intervenant dans la condition.
Exemple
compteur = 0 # Initialisation de la variable utilisée dans la boucle while compteur < 10: print(compteur) # Résultat : 0 1 2 3 4 5 6 7 8 9 compteur = compteur+1
L’instruction for … in est une autre forme de boucle. Elle permet d’itérer sur une collection de données, telle une liste ou un dictionnaire.
Syntaxe
for nom_variable in collection: bloc de code
Exemple
ma_liste = ["chien", "chat", "souris", "cheval"] for x in ma_liste: print(x) # A chaque itération x prend la valeur pointée dans la liste, # la variable de boucle est gérée automatiquement. # Résultat : chien chat souris cheval
En Python comme dans tous les langages de programmation, il est possible de découper le programme en blocs fonctionnels, appelés “fonctions” qui peuvent être appelées partout dans le code.
def nomfonction(liste d'arguments) # Déclaration bloc de code return valeur nomfonction(valeurs) # Appel
Exemple
def cube(x): # Déclaration return x*x*x cube(2) # Appel, résultat : 8
Les arguments passés dans les fonctions sont des variables locales. Elles n’existent qu’à l’intérieur de la fonction contrairement aux variables globales déclarées dans le programme principal.
Mot-clé : constructeur, attribut, méthode, propriété
Syntaxe
class nomClass: def __Init__(self): # constructeur pass # Évite de compléter la méthode def nomMethode1(self): # méthode pass
Exemple
# Définition de la classe Elève class Eleve: # Attribut de classe ou attribut statique _nb = 16 # Exemple d'utilisation, comptabilise le nombre maximum d'élèves # Le constructeur définit et initialise les attributs de l'objet def __init__(self, nom, prenom, age): self.__nom = nom # par la présence des "__" les attributs # deviennent privés self.__prenom = prenom self.__age = age Eleve_nb -=1 # décrémentation de _nb lors de la création d'un objet # Respect du principe d'encapsulation : accès aux attributs avec des propriétés def Nom(self): return self.__nom def Prenom(self): return self.__prenom def Age(self): return self.__age # Méthodes def modifieAge(self,newAge): self.__age = newAge # Redéfinition de la méthode str héritée de object def __str__(self): return "Elève : " + self.__prenom + " " + self.__nom + " " + str(self.__age) + " " + "ans" # Accès indirect par les méthodes Age = property(Age,modifieAge) # Création des élèves eleve1 = Eleve("Dupond", "Thomas",16) eleve2 = Eleve("Durant","Benoît",17) print(Eleve._nb) # Résultat = 14 # Exécution des méthodes sur les objets Elève print(eleve1) # Appel de la méthode str print(eleve2.Nom()) # Accès au champ privé __nom avec la propriété Nom print(eleve2) # Première manière de modifier l'âge de eleve2 eleve2.modifieAge(18) print(eleve2) # Deuxième manière de modifier l'âge de eleve 2 en recourant à property eleve2.Age = 17 print(eleve2)
Le mot-clé self est indispensable dès qu’il s’agit de faire référence à l’objet lui-même. Toutes les méthodes portant sur l’objet se doivent de le recevoir en paramètre.
La manière privilégiée pour permettre à deux classes de communiquer par envoi de messages consiste à rajouter aux attributs primitifs de la première un attribut référent de la seconde. La classe peut donc, tout à la fois, contenir des attributs et se constituer en nouveau type d’attribut. C’est grâce à se mécanisme de typage particulier que, partout dans son code, la première classe pourra faire appel aux méthodes disponibles de la seconde. Bersini
Exemple 1: Association unidirectionnelle * Diagramme de classe
Lecture du diagramme : chaque objet O1 est associé à un objet O2. La réciproque n’est pas vraie
class O2: def jeTravaillePourO2(self,x): print(x) class O1: __lienO2 = O2() # lien d'association de O1 vers O2 def jeTravaillePourO1(self,val): self.__lienO2.jeTravaillePourO2(val) unO1 = O1() unO1.jeTravaillePourO1(5)
Exemple 2: Association bidirectionnelle
Lecture du diagramme : chaque oeuvre est associée à un ensemble d’exemplaires et chaque exemplaire est associé à une et une seule oeuvre.
class nomClasse(nomClasseMère) # nomClasse hérite de nomClasseMère pass # Évite de compléter la classe
L’appel de la méthode, redéfinie en fonction de la nature de la sous-classe sur laquelle cette méthode s’exerce s’appelle polymorphisme.
Exemple
# Dans l'exemple défini plus haut # Redéfinition de la méthode str héritée de object def __str__(self): return "Elève : " + self.__prenom + " " + self.__nom + " " + str(self.__age) + " " + "ans"
import est utilisé pour charger une bibliothèque dans le programme.
import random print(random.randint(1,10)) # exemple de résultat : 3
from … import évite de réécrire le nom de la bibliothèque lors de l’appel de la méthode.
from random import * # on importe la bibliothèque complète print(randint(1,10)) # exemple de résultat : 1 from datetime import datetime # On importe une seul méthode datetime.now() # exemple de résultat : datetime.datetime(2019, 1, 3, 20, 6, 18, 490635)
[Mise à jour le : 3/1/2019]
Le Python des petits systèmes !
MicroPython est un langage de programmation, puissant et efficace, dérivé du Python 3 et qui a hérité d’une petite collection de bibliothèques.
MicroPython n’occupe que 256 Ko de mémoire de programme et 16 Ko de RAM, c’est idéal pour des microcontrôleurs et autres systèmes embarqués limités en ressources.
Pyboard v1.1 | Wipy | Flip&Click SAM3X | Micro bit |
---|---|---|---|
MicroPython | Pycom | MikroElektronica | BBC |
These pages host community generated documentation and examples of the features of MicroPython and the pyboard. We welcome your contributions.
If so, here’s the basic stuff you need to read and know:
Community Contributed Projects to wet your appetite and spark ideas:
Usually you will want to connect different devices to your microcontroller, like sensors, displays, actuators and much more. Here you can find modules for different devices.
This site has drivers for several Inertial Measurement Units: MPU9150, MPU9250 and LSM9DS0. It also has other code for drones and robots including Madgwick sensor fusion and a driver for the BMP180 pressure (altitude) sensor.
A module for reading encoders using gray code error-checking
$ node mp.js abcd 192.168.4.1 5**4**3
542101086242752217003726400434970855712890625
$
uPy will never support all of CPython’s builtin modules, only a subset: