Révisions : programmation en langage python

publicité
Révisions : programmation en langage python
Retrouvez tout le cours de première année (et plus) sur le site :
http://pcsi.kleber.free.fr/IPT/index.html
1. Modules
Les modules sont des bibliothèques de programmes. Exemples :
math
numpy
pyplot
pylab
module de fonctions mathématiques usuelles (qui ne figurent pas dans le noyau python)
module de programmes pour calculs numériques sur des tableaux
module de programmes pour représentations graphiques, sous-module de matplotlib
module de programmes pour représentations graphiques (quasi-équivalent de pyplot)
Importation d’un module :
import math
Pour obtenir de l’aide sur un module importé (ou sur une fonction quelconque en général) :
help(math)
Pour utiliser une fonction du module importé :
math.sin(1.3)
Utilisation d’un alias :
import math as m
m.sin(1.3)
On peut simplifier l’appel des fonctions (ou n’importer qu’une seule fonction) :
from math import * (from math import sin)
sin(1.3)
Mais dans ce cas il faut faire attention aux fonctions portant les mêmes noms en provenance de modules
différents : le dernier import écrase le précédent…
2. Les types python
a) Types d’objets simples
Type entier : pas de limitation de taille
type(25)
int
Opérations sur les entiers :
2+3
2**3
2-3
25//3
abs(-3)
25%3
2*3
divmod(25,3)
Type flottant
type(25.0)
3e4
float
# notation exponentielle
Opérations sur les réels : comme sur les entiers sauf pour la division.
1/3
# précision finie d’une quinzaine de décimales
Type booléen
type(3>5)
bool
Deux valeurs possibles :
True
False
Opérations sur les booléens :
- opérateurs logiques
not
and
or
- opérateurs de comparaison
==
!=
<
>
<=
>=
# égal à
# différent de
# relation d’ordre
Type complexe : la partie imaginaire est suffixée par j
type(5+3j)
(3+4j).real
(3+4j).imag
(3+4j).conjugate()
abs(3+4j)
complex
# real est un attribut du complexe (sa partie réelle)
# conjugate est une méthode de l’objet de type (ou de classe) complex
# la fonction abs calcule le module du complexe
Type chaine de caractère : une chaine de caractères s’écrit entre guillemets 'chaine' ou "chaine"
type("chaine")
str
Opérations élémentaires :
len("chaine de caractères")
"chaine "+"de "+"caractères"
20
"chaine de caractères"
# concaténation
Extraction de caractères (ils sont numérotés à partir de zéro) :
"chaine de caractères"[2]
"chaine de caractères"[2:4]
"chaine de caractères"[-1]
'a'
'ai'
's'
# on compte à l’envers
b) Types de conteneurs
Type n-uplet (tuple en anglais) : Il s’agit d’une suite d’éléments de types quelconques encadrés par ()
type((1,3,'a'))
()
tuple
(1,)
(5,3)
Un tuple est non mutable, les opérations possibles sont limitées à :
t=(1,’a’,False)
t[0]
t[-1]
t[2:3]
t[1:3]
len(t)
t+t
# accès aux éléments
# extraction de sous-tuples
# concaténation
Type liste : Il s’agit d’une suite d’éléments de types quelconques encadrés par []
type([True,5,4,5])
list
Une liste est un objet mutable, on peut en modifier le nombre et la valeur de ses éléments.
Opérations sur les listes :
L=[12.0,"aa",2,3,5]
len(L)
L[0]
L[1:3]
L+[True,"bon"]
L.append(50)
L.insert(2, 60)
L.pop(3)
del(L[0:3])
G=L.copy()
L[i]=x
L[i:j+1]=t
L[i:j+1]
L.count(x)
L.reverse()
# affectation
# accès aux éléments et extraction de sous-listes
# concaténation
# insère 50 à la fin de la liste L, L est modifiée
# insère 60 en position 2 à la liste L, L est modifiée
# renvoie L[3] et le supprime dans L, L est modifiée
# supprime la tranche d’éléments d’index de 0 à 2, L est modifiée
# copie la liste L et l'affecte à G
# l'élément d'indice i est remplacé par x, L est modifié
# la tranche d'éléments d'indice i à j est remplacée par t, L est modifiée
# construit une nouvelle liste avec les éléments d'indice compris entre i et j
# compte le nombre d'occurrences de x dans L
# renverse L en place, L est modifiée
Type ensemble : Il s’agit d’un ensemble d’éléments de types quelconques encadrés par {}
type({2,'a',9})
set
Par définition il n’y a pas deux éléments identiques dans un ensemble ! Opérations sur les ensembles :
s={1,2,3,4}
len(s)
s.add(x)
s.remove(x)
3 in s
s.union({7,8},{'a','b'})
s.intersection({1,5},{1,8})
s.copy()
# cardinal de s
# insère la valeur de x en modifiant s
# supprime la valeur de x en modifiant s
# test d'appartenance
# retourne un nouvel ensemble réunion de s et des arguments
# retourne un nouvel ensemble intersection de s et des arguments
# construit un nouvel ensemble contenant les mêmes éléments que s
Type tableau numpy (numpy.ndarray)
On peut construire des tableaux à partir de listes Python avec numpy.array :
import numpy as np
type(np.array([1,2,3])
np.ndarray
Les objets sont convertis en un type commun, tous les éléments sont de même type.
a=np.array([1,2.0,3])
len(a)
array([1.,2.,3.])
3
Un tableau numpy est un objet mutable.
a[1]=6
a
array([1.,6.,3.])
Outils de construction de tableaux :
a=np. arange(1,3)
a
np.arange(1,10,2)
array([1,2,3])
array([1,3,5,7,9])
np.linspace(0,1,5)
array([0, 0.25, 0.5, 0.75, 1. ])
# construit un tableau d'entiers entre 1 et 9
# de pas 2
# construit un tableau de 5 points répartis
# uniformément entre 0 et 1
Outils de construction de matrices :
a=np.ones((2,3))
array([[ 1., 1., 1.],
[ 1., 1., 1.]])
array([[ 0., 0., 0.],
[ 0., 0., 0.]])
b=np.zeros((2,3))
# construit une matrice de 1 de taille 2-3
# construit un tableau de 0 de taille 2-3
Calculs sur les tableaux :
t=np.linspace(0,1,50)
C=np.cos(t)
S=np.sin(t)
# calcule un tableau dont les éléments sont les cosinus des éléments de t
Différences entre tableau numpy et liste python :
• Tous les éléments d’un tableau numpy sont de même type, ce n’est pas nécessaire pour une liste.
• + est l’opérateur de concaténation sur deux listes (pas nécessairement de même dimension), c’est un
opérateur d’addition des éléments qui se correspondent sur deux tableaux numpy de même dimension.
• On peut effectuer directement la transformation de tous les éléments d’un tableau numpy par une fonction
numpy sans passer par une affectation sur chaque élément dans une boucle (cf dernier exemple). Cela
simplifie beaucoup l’écriture des calculs sur les tableaux (vecteurs, matrices).
• On peut extraire un élément d’une matrice Mi , j par M[i,j] ou M[i][j] pour un tableau numpy, mais seulement
par M[i][j] pour une liste.
• L’affichage d’un tableau numpy représentant une matrice est plus lisible que celui de la liste correspondante.
3. Conversion de type
float(2)
float('1.2')
int(2.1)
int('256')
str(2)
bool('True')
list('Bonjour')
list((1,5,True))
Tableau_numpy=numpy.array([2,3,5])
list(Tableau_numpy)
tuple([1,5,2])
4. Variables et affectation
Une variable est un nom associé à l'adresse mémoire d'une donnée. Exemple :
25
← donnée
a ----------> 01100101
տ adresse
variable ր
Lors d’une affectation variable=valeur, on associe à la variable l’adresse de la valeur.
a=12
b=a
a=13
print(a)
print(b)
Un objet de type simple est non mutable. Une deuxième affectation fait pointer la variable vers une autre
adresse.
Les tuples et les chaines sont également des objets non mutables : on ne peut pas changer la valeur d’un élément
d’un tuple ou d’une chaine (ne supportent pas l’affectation).
Par contre les listes, les ensembles, les tableaux numpy sont mutables.
Affectation multiple, échange de variables :
x,y=10,11
x,y=y,x
5. Instructions conditionnelles
La structure d’une instruction conditionnelle est la suivante :
if condition1 :
instructions1
elif condition2 :
instructions2
else :
instructions3
6. Boucles inconditionnelles
Une boucle inconditionnelle est un bloc d’instructions répétées un nombre déterminé de fois. Exemples :
for element in range(i,j,h) :
instructions
# element prend toutes les valeurs entières entre i et j avec un pas h
for element in conteneur :
instructions
# element prend toutes les valeurs dans un conteneur
# conteneur peut être une chaine, un tuple, une liste, un ensemble…
7. Boucles conditionnelles
La structure d’une boucle conditionnelle est :
while condition :
instructions
Exemple :
a=0
while a<7 :
a=a+1
print(a)
8. Fonctions ou procédures
La structure d’une fonction ou procédure est la suivante :
def <nom>(arg1,arg2,...) :
instructions
Exemple :
def f(x) :
if x>0 :
return x+3
else :
None
On peut aussi utiliser la mini syntaxe sur une ligne avec le mot clé lambda :
f=lambda a,b,c : a+10*b+10*10*c
9. Entrées et sorties
Affichage à l’écran
print("Commentaire 1 : ",variable1,"\n","Commentaire 2 : ",variable2,sep='')
Lecture ou écriture de données dans un fichier
Le fichier donnees.txt contient les lignes suivantes (coordonnées de points) :
10 2 5
354
529
- lecture des données du fichier :
f=open('donnees.txt','r')
L=[]
for ligne in f:
x,y,z=ligne.split()
L.append([int(x),int(y),int(z)])
f.close()
# split est une méthode des objets de type chaine
- écriture de données dans un fichier :
Exemple : ajouter un quatrième point (1 7 6) dans le fichier précédent
f=open('donnees.txt','r')
L=f.readlines()
f.close()
L.append('1 7 6\n')
f=open('donnees.txt','w')
f.writelines(L)
f.close()
10. Structure d’un programme python
## Gestion du système
from os import chdir
chdir('D:\Travaux\TD1')
## Import des modules
import time
import numpy as np
## Définition des fonctions
def cherchemax(Y):
n=len(Y)
maxi=0
indice=0
for i in range(0,n):
if(Y[i]>maxi):
indice=i
maxi=Y[i]
return indice,maxi
# Pour définir le chemin du répertoire par défaut ; attention aux '
# Pour pouvoir déclencher le chronomètre
# Y est une liste d’entiers naturels
## Script principal
Y=[5,2,8,1,4]
indice,maxi=cherchemax(Y)
print("Le plus grand élément de L vaut: ",maxi,"\n","Son index est : ",indice,sep='')
Téléchargement