2. Rêgles de programmation sous Python#

Contenu
2.1. Rêgles de base#
Rigueur
La programmation scientifique est une école de rigueur !
Savoir et comprendre ce que l’on doit faire
Ecrire un algorithme en français décrivant ce que l’on doit faire
Identifier les donnéees et les résultats
Définir les données du problème et les résultats attendus
Vérifier et valider
Afficher les valeurs intermédiaires du calcul avec
printVérifier le résultat sur des cas simples
2.2. Variables#
dans un programme, les variables permettent de manipuler les données
création (avec initialisation)
nom = valeur
attention on ne peut utiliser une variable que si elle a été initialisée
Définition des variables
Une variable est définit par un nom (identifiant), et une valeur avec un type
nom = suite de caractères et de chiffres sans accents ni ponctuation
attention majuscule # minuscule
utiliser plutôt des noms en minuscule ayant un sens
réserver les majuscules pour les constantes
utiliser un
_pour les noms longs
valeur définie le type. Les types de base
chaîne (string ou str) entre
"entier (int)
réel en virgule flottante (float)
2.3. Liste et dictionnaire#
liste = structure de données qui contient une série de valeurs, de type éventuellement différent, et dont le nombre peut varier.
attention: on compte à partir de 0 en Python
création (liste de valeurs entre
[et])ma_liste = [ val1, val2, val3 ]
accès avec un indice à partir de 0
ma_liste[i] élément i-1 de la liste ma_liste[0] premier élément ma_liste[-1] dernier élément ma_liste[debut:fin:pas] sous-liste
dictionnaire: liste avec un accès par mot clés
dict = { 'cle1': val1, 'cle2': val2 }
dict['cle'] valeur du dictionnaire pour le mot clé
2.4. Tableaux Numpy#
Pour le calcul scientifique, on utilise les tableaux de la bibliothèque numpy.
Il faut importer la bibliothèque pour pouvoir l’utiliser
import numpy as np
A la différence d’une liste, les éléments d’un tableau sont tous du même type (entier (int) ou réel (float)) et sa taille est fixe. On accède aux éléments d’un tableau avec un indice comme les listes
tableau 1D: vecteurs
np.array([0.,2.,1.]] np.zeros(N)
tableau 2D: matrices avec 2 indices ligne puis colonne
np.array([[2.,1.],[1.,2.]])
Attention par défaut opérations terme à terme
2.5. Coder de façon simple et lisible#
Un bon programme n’est pas uniquement fait pour etre exécuter par un ordinateur, mais surtout pour être compris par un humain !
syntaxe python
une instruction par ligne
indentation pour définir des blocs
aérer le code (utilisation des espaces)
2.6. Instructions conditionnelles#
important noté les : et l’indentation
valeur logique
TrueetFalsetest logique
if condition : instruction 1 elif : instruction 2 else : instruction 3
2.7. instructions de répétition#
attention: on compte à partir de 0 en Python
important noté les : et l’indentation
boucle sur les valeurs d’une liste ou d’un tableau
for val in Tab : instructions val = valeurs successives de Tab
boucle avec un compteur entier
for i in range(n) : instructions i compteur de 0 à n (exclus)
boucle avec un compteur et une valeur
for k, val in enumerate(Tab) : instructions k compteur de 0 à len(Tab) (exclus) val kieme valeur de Tab
boucle avec condition tant que (while)
while condition : instructions on doit modifier la valeur de la condition, sinon boucle infinie
2.8. Fonction et algorithme#
C’est une bonne pratique de programmation d” éviter de répéter les instructions et d’écrire du code qui soit réutilisable, non seulement parce qu’il conduit à moins de temps de développement, mais aussi parce qu’il réduit les erreurs. Si vous devez faire le même calcul plusieurs fois, il vaut mieux l’encapsuler dans une fonction.
Rappelez-vous un des concepts clé de la programmation structurée :
Une fonction est une collection compacte de code qui exécute une action sur ses arguments ou données et qui renvoie le résultat.
Il faut déterminer les données, qui sont les arguments et le résultat qui est calculé et renvoyé avec
returnPour calculer le résultat, on peut créer des variables, qui sont des variables locales connues uniquement dans la fonction. C’est une bonne pratique de choisir des noms pour ces variables locales différents des autres variables globales.
Pour utiliser une fonction, on affecte à une variable le résultat de l’appel de la fonction en spécifiant la valeur des arguments
Une fois défini, vous pouvez appeler une fonction autant de fois que vous le souhaitez. Lorsque nous appelons une fonction, nous exécutons tout le code à l’intérieur de la fonction. Le résultat de l’exécution dépend de la définition de la fonction et des valeurs qui y sont passées en arguments. Les fonctions peuvent ou non renvoyer des valeurs lors de leur dernière opération.
La syntaxe pour définir ses propres fonctions est la suivante:
def nom_fonction (arg_1, arg_2, ...):
'''
docstring: description de la fonction
'''
<corps de la fonction>
return valeur
Le docstring d’une fonction est un message du programmeur documentant ce qu’il a construit. Les docstrings doivent être descriptifs et concis. Ils sont importants car ils expliquent (ou rappellent) l’utilisation prévue de la fonction aux utilisateurs. Vous pouvez accéder ultérieurement à la docstring d’une fonction en utilisant la fonction help () et en passant le nom de la fonction. Si vous êtes dans un notebook, vous pouvez également ajouter un point d’interrogation ? avant le nom de la fonction et exécuter la cellule pour afficher les informations d’une fonction.
Pour appeler une fonction, on donne une valeurs aux arguments et on récupère le résultat, en général dans une variable:
# appel de la fonction
resultat = nom_fonction(val1, val2, ..)
Lors de l’exécution de la fonction les arguments arg_1,arg_2 .. prennent respectivement la valeur val1, val2…
2.9. Lecture des données sur fichier#
Pour lire l’information dans un fichier au format texte, il faut effectuer les étapes suivantes:
ouvrir le fichier en lecture en spécifiant son nom complet (i.e. avec le répertoire)
F = open("nom complet du fichier","r")lire les données par exemple lignes par lignes, puis les décoder
lignes = F.readlines()
fermer le fichier
F.close()
Pour des données stockés par colonnes dans un fichier, il existe une fonction simple numpy pour lire directement les valeurs: loadtxt()
X,Y = loadtxt("nom fichier",unpack=True)
permet de lire directement les valeurs des 2 tableaux numpy X et Y stockés par colonne dans le fichier « nom fichier »
2.10. Tracé de résultats#
Pour tracer des courbes, on utilise la bibliothèque matplotlib et la fonction plt.plot
import matplotlib.pyplot as plt
Pour avoir un résultat de qualité, il faut ajouter un titre lisible, des labels sur les axes et sur les courbes:
plt.titleplt.xlabel, plt.ylabelplt.legend
X = [ k for k in range(n)]
Y = [ sum(X[:k]) for k in range(n)]
plt.plot(X,Y)
import matplotlib.pyplot as plt
n = 10
X = [ k for k in range(n)]
Y = [ sum(X[:k]) for k in range(n)]
# tracer basique
plt.plot(X,Y)
[<matplotlib.lines.Line2D at 0x7fb71e8f75b0>]
# tracer avec des titres
plt.rc('font', family='serif', size='16')
plt.figure(figsize=(10,6))
plt.plot(X,Y,'-+',label="$\sum_{i=0}^p i$")
plt.title("Somme des p premiers entiers")
plt.xlabel("p")
plt.ylabel("somme ")
plt.legend();
2.11. Résumé#
démarche scientifique
comprendre ce que l’on doit faire pour résoudre un problème et identifier en particulier
les données du problème
les résultats attendus
définir comment on va résoudre le problème (algorithmique)
choisir des cas de validation
Algorithmique
notion de variables: élément essentiel pour faire des calculs et traiter les résultats
nom des variables (minuscule \(\neq\) majuscule)
type des variables (entier, caractère, réel)
structure de données: liste , tableau (numpy array)
index à partir de 0 (on compte à partir de 0)
X[i]élément du tableau X décalé de i par rapport au débutX[0]etX[-1]
notion de fonctions: définition d’un algorithme (indépendant)
nom
argument
valeur retournée