Fonctions#
En programmation, une fonction est une bloc de code (suite d'instructions) permettant de réaliser une tâche donnée et auquel nous donnons un nom. Cela permet de découper un programme en plusieurs petites tâches plus facile à résoudre. Ainsi le code est plus lisible et plus facile à comprendre. Pour cela, il est essentiel de choisir un nom de fonction qui explique ce qu'elle fait.
Astuce
Une fonction doit toujours être définie avant d'être appelée, c'est pourquoi il est préférable de placer toutes les définitions de fonctions au début du programme (après les imports et les définitions de variables globales).
Exemple 4#
Fonction qui affiche la table de multiplication de 5:
# définition de la fonction
def table_multiplication_5():
for i in range(1, 11): # i prend les valeurs de 1 à 10
print(5, "*", i, "=", 5 * i)
# appel de la fonction
table_multiplication_5()
Le problème de cette fonction est que pour afficher la table de multiplication de 6, il est nécessaire d'écrire une nouvelle fonction. Cela peut être amélioré en utilisant des paramètres.
Fonctions avec paramètres#
Un paramètre d'une fonction est une variable définie dans la fonction qui recevra une valeur lors de chaque appel de la fonction. Ainsi le comportement d'une fonction varie suivant les valeurs de ses paramètres.
Exemple 5#
Fonction qui affiche n'importe quelle table de multiplication:
def table_multiplication(n):
for i in range(1, 11):
print(n, "*", i, "=", n * i)
nombre = 6 # changer la valeur du nombre ici
table_multiplication(nombre)
Exemple 6#
# Calcule et affiche le discriminant dans la résolution d'équation du 2e degré
def discriminant(a, b, c):
delta = b ** 2 - 4 * a * c
print("Le discriminant est:", delta)
# Demande à l'utilisateur les valeurs des coefficients a, b et c
a = float(await input_line("Coefficient de x^2: "))
b = float(await input_line("Coefficient de x: "))
c = float(await input_line("Coefficient sans partie littérale: "))
discriminant(a, b, c)
La fonction ainsi écrite affiche le discriminant, mais il n'est pas possible d'utiliser la valeur, ce qui ne permet pas de calculer les solutions si elle(s) existe(nt).
Fonctions avec valeur de retour#
La commande return
permet de renvoyer le résultat d'une fonction et ainsi
pouvoir le réutiliser dans la suite du programme. Pour cela, il est nécessaire
de sauvegarder la valeur retournée dans une variable.
Exemple 7#
# Calcule et affiche le discriminant dans la résolution d'équation du 2e degré
def discriminant(a, b, c):
delta = b ** 2 - 4 * a * c
return delta
# Demande à l'utilisateur les valeurs des coefficients a, b et c
a = float(await input_line("Coefficient de x^2: "))
b = float(await input_line("Coefficient de x: "))
c = float(await input_line("Coefficient sans partie littérale: "))
delta = discriminant(a, b, c)
print(delta)
Exercice 1#
Déterminez ce que font les programmes suivants et corrigez les erreurs.
def convertit_min_sec(min): return min * 60 convertit_min_sec(145) print("145 minutes donnent", nb_sec, "secondes.")
def convertit_sec_min(sec): min = sec / 60 nb_minutes = convertit_sec_min(38700) print("38700 secondes donnent", nb_minutes, "minutes.")
def calcule_double_moins_trois(x): x = 2 * x return x x = x - 3 print(calcule_double_moins_trois(4))
Solution
1def convertit_min_sec(min): 2 return min * 60 3 4nb_secondes = convertit_min_sec(145) 5print("145 minutes donnent", nb_secondes, "secondes.")
1def convertit_sec_min(sec): 2 return sec / 60 3 4nb_minutes = convertit_sec_min(38700) 5print("38700 secondes donnent", nb_minutes, "minutes.")
1def calcule_double_moins_trois(x): 2 x = 2 * x 3 x = x - 3 4 return x 5 6print(calcule_double_moins_trois(4))
Important
return
interrompt la fonction. Tout ce qui se trouve dans la fonction, mais
après le return
sera ignoré.
1def double(x):
2 return 2*x
3 print("Ce texte ne s'affichera pas.")
4
5print(double(5))
6print("Fin du programme")
Exercice 2#
Modifiez le code de l'exemple 7 pour que le programme vérifie que le coefficient \(a\) n'est pas nul. (Dans ce cas, ce n'est pas une équation du deuxième degré et la résolution est différente.)
# Calcule et affiche le discriminant dans la résolution d'équation du 2e degré
def discriminant(a, b, c):
delta = b ** 2 - 4 * a * c
return delta
# Demande à l'utilisateur les valeurs des coefficients a, b et c
a = float(await input_line("Coefficient de x^2: "))
b = float(await input_line("Coefficient de x: "))
c = float(await input_line("Coefficient sans partie littérale: "))
# Modifier le programme à partir d'ici
delta = discriminant(a, b, c)
print(delta)
Solution
1# Calcule et affiche le discriminant dans la résolution d'équation du 2e degré
2def discriminant(a, b, c):
3 delta = b ** 2 - 4 * a * c
4 return delta
5
6# Demande à l'utilisateur les valeurs des coefficients a, b et c
7a = float(await input_line("Coefficient de x^2: "))
8b = float(await input_line("Coefficient de x: "))
9c = float(await input_line("Coefficient sans partie littérale: "))
10
11if a == 0:
12 print("Ce n'est pas une équation du deuxième degré.")
13else:
14 delta = discriminant(a, b, c)
15 print(delta)
Exercice 3#
Modifiez le code de l'exercice 2, pour afficher le
nombre de solutions de l'équation.
Rappel:
si \(\Delta < 0\), il n'y a pas de solution,
si \(\Delta = 0\), il y a une solution,
si \(\Delta > 0\), il y a 2 solutions.
# Calcule le discriminant dans la résolution d'équation du 2e degré
def discriminant(a, b, c):
return b ** 2 - 4 * a * c
# Demande à l'utilisateur les valeurs des coefficients a, b et c
a = float(await input_line("Coefficient de x^2: "))
b = float(await input_line("Coefficient de x: "))
c = float(await input_line("Coefficient sans partie littérale: "))
# Complétez le programme à partir de là
Solution
# Calcule le discriminant dans la résolution d'équation du 2e degré
def discriminant(a, b, c):
return b ** 2 - 4 * a * c
# Demande à l'utilisateur les valeurs des coefficients a, b et c
a = float(await input_line("Coefficient de x^2: "))
b = float(await input_line("Coefficient de x: "))
c = float(await input_line("Coefficient sans partie littérale: "))
if a == 0:
print("Ce n'est pas une équation du deuxième degré.")
else:
delta = discriminant(a, b, c)
if delta > 0:
print("Cette équation a deux solutions.")
elif delta == 0:
print("Cette équation a une solution.")
else:
print("Cette équation n'a pas de solution.")
Exercice 4#
Complétez le code de l'exercice 3, pour calculer les solutions de l'équation.
Astuce
Pour calculer la racine carrée d'un nombre, il faut utiliser la fonction
sqrt()
qui se trouve dans le module math. Il est donc nécessaire d'importer ce
module:
1from math import sqrt
2
3print(sqrt(54))
# Calcule le discriminant dans la résolution d'équation du 2e degré
def discriminant(a, b, c):
return b ** 2 - 4 * a * c
# Demande à l'utilisateur les valeurs des coefficients a, b et c
a = float(await input_line("Coefficient de x^2: "))
b = float(await input_line("Coefficient de x: "))
c = float(await input_line("Coefficient sans partie littérale: "))
# Complétez le programme à partir de là
Solution
1from math import sqrt
2
3# Calcule le discriminant dans la résolution d'équation du 2e degré
4def discriminant(a, b, c):
5 return b ** 2 - 4 * a * c
6
7# Demande à l'utilisateur les valeurs des coefficients a, b et c
8a = float(await input_line("Coefficient de x^2: "))
9b = float(await input_line("Coefficient de x: "))
10c = float(await input_line("Coefficient sans partie littérale: "))
11
12if a == 0:
13 print("Ce n'est pas une équation du deuxième degré.")
14else:
15 delta = discriminant(a, b, c)
16 if delta > 0:
17 x_1 = (-b + sqrt(delta)) / (2 * a)
18 x_2 = (-b - sqrt(delta)) / (2 * a)
19 print("Cette équation a deux solutions: x_1 =", x_1, "et x_2 =", x_2)
20 elif delta == 0:
21 x = -b / (2 * a)
22 print("Cette équation a une solution: x =", x)
23 else:
24 print("Cette équation n'a pas de solution.")
Exercice 5#
Complétez le programme de l'exercice 4, pour calculer aussi la solution si \(a = 0\), c'est-à-dire que l'équation donnée est une équation du premier degré.
# Calcule le discriminant dans la résolution d'équation du 2e degré
def discriminant(a, b, c):
return b ** 2 - 4 * a * c
# Demande à l'utilisateur les valeurs des coefficients a, b et c
a = float(await input_line("Coefficient de x^2: "))
b = float(await input_line("Coefficient de x: "))
c = float(await input_line("Coefficient sans partie littérale: "))
# Complétez le programme à partir de là
Solution
1from math import sqrt
2
3# Calcule le discriminant dans la résolution d'équation du 2e degré
4def discriminant(a, b, c):
5 return b ** 2 - 4 * a * c
6
7# Demande à l'utilisateur les valeurs des coefficients a, b et c
8a = float(await input_line("Coefficient de x^2: "))
9b = float(await input_line("Coefficient de x: "))
10c = float(await input_line("Coefficient sans partie littérale: "))
11
12if a == 0:
13 x = -c / b
14 print("Cette équation a une solution: x =", x)
15else:
16 delta = discriminant(a, b, c)
17 if delta > 0:
18 x_1 = (-b + sqrt(delta)) / (2 * a)
19 x_2 = (-b - sqrt(delta)) / (2 * a)
20 print("Cette équation a deux solutions: x_1 =", x_1, "et x_2 =", x_2)
21 elif delta == 0:
22 x = -b / (2 * a)
23 print("Cette équation a une solution: x =", x)
24 else:
25 print("Cette équation n'a pas de solution.")
Exercice 6#
Écrivez une fonction qui convertit des bits en octets.
Écrivez une fonction qui convertit des octets en bits.
Convertissez 3664000 bits en octets.
Convertissez 512 octets en bits.
# Écrire le programme ici
Solution
1# Convertit des bits en octets
2def conversion_bits_octets(a):
3 return a / 8
4
5# Convertit des bits en octets
6def conversion_octets_bits(a):
7 return a * 8
8
9nb_octets = conversion_bits_octets(3664000)
10print("La conversion de 3664000 bits en octets donne", nb_octets)
11
12nb_bits = conversion_octets_bits(512)
13print("La conversion de 512 octets en bits donne", nb_bits)
Exercice 7#
Pour calculer l'aire totale de la figure ci-dessous:
Écrivez une fonction qui permet de calculer l'aire d'un rectangle en connaissant la longueur et la largeur.
Calculez l'aire totale de la figure.
# Écrivez le programme ici
Solution
1def calcule_aire_rectangle(longueur, largeur):
2 return longueur * largeur
3
4aire_rectangle_1 = calcule_aire_rectangle(7.5, 3.4)
5aire_rectangle_2 = calcule_aire_rectangle(5.8, 3.4)
6aire_totale = aire_rectangle_1 + aire_rectangle_2
7print("Aire totale:", aire_totale)
Exercice 8#
Pour les prochaines vacances, vous décidez de partir en vacances au Japon. Vous avez de l'argent sur un compte épargne et de l'argent que vous avez gagner en travaillant cet été.
Écrivez un programme qui permet de convertir en YEN les montants qui sont sur un
compte épargne et sur un compte courant afin de déterminer le montant que vous
aurez à disposition.
Le taux est de 1 CHF = 174 YEN.
def convertit_chf_en_yen(montant_chf):
# à compléter
compte_courant_chf = 1540
compte_epargne_chf = 2467
# Complétez le programme
budget_yen =
print("Tu auras", budget_yen, "YEN.")
Solution
1# Compléter la fonction
2def convertit_chf_en_yen(montant_chf):
3 taux_conversion = 174
4 return montant_chf * taux_conversion
5
6
7compte_courant_chf = 1540
8compte_epargne_chf = 2467
9
10budget_yen = convertit_chf_en_yen(1540) + convertit_chf_en_yen(2467)
11print("Tu auras", budget_yen, "YEN.")
Exercice 9#
Écrivez une fonction qui prend en paramètre un code de réduction et retourne le pourcentage de rabais donné par ce code de réduction. Le code déjà donné utilise cette fonction pour calculer le prix final d'un article après y avoir appliqué la réduction. Les réductions sont les suivantes :
20% (0.2) pour le code SUN
35% (0.35) pour le code STX
50% (0.5) pour le code MAX
0% (0) pour les autres codes
def calcule_reduction(code):
# à compléter
prix = float(await input_line("Quel est le prix de l'article? "))
code = await input_line("Quel est le code de réduction? ")
reduction = calcule_reduction(code)
prix_final = prix * (1 - reduction)
print("Le prix final est de", prix_final, "CHF.")
Solution
1def calcule_reduction(code):
2 if code == "SUN":
3 return 0.2
4 elif code == "STX":
5 return 0.35
6 elif code == "MAX":
7 return 0.5
8 else:
9 return 0
10
11prix = float(await input_line("Quel est le prix de l'article? "))
12code = await input_line("Quel est le code de réduction? ")
13
14reduction = calcule_reduction(code)
15prix_final = prix * (1 - reduction)
16print("Le prix final est de", prix_final, "CHF.")
Exercice 10#
Pour calculer le prix de l'amende à payer en cas de dépassement de vitesse, consulter le document suivant: Liste sanctions
Écrivez une fonction qui retourne le prix de l'amende à payer en fonction de la vitesse autorisée et la vitesse mesurée par le radar. Traitez seulement le cas où le dépassement de vitesse a lieu sur l'autoroute et n'excède pas 25 km/h.
def amende(vit_autorisee, vit_mesuree):
# à compléter
print(amende(120,140))
print(amende(120,145))
print(amende(120,120))
Solution
1def amende(vit_aut, vit_mes):
2 depassement = vit_mesuree - vit_autorisee
3 if depassement <= 0:
4 return 0
5 elif depassement <= 5:
6 return 20
7 elif depassement <= 10:
8 return 60
9 elif depassement <= 15:
10 return 120
11 elif depassement <= 20:
12 return 180
13 elif depassement <= 25:
14 return 260
15 else:
16 return -100
17
18print(amende(120,140))
19print(amende(120,145))
20print(amende(120,120))
Exercice 11#
La suite de Syracuse est une suite d'entiers naturels définie de la manière suivante:
si le nombre est pair, diviser par 2,
sinon multiplier par 3 et ajouter 1.
Cette suite à la particularité de toujours se terminer par 4, 2, 1.
Écrivez un programme qui demande à l'utilisateur de choisir un nombre et affiche la suite de Syracus (jusqu'à ce que la suite arrive à 1).
def syracuse(n):
# à compléter
n = int(await input_line("Choisir un nombre entier plus grand que 0."))
# Complétez le programme
Solution
1def syracuse(n):
2 if n % 2 == 0:
3 return n // 2
4 else:
5 return 3 * n + 1
6
7n = int(await input_line("Choisir un nombre entier plus grand que 0."))
8
9while n != 1:
10 n = syracuse(n)
11 print(n)
Astuce
Pour faciliter la compréhension de code, il est courant de créer des fonctions
qui testent une certaine condition. Par exemple, la fonction est_pair(n)
retourne True
si la nombre est pair et False
sinon.
1def est_pair(nombre):
2 if nombre % 2 == 0:
3 return True
4 else:
5 return False
6
7print(est_pair(107))
Exercice 12#
Écrivez un programme qui demande à l'utilisateur un nombre entier strictement positif et affiche tous ses diviseurs. Ce programme doit:
contenir un procédé qui vérifie que la réponse de l'utilisateur est bien un nombre strictement positif. Si ce n'est pas le cas, lui demander un autre nombre.
contenir une fonction
est_diviseur()
qui teste si un nombre est diviseur d'un autre nombre.contenir une fonction
est_premier()
qui teste si un nombre est premier.
def est_diviseur(nombre, diviseur):
# à compléter
def est_premier(nb_diviseurs):
# à compléter
n = int(await input_line("Choisir un nombre entier strictement positif:"))
# Complétez le programme
Solution
1def est_diviseur(nombre, diviseur):
2 if nombre % diviseur == 0:
3 return True
4 else:
5 return False
6
7def est_premier(nb_diviseurs):
8 if n == 2:
9 return True
10 else:
11 return False
12
13n = int(await input_line("Choisir un nombre entier strictement positif:"))
14while n <= 0:
15 n = int(await input_line("Le nombre doit être stritement positif!"
16 "Choisir un nombre entier strictement positif:"))
17
18nb_diviseurs = 0
19
20for i in range(1, n + 1):
21 if est_diviseur(n, i):
22 print(i, "est diviseur de", n)
23 nb_diviseurs += 1
24
25if est_premier(nb_diviseurs):
26 print(n, "est un nombre premier.")
27else:
28 print(n, "n'est pas un nombre premier.")
Important
L'ordre des paramètres lors de l'appel de la fonction doit être le même que lors de la définition de la fonction.
Exercice 13#
Créez une fonction compteur()
...
qui compte de 0 à un nombre donné appelé
stop
:def compteur(stop): # à compléter compteur(11)
Solution
Version avec une boucle while
1def compteur(stop): 2 i = 0 3 while i <= stop: 4 print(i) 5 i += 1 6 7compteur(11)
Version avec une boucle for
1def compteur(stop): 2 for i in range(stop + 1): 3 print(i) 4 5compteur(11)
qui compte de
start
àstop
avecstart
<stop
:def compteur(start, stop): # à compléter compteur(4, 11)
Solution
Version avec une boucle while
1def compteur(start, stop): 2 i = start 3 while i <= stop: 4 print(i) 5 i += 1 6 7compteur(4, 11)
Version avec une boucle for
1def compteur(start, stop): 2 for i in range(start, stop + 1): 3 print(i) 4 5compteur(4, 11)
qui compte de
start
àstop
avec un pas donnéstep
(de 2 en 2 ou de 3 en 3):def compteur(start, stop, step): # à compléter compteur(4, 11, 3)
Solution
Version avec une boucle while
1def compteur(start, stop, step): 2 i = start 3 while i <= stop: 4 print(i) 5 i += step 6 7compteur(4, 11, 3)
Version avec une boucle for
1def compteur(start, stop, step): 2 for i in range(start, stop + 1, step): 3 print(i) 4 5compteur(4, 11, 3)