Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Définition de fonctions en Python

L'instruction assert Fonctions récursives


Accès rapide :
La vidéo
Contenu détaillé
Travaux pratiques
Les énoncés
Les corrections

La vidéo

Cette vidéo vous montre comment définir des fonctions en Python. Les notions de paramètres, de variables locales et de valeurs de retour y sont détaillées.


Définition de fonctions en Python.

Contenu détaillé

En cours d'écriture : prochainement disponible.

Travaux pratiques

Les énoncés

Exercice 1 : Coder une fonction power qui élève une valeur à une puissance donnée. Bien entendu et même si l'opérateur ** (natif en Python) réaliser cette opération, veuillez ne pas l'utiliser et coder votre fonction grâce à une boucle : l'objectif étant de s'entrainer à coder une fonction.

Exercice 2 : Coder une fonction qui calcule la valeur du nombre d'Euler (aussi appelée constante de Neper et valant environ 2.718281828459045) à un rang donné en vous basant sur la définition suivante :

Définition proposée par Euler pour la définition de la constante e.
le rang correspond à l'indice n dans l'équation ci-dessus.

Exercice 3 : écrire une fonction pdcg qui calcule le plus grand diviseur commun de deux entiers passés en paramètres. Il vous est demandé d'utiliser l'algorithme d'Euclide dont voici l'organigramme (Source Wikipedia).

L'algorithme d'Euclide
encore une fois, cette fonction existe déjà en Python, mais c'est pour s'entrainer.

Comme toujours, essayez de faire ces exercices sans regarder directement la correction ci-dessous. ;-)

Les corrections

Exercice 1 : voici comment coder un fonction power de calcul de puissance. Afin de vérifier le bon fonctionnement du code, j'affiche les premières puissances de 2.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
def power(value, pow_value):
    result = 1
    while pow_value > 0:
        result *= value
        pow_value -= 1
    return result


for i in range(16):
    print(power(2, i))
Correction de l'exercice 1

Et voici le résultat produit par cet exemple.

1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768

Exercice 2 : voici comment coder la fonction demandée. Dans la correction proposées, c'est la fonction factorial proposée par le module math de Python qui est utilisée. Pour autant, vous auriez pu utiliser votre propre implémentation de la fonction factorielle.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
import math


def compute_e(rank):
    e = 1
    for i_rank in range(1, rank + 1):
        e += 1 / math.factorial(i_rank)
    return e


for i in range(0, 18):
    print(i, "=>", compute_e(i))

print("--- Vérification de la validité de notre calcul ---")
print("e = ", math.e)
Correction de l'exercice 2

Et voici le résultat produit par cet exemple.

0 => 1
1 => 2.0
2 => 2.5
3 => 2.6666666666666665
4 => 2.708333333333333
5 => 2.7166666666666663
6 => 2.7180555555555554
7 => 2.7182539682539684
8 => 2.71827876984127
9 => 2.7182815255731922
10 => 2.7182818011463845
11 => 2.718281826198493
12 => 2.7182818282861687
13 => 2.7182818284467594
14 => 2.71828182845823
15 => 2.718281828458995
16 => 2.718281828459043
17 => 2.7182818284590455
--- Vérification de la validité de notre calcul ---
e = 2.718281828459045

Exercice 3 : voici une proposition de correction pour notre fonction pgcd.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
def pgcd(a, b):
    if not isinstance(a, int):
        raise TypeError("a must be an integer")
    if not isinstance(b, int):
        raise TypeError("b must be an integer")

    while b != 0:
        r = a % b
        a = b
        b = r

    return a


# Un petit test de notre fonction
num = 3 * 7 * 11
den = 7 * 11 * 13 * 17
divisor = pgcd(num, den)

num //= divisor
den //= divisor

print("divisor =", divisor)
print(f"[{num}/{den}]")
Correction de l'exercice 3

Et voici le résultat produit par cet exemple.

divisor = 77
[3/221]


L'instruction assert Fonctions récursives