Fonctions#
En programmation, une fonction est un 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 faciles à 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 un conseil météo:
# définition des fonctions
def conseil_meteo():
print("Mets tes lunettes de soleil et profite!")
# programme principal
print("=== Conseil météo ===")
# appel de la fonction
conseil_meteo()
Cette fonction affiche toujours le même conseil météo ce qui n'est pas très intéressant, le conseil devrait s'adapter au temps qu'il fait.
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 un conseil météo en fonction de celle-ci
# définition des fonctions
def conseil_meteo(meteo):
if meteo == "soleil":
print("Mets tes lunettes de soleil et profite!")
elif meteo == "pluie":
print("Prends ton parapluie ou tu seras trempé(e)!")
elif meteo == "neige":
print("Enfile tes gants et va faire un bonhomme de neige!")
else:
print("Hmm... je ne sais pas quoi te conseiller pour cette météo!")
# programme principal
print("=== Conseil météo ===")
# demande la météo du jour à l'utilisateur
meteo_du_jour = input("Quel temps fait-il aujourd'hui? (soleil/pluie/neige/autre): ")
# appel de la fonction en fonction de la réponse de l'utilisateur
conseil_meteo(meteo_du_jour)
Exemple 6#
# definition des fonctions
def prix_apres_reduction(prix, reduction_pourcent):
reduction = prix * reduction_pourcent / 100
prix_final = prix - reduction
print(prix_final)
# programme principal
# demande à l'utilisateur le prix et le pourcentage de réduction
prix = float(input("Prix en CHF: "))
reduc = float(input("Réduction en %: "))
prix_apres_reduction(prix, reduc)
La fonction ainsi écrite affiche le prix après réduction, mais il n'est pas possible d'utiliser la valeur.
Fonctions avec valeur de retour#
La commande return
permet de retourner le résultat d'une fonction et ainsi de
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#
# definition des fonctions
def prix_apres_reduction(prix, reduction_pourcent):
reduction = prix * reduction_pourcent / 100
prix_final = prix - reduction
return prix_final
# programme principal
print("=== Sortie shopping ===")
# demande à l'utilisateur le prix et le pourcentage de réduction
prix_pantalon = float(input("Prix du pantalon en CHF: "))
reduc_pantalon = float(input("Réduction du pantalon en %: "))
prix_veste = float(input("Prix de la veste en CHF: "))
reduc_veste = float(input("Réduction de la veste en %: "))
# sauvegarde les valeurs de retour dans des variables
prix_reduit_pantalon = prix_apres_reduction(prix_pantalon, reduc_pantalon)
prix_reduit_veste = prix_apres_reduction(prix_veste, reduc_veste)
print("Prix total des achats:", prix_reduit_pantalon + prix_reduit_veste, "CHF.")
Exercice 4#
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_secondes, "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
Il faut sauvegarder la valeur de retour dans la variable nb_secondes
1def convertit_min_sec(min): 2 return min * 60 3 4nb_secondes = convertit_min_sec(145) 5print("145 minutes donnent", nb_secondes, "secondes.")
Il manque le
return
dans la fonction. Dans ce cas, la valeur retournée estNone
.1def convertit_sec_min(sec): 2 return sec / 60 3 4nb_minutes = convertit_sec_min(38700) 5print("38700 secondes donnent", nb_minutes, "minutes.")
Le
return
n'est pas à la bonne place.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 5#
Sans l'exécuter, déterminez ce que va afficher le programme suivant. Ensuite, exécutez-le pour vérifier votre réponse.
def mystery_1(z):
z *= 2
return z
def mystery_2(x):
x -= 7
if x < 0:
return x
else:
return x % 2
y = 5
print(mystery_1(y))
print(mystery_2(y))
print(mystery_2(2 * y))
print(y // 2)
Exercice 6#
Complétez le programme ci-dessous. Nous avons défini une fonction majeur
pour
tester si une personne est majeur ou pas.
def majeur(age):
if ... :
return True
else:
return False
# Demandez son âge à l'utiliateur
age = ...
if majeur(age):
print("Tu as le droit de vote")
else:
print("Tu pourras voter dans", ..., "ans.")
Solution
def majeur(age):
if age >= 18 :
return True
else:
return False
# Demandez son âge à l'utiliateur
age = int(input("Quel âge as-tu?"))
if majeur(age):
print("Tu as le droit de vote")
else:
print("Tu pourras voter dans", 18 - age, "ans.")
Exercice 7#
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)
Exercice 8#
É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.
Astuce
Un octet contient 8 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 9#
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 10#
É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
# ne pas modifier le code ci-dessous
prix = float(input("Quel est le prix de l'article? "))
code_reduc = input("Quel est le code de réduction? ")
reduction = calcule_reduction(code_reduc)
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(input("Quel est le prix de l'article? "))
12code_reduc = input("Quel est le code de réduction? ")
13
14reduction = calcule_reduction(code_reduc)
15prix_final = prix * (1 - reduction)
16print("Le prix final est de", prix_final, "CHF.")
Exercice 11#
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
# ne pas modifier le code ci-dessous
print(amende(120,140))
print(amende(120,145))
print(amende(120,120))
Solution
1def amende(vit_autorisee, vit_mesuree):
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))
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(input("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(input("Choisir un nombre entier strictement positif:"))
14while n <= 0:
15 n = int(input("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#
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(input("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(input("Choisir un nombre entier plus grand que 0."))
8
9while n != 1:
10 n = syracuse(n)
11 print(n)