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.

  1. def convertit_min_sec(min):
      return min * 60
    
    convertit_min_sec(145)
    print("145 minutes donnent", nb_sec, "secondes.")
    
  2. def convertit_sec_min(sec):
      min = sec / 60
    
    nb_minutes = convertit_sec_min(38700)
    print("38700 secondes donnent", nb_minutes, "minutes.")
    
  3. def calcule_double_moins_trois(x):
      x = 2 * x
      return x
      x = x - 3
    
    print(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)

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à

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à

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à

Exercice 6#

  1. Écrivez une fonction qui convertit des bits en octets.

  2. Écrivez une fonction qui convertit des octets en bits.

  3. Convertissez 3664000 bits en octets.

  4. Convertissez 512 octets en bits.

# Écrire le programme ici

Exercice 7#

Pour calculer l'aire totale de la figure ci-dessous:

  1. Écrivez une fonction qui permet de calculer l'aire d'un rectangle en connaissant la longueur et la largeur.

  2. Calculez l'aire totale de la figure.

Aire totale
# Écrivez le programme ici

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.")

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.")

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))

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

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:

  1. 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.

  2. contenir une fonction est_diviseur() qui teste si un nombre est diviseur d'un autre nombre.

  3. 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

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()...

  1. qui compte de 0 à un nombre donné appelé stop:

    def compteur(stop):
      # à compléter
    
    compteur(11)
    
  2. qui compte de start à stop avec start < stop:

    def compteur(start, stop):
      # à compléter
    
    compteur(4, 11)
    
  3. 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)