Plus vos programmes se complexifieront, plus le code source écrit sera volumineux. Pour y remédier, nous allons introduire deux nouveaux concepts : les boucles et les fonctions. Nous aborderons deux formes de boucles qui répondent à deux modes de fonctionnement différents. Nous poursuivrons ensuite sur les fonctions fournies dans Python 3 et enfin sur comment écrire ces fonctions soi-même. À partir de ce chapitre, la présence du shebang, de la documentation dans le code, les noms de variables explicites et de commentaires sont obligatoires.

Boucles "Tant que"

Les boucles ont pour but de répéter un ensemble d'instructions tant qu'une certaine condition est remplie. Dès que cette condition n'est plus remplie, l'interpréteur rompt la boucle et continue l'exécution du script. Il existe deux types de boucles en Python : la boucle "tant que" et la boucle "pour" que nous aborderons plus tard.

La boucle "tant que" ("while" en anglais) permet d'exécuter une portion de code tant que la condition fournie est vraie. On utilise le mot while. Voici un exemple trivial permettant de mettre en œuvre cette nouvelle fonction :

compteur = 1
while compteur <= 10:
	print(compteur)
	compteur = compteur + 1

L'exemple ci-dessus affichera les nombres de 1 à 10 inclus à raison de un par ligne.

La boucle n'est pas exécutée si au début la condition n'est pas remplie. Les variables constituant la condition doivent exister avant l'exécution de la boucle.

Faites attention à toujours avoir un facteur modifiant la condition de la boucle. En effet, si la condition est toujours remplie, la boucle s'exécutera pour toujours. On parle alors de boucle infinie. Voici un exemple de boucle infinie :

compteur = 1
while compteur <= 10:
	print(compteur)

L'instruction break

Il peut être nécessaire, lorsque l'on ne connaît pas à l'avance sous quelle condition on va quitter une boucle. C'est notamment le cas des communications réseau ou des lectures de fichiers. Pour arrêter immédiatement l'exécution d'une boucle à tout moment de son itération, on utilise l'instruction break.

Les fonctions

Une fonction est une séquence d'instructions permettant d'effectuer une tâche précise. Nous allons ici réduire le volume de notre code en regroupant les instructions en tâches et créer des fonctions associées. Nous allons voir également que Python fournit beaucoup de fonctions dont nous avons déjà vu quelques unes.

Les fonctions fournies par Python

Nous avons déjà vu dans les chapitres précédents les fonctions print(), help() et input(). Nous allons voir certaines fonctions disponibles utiles.

Trans-typage

Lors de la saisie de données par l'utilisateur, la valeur retournée est une chaîne de caractères. Pour effectuer des opérations mathématiques, il est nécessaire de la convertir en valeur entière ou décimale. Pour ce faire, nous utiliserons les fonctions int() pour convertir en entier et float() pour convertir en décimal. On peux également tronquer un nombre décimal avec la fonction int() :

saisieUtilisateur = "75.9"
valeurFlottante = float(saisieUtilisateur)
valeurEntiere = int(valeurFlottante)

À l'inverse, il est possible de convertir une donnée en chaîne de caractères avec la fonction str().

Comparer des valeurs

Il est possible de récupérer la valeur minimale et maximale d'une série de valeurs séparées par des virgules avec respectivement les fonctions min() et max().

valeurMaximale = max(4, 17.8, 12)
valeurMiminale = min(4, 17.8, 12)

Ces fonctions sont notamment utiles lorsque l'on manipule des listes, que nous verrons plus tard.

Importer des modules

Python 3 est fourni avec un ensemble de fonctions disponibles nativement. Cependant, il peut être nécessaire d'importer un module afin d'utiliser une fonction précise. Pour illustrer comment importer un module Python et utiliser les fonctions qui y sont référencées, nous allons utiliser la fonction randint du module random permettant de tirer un nombre entier au hasard.

Il est d'usage et fortement recommandé d'importer les modules en début de programme, sous le shebang. Nous utiliserons cette convention tout au long de ce cours.

Importer des fonctions d'un module

Si vous utilisez un faible nombre de fonctions d'un même module, il est recommandé d'importer que ces dernières et ainsi faire l'économie des fonctions inutiles du module :

from random import randint, shuffle	# Importe les fonctions randint et shuffle (inutile dans cet exemple) du module random
aleatoire = randint(1,10)		# Nombre aléatoire entre 1 et 10 inclus

Importer un module complet

Si vous utilisez une grande partie des fonctions d'un module, il est moins fastidieux d'importer les fonctions une à une. Dans ce cas, on importe le module complet :

import random				# Importe le module random
aleatoire = random.randint(1,10)	# Nombre aléatoire entre 1 et 10 inclus (fonction du module random)

Importer un autre fichier Python

Vous pouvez également importer un autre script Python comme module. Pour cela, il faut que votre module soit écrit dans le même dossier que votre script. Pour l'importer, utilisez l'une des deux méthodes ci-dessus en renseignant le nom du fichier module sans son extension.

ATTENTION : Lorsque vous importez un module dans vos programmes, le code non présent dans des fonctions ou classes s'exécute. Par exemple :

Fichier monmodule.py
def maFonction():
	print("Ceci est ma fonction")
print("Bonjour le monde !")
Fichier monscript.py
import monmodule
print("Le ciel est bleu")

Dans cet exemple, la ligne 3 du fichier monmodule.py sera exécutée lors de l'import.

Créer des fonctions

Nous allons aborder maintenant comment créer nous-mêmes des fonctions. Pour cela, nous utiliserons l'instruction def. Une fonction peut prendre des arguments en entrée et retourner une valeur en fin avec l'instruction return, tout cela est facultatif. Voici un exemple que nous détaillerons ensuite :

def addition(a, b):
	resultat = a+b
	return(resultat)
resultatAddition = addition(4, 7)
print(resultatAddition)

La première ligne introduit notre nouvelle fonction nommée addition et nécessitant deux arguments, les variables a et b. Ces variables, ainsi que celles déclarées au sein de cette fonction, ne sont valables que dans cette fonction. Le corps de la fonction, composé des lignes 2 et 3, indique d'effectuer une opération sur les variables et de retourner la valeur de la variable resultat. L'exécution de la fonction s'arrête lors du return, même si d'autres instructions la suivent.

Une fois la fonction définie, nous l'utilisons à la ligne 4 en lui fournissant comme arguments les valeurs a=4 et b=7. On récupère le résultat de cette fonction dans la variable resultatAddition. On affiche le contenu de la variable resultatAddition à la ligne 5. Si le résultat d'une fonction n'est pas récupéré, il est perdu.

Il est possible d'utiliser plusieurs fois une même fonction :

def addition(a, b):
	return(a+b)
resultatAddition = addition(4, 7)
print(resultatAddition)
resultatAddition = addition(8, 4.12)
print(resultatAddition)

Lorsqu'une fonction est créée, elle prévaut sur celle fournie par défaut par Python. Si vous appelez une de vos fonctions print, celle-ci sera appelée en lieu et place de celle fournie de base.

Lors de l'utilisation d'une fonction, tous les arguments sont obligatoires. Vous pouvez rendre un argument facultatif en lui fournissant une valeur par défaut :

def tableAddition(valeur, fin=10):
	compteur = 1
	while compteur <= fin:	# Par défaut, la valeur de fin est à 10.
		print(compteur,"+",valeur,"=",compteur+valeur)
		compteur += 1	# Équivalent à compteur = compteur + 1
tableAddition(4)	# La variable fin aura pour valeur 10
tableAddition(6, 15)	# La variable fin aura pour valeur 15

Vous pouvez fournir les arguments dans le désordre lors de l'appel d'une fonction en nommant vos variables :

def addition(a, b):
	return(a+b)
resultatAddition = addition(b=2, a=9)
print(resultatAddition)

Ici, la fonction aura pour arguments a=9 et b=2. Ce type d'appel peut être utile pour des fonctions ayant un grand nombre d'arguments pour plus de clarté.

Enfin, il est également possible de retourner plusieurs valeurs à la fin d'une fonction :

def valeursExtremes(valeurs):
	return(min(valeurs),max(valeurs))
valeurMinimale, valeurMaximale = valeursExtremes([14,96,57,10,0.7])

Exercices

  1. Écrivez un programme permettant d'effectuer les opérations de base (+, +, ×, ÷) en mathématiques en créant des fonctions.

    Exemple :

    Entrez le premier nombre : 17
    Entrez le second nombre : 14
    Entrez l'opération (1=+, 2=-, 3=X, 4=:) : 2
    Le résultat est 3
    

    Démarrer l'activité avec Python Studio

  2. Créez un programme tirant un nombre au hasard entre 1 et 20 et demandant à l'utilisateur de deviner ce nombre en lui indiquant si sa proposition est supérieure ou inférieure au nombre tiré.

    Exemple :

    Devinez le nombre que j'ai en tête !
    Entrez un nombre : 7
    C'est plus
    Entrez un nombre : 13
    C'est moins
    Entrez un nombre : 10
    Gagné !
    

    Démarrer l'activité avec Python Studio

  3. Écrivez un programme permettant de demander à l'utilisateur la réponse à la multiplication de deux nombres tirés aléatoirement. Votre programme lui posera 15 questions et calculera un score noté sur 20.

    Exemple :

    Combien font 1X1 : 
    2
    Dommage, la réponse était 1
    Combien font 4X3 : 
    74
    Dommage, la réponse était 12
    Combien font 10X10 : 
    100
    Bien joué !
    …
    C'est terminé, votre note est de 15/20. 
    

    Démarrer l'activité avec Python Studio