Programmation Impérative
Fonctions et Python+
5
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Différence Entre Programme et Fonction
un fichier
.py
entier
exécuté depuis bash, avec
python lefichier.py p1 p2 p3 …
des paramètres dont la valeur est tapée dans le terminal
des paramètres accessibles avec la liste
sys.argv
des paramètres forcément chaînes de caractères
interrompu par
exit()
Fonction
définie dans une partie d'un fichier
.py
appelée n'importe où en python, avec
la_fonction(p1,p2,p3)
des paramètres dont la valeur est calculée à l'appel de la fonction
des paramètres qui sont des valeurs/objets python
des paramètres accessibles avec leurs noms
des paramètres de n'importe quel type
interrompue par
return
une valeur de retour (ou
None
)
6
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Programmation Impérative
7
: Plan
Rappel sur les Fonctions en Python
Fonctions et Programmes
Fonctions Comme Outils d'Abstraction
Paramètres par Défauts
Autres Éléments en Python
8
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Programme Sans Fonctions
1
planetes = [
# x, y, masse, nom
2
[
0
,
0
,
5.9736E24
,
"terre"
],
3
[
3.844E6
,
0
,
7.3477E22
,
"lune"
] ]
4
G =
6.6742E-11
*
1E-6
# N km2 kg-2
1
bob = [
0
,
6378.137
]
# km
2
bobm =
100
# kg
3
4
for
pl
in
planetes:
5
dx = pl[
0
] - bob[
0
]
6
dy = pl[
1
] - bob[
1
]
7
d = (dx * dx + dy * dy)**
0.5
8
print(
"Bob est a"
, d,
"km du centre de"
, pl[
3
])
9
10
somme_forces = [
0
,
0
]
11
for
pl
in
planetes:
12
dx = pl[
0
] - bob[
0
]
13
dy = pl[
1
] - bob[
1
]
14
d = (dx * dx + dy * dy)**
0.5
15
u = [dx / d, dy / d]
# vecteur unitaire
16
df = [-G * bobm * pl[
2
] / d / d * u[
0
],
17
-G * bobm * pl[
2
] / d / d * u[
1
]]
18
somme_forces = [somme_forces[
0
] + df[
0
],
19
somme_forces[
1
] + df[
1
]]
20
21
print(
"Somme des forces sur Bob :"
, somme_forces,
"newtons"
)
9
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Fonctions : Répétitions Contrôlées
1
planetes = [
# x, y, masse, nom
2
[
0
,
0
,
5.9736E24
,
"terre"
],
3
[
3.844E6
,
0
,
7.3477E22
,
"lune"
] ]
4
G =
6.6742E-11
*
1E-6
# N km2 kg-2
1
def
info_bob
(bob, bobm)
:
2
for
pl
in
planetes:
3
dx = pl[
0
] - bob[
0
]
4
dy = pl[
1
] - bob[
1
]
5
d = (dx * dx + dy * dy)**
0.5
6
print(
"Bob est a"
, d,
"km du centre de"
, pl[
3
])
7
8
somme_forces = [
0
,
0
]
9
for
pl
in
planetes:
10
dx = pl[
0
] - bob[
0
]
11
dy = pl[
1
] - bob[
1
]
12
d = (dx * dx + dy * dy)**
0.5
13
u = [dx / d, dy / d]
# vecteur unitaire
14
df = [-G * bobm * pl[
2
] / d / d * u[
0
],
15
-G * bobm * pl[
2
] / d / d * u[
1
]]
16
somme_forces = [somme_forces[
0
] + df[
0
],
17
somme_forces[
1
] + df[
1
]]
18
19
print(
"Somme des forces sur Bob :"
, somme_forces,
"newtons"
)
20
21
info_bob([
0
,
6378.137
],
100
)
22
info_bob([
6378.137
,
0
],
100
)
10
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Fonctions : Ne Pas Se Répéter
1
planetes = [
# x, y, masse, nom
2
[
0
,
0
,
5.9736E24
,
"terre"
],
3
[
3.844E6
,
0
,
7.3477E22
,
"lune"
] ]
4
G =
6.6742E-11
*
1E-6
# N km2 kg-2
1
def
dist
(a, b)
:
2
dx = b[
0
] - a[
0
]
3
dy = b[
1
] - a[
1
]
4
return
( dx**
2
+ dy**
2
)**
0.5
5
6
def
info_bob
(bob, bobm)
:
7
for
pl
in
planetes:
8
d = dist(pl, bob)
9
print(
"Bob est a"
, d,
"km du centre de"
, pl[
3
])
10
11
somme_forces = [
0
,
0
]
12
for
pl
in
planetes:
13
d = dist(pl, bob)
14
u = [ (pl[
0
] - bob[
0
]) / d, (pl[
1
] - bob[
1
]) / d]
15
df = [-G * bobm * pl[
2
] / d / d * u[
0
],
16
-G * bobm * pl[
2
] / d / d * u[
1
]]
17
somme_forces = [somme_forces[
0
] + df[
0
],
18
somme_forces[
1
] + df[
1
]]
19
20
print(
"Somme des forces sur Bob :"
, somme_forces,
"newtons"
)
21
22
info_bob([
0
,
6378.137
],
100
)
11
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Fonctions : Meilleures Abstractions
1
planetes = [
# x, y, masse, nom
2
[
0
,
0
,
5.9736E24
,
"terre"
],
3
[
3.844E6
,
0
,
7.3477E22
,
"lune"
] ]
4
G =
6.6742E-11
*
1E-6
# N km2 kg-2
1
def
vec_mad
(m, a, b = [
0
,
0
])
:
# retourne m*a + b (en 2d)
2
return
[ m*a[
0
]+b[
0
], m*a[
1
]+b[
1
] ]
3
4
def
dist
(a, b)
:
5
d = vec_mad(-
1
, a, b)
6
return
( d[
0
]**
2
+ d[
1
]**
2
)**
0.5
7
8
def
info_bob
(bob, bobm)
:
9
for
pl
in
planetes:
10
d = dist(pl, bob)
11
print(
"Bob est a"
, d,
"km du centre de"
, pl[
3
])
12
somme_forces = [
0
,
0
]
13
for
pl
in
planetes:
14
d = dist(pl, bob)
15
u = vec_mad(-
1
, bob, pl)
# pl - bob
16
u = vec_mad(
1
/d, u)
# u / d
17
df = vec_mad(-G * bobm * pl[
2
] / d / d, u)
18
somme_forces = vec_mad(
1
, somme_forces, df)
19
20
print(
"Somme des forces sur Bob :"
, somme_forces,
"newtons"
)
21
22
info_bob([
0
,
6378.137
],
100
)
25
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Programmation Impérative
7
: Plan
Rappel sur les Fonctions en Python
Fonctions et Programmes
Fonctions Comme Outils d'Abstraction
Paramètres par Défauts
Autres Éléments en Python
26
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Valeurs de Paramètres par Défaut
But
rendre certains paramètres optionnels
leurs donner des valeurs par défaut
Exemples
1
def
puissance
(a, b=
2
)
:
2
return
a**b
3
4
# utilisation de la fonction
5
print( puissance(
10
,
2
) )
# 100
6
print( puissance(
10
,
3
) )
# 1000
7
print( puissance(
10
) )
# 100
1
def
somme
(a, b, c=
0
, d=
0
)
:
2
return
a+b+c+d
3
4
# utilisation de la fonction
5
print( somme(
10
,
2
) )
# 12
6
print( somme(
10
,
2
,
5
) )
# 17
7
print( somme(
10
,
2
,
5
,
100
) )
# 117
Note : on ne peut omettre que le(s) dernier(s) paramètre(s)
27
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Paramètres Nommés (
culture
)
But
ne fournir de valeur que pour certains paramètres
garder les autres paramètres par défaut
ne pas être limité aux derniers paramètres par défaut
Exemple
1
def
puissance
(a=-
1
, b=
2
)
:
2
"retourne a puissance b, avec a=-1 et b=2 par défaut"
3
return
a**b
Comment l'appeler en ne passant que
b
?
1
print( puissance(b=
10
) )
# 1
Déjà vu avec
print
1
print(
"hello"
,
"world"
, sep=
"!!!"
)
# hello!!!world
28
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Programmation Impérative
7
: Plan
Rappel sur les Fonctions en Python
Fonctions et Programmes
Fonctions Comme Outils d'Abstraction
Paramètres par Défauts
Autres Éléments en Python
29
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Bonnes Pratiques
Toujours
bien nommer les variables
tester vos fonctions avec différentes entrées
tester vos programmes avec différentes entrées
ajouter des variables intermédiaires
éviter les expressions trop longues
éviter de répéter des expressions récurrentes
lire les messages d'erreur
Dans un programme
mettre les
import
au départ
ne pas abuser de
from .... import *
(l'étoile)
mettre les définitions de fonctions ensuite
mettre le corps du programme à la fin
Dans une fonction
bien nommer la fonction
bien nommer les paramètres
ne pas oublier le
return
(si besoin)
éviter d'accéder à des variables globales
30
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Boucle et Court-Circuit
continue
Rappel :
break
interrompt une boucle
Instruction
continue
passe à l'itération suivante de la boucle
Exemple : qu'affiche le programme suivant ?
1
for
i
in
range(
100
):
2
if
i %
3
==
1
:
3
continue
4
if
i ==
8
:
5
break
6
print(i)
0
,
2
,
3
,
5
,
6
et avec
i == 7
à la place de
i == 8
?
31
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Compréhension de Listes (
culture
)
Cas d'utilisation
on veut parcourir une liste
calculer une valeur pour chaque élément
et remplir une nouvelle liste
Version « classique »
1
premiers = [
2
,
3
,
5
,
7
,
11
]
2
carres = []
3
for
n
in
premiers:
4
carres.append(n*n)
Compréhension de liste
1
premiers = [
2
,
3
,
5
,
7
,
11
,
13
]
2
carres = [n*n
for
n
in
premiers]
Compréhension de liste avec condition
1
def
premier
(n)
:
2
...
3
carres = [n*n
for
n
in
range(
15
)
if
premier(n)]
32
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Dictionnaires (
culture
)
Dictionnaire = conteneur associatif
associe une valeur (de type quelconque) à une clé
exemple:
"lundi" -> "semaine"
"mardi" -> "semaine"
...
"dimanche" -> "week-end"
Définition de dictionnaire
1
dico = {
"lundi"
:
"semaine"
,
"mardi"
:
"semaine"
,
2
"dimanche"
:
"week-end"
}
Accès à un dictionnaire
1
print(dico[
"mardi"
])
2
# dico["jamais"] # <- erreur, clé non existante
Ajout à un dictionnaire
1
dico[
"LUNDI"
] =
"semaine"
Tuples, n-uplets (
culture
)
Motivation : paire, triplet, quadruplet
grouper des valeurs ensemble
comme une liste, mais non-mutable (constant)
utilisable aussi avec
for
,
len()
, ...
Notation : comme un liste mais avec des parenthèses
1
tup = (
"hello"
,
12345
,
"poum"
)
2
print(tup[
0
])
# hello
3
print(tup[
1
])
# 12345
Dé-construction de tuples (et de listes)
1
a,b = (
"hello"
,
12345
)
2
print(a)
# hello
3
a,b = (b,a)
4
print(a)
# 12345
Pour retourner plusieurs valeurs
1
def
nimp
()
:
return
(
"hello"
,
12345
)
2
3
a,b = nimp()
33
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Gestion d'Erreur (
culture
)
Motivation
ne pas s'interrompre abruptement en cas d'erreur
gérer les erreurs « d'entrées utilisateur »
Exemple typique
input()
renvoie une chaîne de caractères
la valeur doit être convertie si on veut un nombre
(ou, autre exemple, on attend uniquement "oui" ou "non")
1
nb_str = input(
"Entrez un nombre : "
)
# ex: '5'
2
msg = input(
"Entrez un message : "
)
# ex: 'Poum Tchak'
3
nb = int(nb_str)
# erreur si nb_str ne représente pas un entier
4
print(nb * msg)
Gestion d'erreur avec
try
/
except
1
nb_str = input(
"Entrez un nombre : "
)
2
msg = input(
"Entrez un message : "
)
3
try
:
# essayer d'exécuter le code ci-dessous
4
nb = int(nb_str)
5
except
:
# s'il y a eu une erreur
6
print(
"Hum... "
, nb_str,
" pas entier ?"
)
7
exit()
8
print(nb * msg)
34
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
Points Clés
Rappel de définition de fonction en python
Différence entre
et
fonction
Fonction comme outil d'abstraction
Paramètres optionnels et valeurs par défaut
Instruction
continue
Compréhension de listes
Dictionnaires
Tuples (n-uplets)
Gestion d'erreur avec
try
/
except
35
/
35
Rémi Emonet
Programmation Impérative Fonctions et Python+
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !