On commence: بسم الله

En Python, on peut créer des fonctions, c’est-à-dire un ensemble d’instructions regroupées sous un nom. Ces fonctions peuvent accepter un certain nombre d’entrées (de 0 à un nombre infini).

Par exemple, la fonction d’une droite prend une abscisse x, un coefficient a et une constante b, et renvoie comme output (résultat) : a*x + b (qu’on nom y par convention).

Pour que le PC comprend qu’on va définir une fonction, on commence par écrir def et pour qu’il comprend ce qu’il faut retourner comme output, on utilise l’instruction return.

Syntaxe:

def *nom de la fonction* (*input 1*, *input 2*, ...) :

    ligne 1

    ligne 2

    ...

    return  *output*

NB:

  • Le nom de la fonction doit respecter les memes règles pour définir une variable ( on a déjà parler de ça dans le cours de 1- Introduction ) et ne doit pas avoir un nom d’une fonction prédéfinie en Python ( comme int () ou len (), … ).
  • Une fonction peut etre sans inputs
  • Regarde bien le syntaxe, pour les fonctions on n’affecte pas lune variable en utilisant = mais en utilisant def et le nom vient après def.

Exemple : equation d’une droite

On va écrir le code qui défini l’équation de la droite.

Ne t’inquiète pas, je me souviens du temps quand j’étais en SUP et j’ai entendu le prof dire qu’on doit définir une équation en Python. Je n’ai pas compris la relation entre les deux 🤣🤣.

Mais je t’explique, on sait que l’équation de la droite s’écrit sous la forme y = a*x + b, n’est-ce pas? Donc, si l’utilisateur me donne les valeurs de ax et b je peux connaitre et retourner la valeur de y en utilisant la formule. C’est tout simplement ça: Je vais érire une fonction qui prend ax et b comme input et retourne y = a*x + b comme output.

Remarque :

Dans les cours précédents, nous avons vu que ne pas attribuer de valeur à une variable provoque une erreur. Pour les fonctions, il suffit que les variables soient définies comme paramètres d’entrée (inputs). Si une variable n’est ni définie comme paramètre d’entrée ni attribuée à une valeur, cela entraînera également une erreur.

Maintenant on refait la meme fonction droite mais x étant une liste de flottants ( par exemple un utilisateur qui veut les ordonnées (les ys) pour plusieurs abscisses mais pour la meme droite (meme a et b) )

Important !!

  • Tu vois que lorsqu’on a définit la fonction droite, on a définit 3 inputs: ax et b. Alors comment peut on remplacer x par element? On ne doit pas le nommer x? Non, parce qu’en Python, le PC va seulement considérer la valuer du 1er, 2ème et 3ème input et va les remplacer dans le code de la fonction : donc c’est l’ordre des inputs qui compte et pas leur nom.
  • Lorsque le code atteint la ligne qui contient l’instruction return, il va s’arreter et va ignorer toute les lignes qui viennent après, donc soit sur de mettre return à la fin de la définition.

Me contacter:

Si tu as des problèmes de compréhension meme avec ces explications, tu peux me contacter ou bien regarder les vidéos d’explication sur Youtube


Valeurs des inputs par défaut

Pour utiliser la fonction droite qu’on a définit au dessus, on doit forcément donner 3 valeurs comme inputs, sinon on va avoir une erreur:

Regardons le message d’erreur : il indique que l’argument b est manquant. Cela arrive parce que, comme mentionné précédemment, Python remplace les paramètres de la définition de la fonction par les valeurs que vous fournissez lors de l’appel. Ici, Python comprend que 6 correspond au premier paramètre a, et que 4 correspond au second paramètre x. Cependant, il ne trouve aucune valeur pour b, ce qui provoque l’erreur, car Python ne sait pas quoi faire dans ce cas.

Mais si on veut que la valeur de b soit 0 par défaut ( lorsque la fonction est appelée avec seuelemnt 2 arguments ), tu dois lui attribuer 0 lors de la définition de la fonction :

Maintenant, le code n’est pas erroné

NB:

Si une fonction est définie avec n arguments et on l’appelle avec p>n arguments, un message d’erreur va etre affiché, regarde l’exemple de la fonction droite si on l’appelle avec 4 arguments (et lit le message accompagné à l’erreur


Fonctions sans output:

Une fonction peut etre sans output, c-à-d que définir une fontion sans instruction return ne va pas causer une erreur.

Regarde l’exemple suivant:


Fonctions à plusieurs outputs:

Une fonction peut avoir 2 outputs ou plus.

Par exemple, on veut une fonction qui prend en argument 2 entiers n et p et retourne n puissance p et p puissance n

NB

On peut transformer les fonctions à plusieurs outputs en fonctions à un seul output en regroupant les outputs dans une liste ( C’est ça ce que je fais ).


Fonctions récursives

On appelle fonction récursive toute fonction qui s’appelle elle meme pendant l’exécution. Tout simplement f(n) dépend de f(n-1)( pas forcément n-1, mais dépend d’un entier inférieur à n )

Hein? Comment ça?

S’elle appelle-elle meme, elle s’arrete où ?

Pour les fonctions récursives on doit toujours donner la valeur de l’output pour un entier initial n0 c-à-d qu’on programmer la fonction que si l’argument n vaut n_0, retourne une certaine valeur (regarde les exemples et tu va comprendre mieux inshaalah).

Maintenant f(n_0) est connue, donc ça va causer une série d’exécution de la fonction f :

  • f(n) dépend de f(n-1) qui dépend de f(n-2) … qui dépend de f(n_0). Et puisqu’on connait f(n_0), on peut trouver f(n_1) … jusqu’à f(n)

NB: Dans la plupart des cas, n_0 vaut 0 ou bien 1 mais je voulais montrer que l’entier initial peut avoir n’importe quelle valeur


Exemple: Factorielle

On va développer la fonction factorielle (n) (notée en maths: n!) qui vaut n*(n-1)*...*1

Exercices

Ex 1: Fibonacci

La fonction est la fonction définie par: F(n)=F(n−1)+F(n−2) avec F(0)=0 et F(1)=1

Définit cett fonction en Python:

Ex 2

Soit une chaine de caractères, écrire un algorithme récursif permettant de déterminer sa longueur

Ex 3

Un tableau X est trié par ordre croissant si x(i)≤x(i+1),∀i

Ecrire un algorithme récursif permettant de vérifier qu’un tableau X est trié ou non

Exercice : Conversion d’une chaîne binaire en décimal à l’aide d’une fonction récursive

Objectif :

Écrire une fonction récursive qui prend en entrée une chaîne composée uniquement de caractères 0 et 1, représentant un nombre en base binaire, et qui renvoie sa valeur décimale.

Explication :

  • Une chaîne binaire est une suite de caractères 0 et 1 représentant un nombre dans le système binaire (base 2).
  • Votre tâche est d’écrire une fonction récursive qui effectue la conversion d’un nombre binaire en un nombre décimal (base 10).

Instructions :

  1. Définition de la fonction :
    • La fonction prendra en entrée une chaîne de caractères composée uniquement de 0 et 1.
    • La fonction renverra un nombre entier, qui est la représentation décimale du nombre binaire.
  2. Récursivité :
    • L’algorithme doit être défini de manière récursive.
  3. Formule de conversion :
    • La conversion d’un nombre binaire à décimal est basée sur la position des bits dans la chaîne. Le bit à la position ( n ) a une valeur de ( 2n ).
    • Exemple : pour la chaîne binaire "1011" (en base 2), la conversion en décimal se fait comme suit : [ 1×23+0×22+1×21+1×20=11 (en base 10). ]

Exemple d’entrée et de sortie :

  • Entrée : "1101"
  • Sortie : 13

Contraintes :

  • Vous devez utiliser une approche récursive, sans utiliser de boucles (ni for, ni while).
  • Ne pas utiliser de fonction Python préexistante pour convertir le binaire en décimal (comme int() avec l’argument de base).

Pseudocode (aide) :

Voici une suggestion de la manière dont vous pouvez aborder la récursion :

  • Cas de base : si la chaîne est vide, la valeur retournée est 0.
  • Récursion : prenez le premier caractère de la chaîne, convertissez-le en décimal, et appelez la fonction récursive sur le reste de la chaîne.

Bonne chance à tous, et assurez-vous de bien comprendre comment chaque bit contribue à la valeur totale du nombre en base 10 !

Laisser un commentaire

Retour en haut