Accueil

Tutoriel Python - sommaire

Les fonctions

Écrire ma première fonction en Python

Soit la fonction (mathématique) y = x2 + 5 (donc une parabole)
On veut déterminer la valeur de y pour différentes valeurs de x afin de pouvoir faire une représentation graphique de cette fonction (dessiner la parabole).

Première solution

>>> x =-5
>>> print(x**2 +5)
30
>>> x=0
>>> print(x**2+5)
5
>>> x=5
>>> print(x**2 +5)
30

C'est un peu fastidieux et pourtant je n'ai demandé que trois valeurs Y (respectivement pour x =-5, 0 et 5)
Il y a une solution beaucoup plus élégante : écrire ce qu'on appelle en informatique une fonction (et oui c'est le même mot).

Solution bien meilleure : écrire une fonction (informatique)

Une fonction pour un informaticien est une routine qui peut être appelée N fois, avec à chaque fois passage d'une valeur (ici ce sera la valeur de x).
La routine retourne à chaque fois une valeur (ici ce doit être la valeur de y).

Vous avez déjà utilisé des fonctions natives de Python : len(), type(), list(), print(), range(), ...
Vous savez qu'il faut en général saisir quelque chose entre les parenthèses : un ou plusieurs paramètres. Par exemple : range(n1,n2,pas) avec n1: 1er terme ; n2 : dernier terme exclu.

Je tape donc :

>>> def f(x) : ... return x**2+5 File "<stdin>", line 2 return x**2+5 IndentationError: expected an indented block

L'interpréteur me dit qu'il y a une erreur de syntaxe : une indentation non respectée.
Dans beaucoup de langages un bloc d'instructions doit être entre accolades. Dans Python le bloc doit être indenté  par rapport à la première ligne (nom de la fonction)

La solution :
La première ligne doit se terminer par " :" (début de bloc) puis vous tapez deux fois sur ENTER
Avant de saisir la deuxième ligne il faut appuyer sur la touche TAB pour créer une indentation.
Je dois donc écrire :

>>> def f(x):
...     return x**2 +5
...
>>>

Après avoir saisi "return ... " tapez deux fois sur ENTER. Si l'invite de commande réapparait (>>>) c'est que la syntaxe est bonne.

Dans beaucoup de langages, les instructions d'une fonction sont entre accolades (l'indentation est facultative).
Dans Python c'est l'indentation des lignes qui indique qu'elles sont le "bloc" d'instructions de la fonction.

Commentaire de la fonction

def f(x) :  : définition de la fonction (avec le mot réservé "def") une fonction nommée "f" avec passage d'un paramètre : valeur de x.
return x**2+5 : l'expression "x**2+5" est évaluée en fonction de la valeur de x saisie ; le résultat est retourné.

Emploi de la nouvelle fonction

Maintenant je peux appeler N fois ma fonction personnelle "f" pour déterminer N valeurs de Y.

>>> f(-10)
105
>>> f(-5)
30
>>> f(0)
5
>>> f(5)
30
>>> f(10)
105

Je connais désormais cinq couples (x,y) donc je peux tracer la parabole dans un repère cartésien.
Nous verrons plus tard que le tracé peut être automatisé grâce à une extension de Python qui sera abordée plus tard.

Calculs avancés

Je veux calculer la racine carré de 25. Je sais qu'il existe une fonction native de Python qui fait ce travail : sqrt().

>>> sqrt(25) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'sqrt' is not defined

l'interpréteur me dit que la fonction sqrt() n'est pas définie ...
En effet cette fonction existe bien mais fait partie du module math qui n'est pas activé par défaut.
Solution :

>>> from math import *
>>> sqrt(9)
3.0
>>> sqrt(25)
5.0
>>> x= 3.3333333
>>> ceil(x)
4
>>> floor(x)
3
>>> round(x,2)
3.33

Pour accéder à toutes les fonctions du module math il suffit de taper la commande from math import *
* veut dire toutes les fonctions du module.
Désormais l'interpréteur comprend une commande basée sur la fonction sqrt().

Le module random

Il existe un autre module qu'il faut souvent utiliser : random.
Ce module n'est pas disponible par défaut dans l'interpréteur.
En anglais “random” signifie “le hasard”.
Ce module permet de générer un nombre aléatoire OU de choisir au hasard un élément dans une liste. Donc si vous voulez programmer des jeux de devinettes ce module est incontournable ...

Une batterie de commandes à produire :

>>> from random import *
>>> x =random()
>>> y=random()
>>> print (x, ' ' , y)
0.5130495117445398   0.17314597535114962
>>> liste1 =[1,3,5,7,9,11]
>>> choice(liste1)
11
>>> choice(liste1)
1
>>> liste2= ['Pierre', 'Paul','Jacques', 'Henri']
>>> choice(liste2)
'Jacques'
>>> choice(liste2)
'Paul'
>>> randint(1,100)
24

Il faut rendre disponibles toutes les fonctions du module random avec la commande : from random import *

Encore des fonctions personnelles

Une parabole

Création d'une fonction personnelle basée sur l'équation : y = x2 + 10
Vous allez me dire que l'on a déjà fait.
C'est vrai mais cette fois j'emploie dans le code la fonction native pow(x,n) : élève x à la puissance n.

>>> def  parabole(x):
...     y=pow(x,2)+10
...     return y
...
>>> parabole(-10)
110
>>> parabole(0)
10
>>> parabole(10)
110

pow(x,2) élève à la puissance 2 le contenu de la variable x.
Ma fonction se nomme "parabole" (c'est plus explicite que "f").
Le bloc d'instructions de cette fonction comprend deux lignes, toutes deux doivent être indentées par rapport à la ligne "def".

Aire d'un cercle ?

La surface d'un cercle = rayon2 * 3.14
Je dois donc écrire dans l'interpréteur :

>>> def aire_cercle(rayon):
...     aire = rayon **2 * 3.14
...     return aire
...
>>> aire_cercle(10)
314.0
>>> aire_cercle(20)
1256.0

Donc si le rayon est 10 cm alors la surface est 314 cm2
Si le rayon est 20 m alors la surface est 1256 m2

Et si on souhaitait qu'une seule fonction calcule à partir du rayon l'aire mais aussi la circonférence du cercle et retourne donc les deux résultats. Est-ce possible avec Python ?
La réponse est OUI mais patientez un peu. Il faut, en effet, utiliser un type de données qui vous est encore inconnu : les tuples.

Tout cela pour rien !

Je ferme l'interpréteur puis je l'ouvre à nouveau. La fenêtre est vide !
J'ai travaillé dur mais pour rien car toutes mes fonctions personnelles ont disparu !

Nous allons devoir changer d'interface : utiliser l'éditeur (IDLE° à la place de l'interpréteur, afin de sauvegarder notre travail.
En d'autres termes, nous allons passer du mode "commandes" au mode "programmes".

Dans le chapitre suivant nous allons voir tout l'intérêt de l'éditeur (IDLE).