Les fonctions avec Python

Exemple de fonction avec Python

Les fonctions facilitent l'écriture et la lecture des programmes. Ce sont des blocs d’instructions auxquels on attribue soit aucune, soit une, soit plusieurs variables appelées arguments. Dans Python, certaines sont intégrées, par exemple print(). Mais vous pouvez aussi en créer. Voyons comment.

 

Le principe

C’est l’instruction def qui permet de définir une fonction. Après def suit le nom que vous donnez à la fonction avec, entre parenthèses, les éventuels paramètres. La ligne de code de définition de fonction se termine par deux points (:). Les lignes suivantes sont indentées (décalées à droite).

La fonction est ensuite appelée dans un ou plusieurs programmes.

chercheuse

 

Exemple simple

Ici, la fonction se nomme fct. Comme elle consiste juste à envoyez un message, trois lignes suffisent. Le texte est contenu dans une variable P et il n’y a aucun argument (copie d’écran Pycharm).

Pycharm

Ensuite, le programme d’affichage tient en une seule ligne.

Voyons donc un autre exemple un peu moins rudimentaire…

 

Exemple avec boucle et condition

Le but de ce nouveau programme est d’indiquer à un utilisateur ayant saisi un entier naturel \(n\) si ce nombre est premier ou non. Cette fonction fait partie des exemples d’algorithmes qui peuvent être donnés en classe de seconde. Notez qu’il existe de très nombreuses possibilités pour arriver au même résultat.

Rappelons qu’un nombre premier \(n\) possède deux diviseurs : 1 et \(n.\)

On peut choisir de compter les diviseurs entre 1 et \(n.\) S’il y en a deux, c’est que \(n\) est premier.

Une autre possibilité est de compter les diviseurs entre 2 et \(n - 1.\) Dans ce cas, \(n\) est premier s’il n’y a pas de diviseur. C’est cette seconde configuration qui a été choisie ci-dessous. Toutefois, il faut ajouter la condition que si le nombre choisi est 1, celui-ci n’est pas premier.

def premier(n):
    if n == 1:
        r = "Ce n'est pas un nombre premier"
    else:
        d = 2
        boole = 0
        for d in range(2,n):
            if n % d == 0:
                boole = 1
        if boole == 0:
            r = "C'est un nombre premier"
        else:
             r = "Ce n'est pas un nombre premier"
    return r

choix = int (input("Choisissez un nombre : "))
print (premier(choix))

La fonction s’appelle premier.

La variable d (comme diviseur) est initialisée à 2. L’important n’est pas qu’elle soit initialisée à 2 (redondant avec une ligne plus bas) mais cela indique à Python que c’est une variable entière.

Nous initialisons une variable boole à 0. Elle est booléenne (du nom du mathématicien anglais George Boole), c'est-à-dire qu'elle prendra soit la valeur 0 soit la valeur 1.

La boucle qui suit est une boucle bornée. C’est ce type de boucle qui est le plus souvent utilisée. La variable d prend toutes les valeurs entières de 2 à n.

Ensuite, on teste si la division euclidienne de n par d donne un reste nul ou pas. Si c’est le cas, c’est-çà-dire si le nombre n’est pas premier, la variable booléenne prend la valeur 1. Si le programme a trouvé un diviseur, il continue quand même ses divisions jusqu’à \(n.\) Ce n’est pas très grave, votre processeur ne va pas s’épuiser là-dessus.

Si aucun diviseur ne s’est manifesté, boole reste à zéro.

Les deux dernières lignes ne font pas partie de la fonction. Il s'agit du programme qui l’appelle. L’utilisateur entre une valeur pour savoir si ce nombre est premier ou non.

Encore une fois, il ne s’agit que d’un exemple d’algorithme parmi beaucoup d’autres qui renverraient le même résultat. Vous pouvez d’ailleurs l'améliorer en prévoyant diverses facéties de l’utilisateur, par exemple pour que celui-ci reçoive un message conçu par vous au lieu des injures de Python s’il lui vient à l’idée de saisir du texte ou un nombre décimal. Par ailleurs, ce programme fonctionne avec les entiers négatifs, ce que vous ne souhaitez peut-être pas.

Ci-dessous figure une alternative qui utilise une boucle non bornée.

def premier(n):
    if n == 1:
        r = "Ce n'est pas un nombre premier"
    else:
        d = 2
        boole = 0
        while boole == 0 and d <= n/2:
            if n % d == 0:
                boole = 1
            d = d + 1
        if boole == 0:
            r = "C'est un nombre premier"
        else:
             r = "Ce n'est pas un nombre premier"
    return r

choix = int (input("Choisissez un nombre : "))
print (premier(choix))

Vous avez des pistes pour construire votre propre programme. Les plus doués d’entre vous pourront remplacer le texte « c’est un nombre premier » par une vidéo de feu d’artifice.

 

escargot