TP 4 - Fonctions
Les parties en italique sont des approfondissements qui pourraient être utiles.
L'instruction def
permet de définir une fonction. Cela permet d'éviter de réécrire le même code à plusieurs endroits dans un programme et de réutiliser aisément des morceaux de code. On peut ainsi appeler la fonction à tout moment dans le programme.
Définir une fonction
Pour créer une fonction, on utilise le mot-clé def
suivi du nom de la fonction, de ses paramètres entre parenthèses, et d’un deux-points. Le corps de la fonction est indenté. Par exemple :
Attention : dès qu'un return
est rencontré, la fonction se termine. Ici, le second return
ne sera jamais atteint.
Différentes formes usuelles de fonctions
- Procédures
Une fonction qui n'utilise pas de return
est appelée une procédure. Elle sert principalement à exécuter des instructions (par exemple, afficher des résultats) sans renvoyer de valeur.
- Fonctions avec conditions
On peut intégrer des conditions dans une fonction pour modifier son comportement en fonction des valeurs d'entrée :
- Fonctions avec plusieurs arguments
Les fonctions peuvent prendre plusieurs paramètres, ce qui permet de travailler sur plusieurs valeurs à la fois :
- Fonctions appelant d’autres fonctions
Une fonction peut faire appel à une autre pour réaliser une tâche plus complexe :
- Fonctions récursives
Une fonction récursive s'appelle elle-même pour résoudre un problème en le décomposant en sous-problèmes plus simples. Il est essentiel de prévoir une condition d'arrêt pour éviter une récursion infinie.
Quelques exemples :
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
def puissance(x, n):
"""
Calcul de la puissance n-ième d’un réel x.
"""
if n == 0:
if x == 0:
print("impossible")
else:
return 1
elif n % 2 == 0:
y = puissance(x, n // 2) ** 2
else:
y = x * puissance(x, n - 1)
return y
x = eval(input("Entrer le réel x : "))
n = eval(input("Entrer la puissance entière positive n : "))
print(puissance(x, n))
def u(n):
"""
Calcule le n-ième terme de la suite définie par :
U_0 = 1
U_n = (U_{n-1} + 1) / (U_{n-1} + 2)
"""
if n == 0:
return 1
# Appel récursif :
u_prec = U(n - 1)
return (u_prec + 1) / (u_prec + 2)
def count_digits(n):
"""
Renvoie le nombre de chiffres qui composent l'entier n.
On utilise la division euclidienne par 10 pour retirer le dernier chiffre.
"""
n = abs(n) # On travaille avec la valeur absolue pour gérer les nombres négatifs
if n < 10:
return 1 # Cas de base : s'il n'y a qu'un seul chiffre, on renvoie 1.
else:
return 1 + count_digits(n // 10)# Appel récursif : on enlève le dernier chiffre et on ajoute 1 au résultat.
# Exemples de test :
print(count_digits(5)) # Affiche 1
print(count_digits(1234)) # Affiche 4
print(count_digits(0)) # Affiche 1
print(count_digits(-98765)) # Affiche 5