Aller au contenu

09 Exos Fonctions Compléments

Exercice 1⚓︎

  1. Écrire une fonction table avec un argument n qui produit l’affichage de la table de n (de \(n\times 1\) à \(n\times 10\)) lorsqu'on l’appelle. Tester l’instruction table(2) dans le Shell.

  2. Modifier la fonction précédente de la manière suivante :

    • elle prend maintenant 3 paramètres : n, debut, fin
    • elle va afficher la table de n de $n\times $début à $n\times $fin
    • par défaut, debut vaut 1 et fin vaut 10, mais on peut décider de les modifier lors de l'appel de la fonction.
      Ainsi, table(9) va afficher la table de 9 entre \(9\times 1\) et \(9\times 10\) ;
      mais table(9, 0, 12) va afficher la table de 9 entre \(9\times 0\) et \(9\times 12\) ;
  3. Comment appeler la fonction pour faire afficher la table de 7 entre \(7\times 1\) et \(7\times 12\) ?

Exercice 2⚓︎

  1. Écrire une fonction (ou procédure) repete qui répète le mot ’NSI’ un certain nombre de fois au choix, passé en paramètre.

  2. Par défaut, le texte sera répété 2 fois.

Exercice 3⚓︎

Écrire une fonction qui prend en paramètres deux nombres x et y et renvoie le résultat de x² + y².

Exercice 4⚓︎

  1. Écrire une fonction perimetre_triangle() qui prend en paramètres les 3 longueurs des côtés d’un triangle (en cm) et qui retourne son périmètre.

  2. Écrire une fonction est_constructible qui renvoie s’il est possible de construire un triangle avec trois segments de mesures données. Cette fonction devra renvoyer un booléen. Cette fonction retourne un booléen que l'on peut utiliser directement dans un test :

    🐍 Script Python
    a = 5
    b = 6
    c = 2
    if est_constructible(a, b, c):
        print(f"Le triangle de côtés de longueurs {a}, {b}, {c} est constructible.")
    else:
        print(f"Le triangle de côtés de longueurs {a}, {b}, {c} n'est pas constructible.")
    ### Le triangle de côtés de longueurs 5, 6, 2 est constructible.
    a = 12
    b = 4
    c = 3
    if est_constructible(a, b, c):
        print(f"Le triangle de côtés de longueurs {a}, {b}, {c} est constructible.")
    else:
        print(f"Le triangle de côtés de longueurs {a}, {b}, {c} n'est pas constructible.")
    ### Le triangle de côtés de longueurs 12, 4, 3 n'est pas constructible.
    

  3. Utiliser la fonction input et les deux fonctions précédentes pour écrire une fonction saisie_puis_perimetre qui demande à l'utilisateur la longueur de chaque côté d’un triangle (en cm) et, si celui-ci est bien constructible, retourne son périmètre.

Factorisation de code⚓︎

Exercice 5⚓︎

Voici une fonction qui affiche à l'écran les paroles de la chanson "Babar" : https://comptines.tv/babar

🐍 Script Python
def paroles_Babar():
    print("""Babar dans la forêt
Partit se promener
Babar a rencontré
Un oiseau bleu qui faisait
Cui,Cui,Cui,Cui,Cui,Cui,
Cui,Cui,Cui,Cui,Cui,Cui,

Babar dans la forêt
Partit se promener
Babar a rencontré
Un canard gris qui faisait
Coin,Coin,Coin,Coin,Coin,Coin,
Coin,Coin,Coin,Coin,Coin,Coin,

Babar dans la forêt
Partit se promener
Babar a rencontré
Un corbeau noir qui faisait
Croa,Croa,Croa,Croa,Croa,Croa,
Croa,Croa,Croa,Croa,Croa,Croa,

Babar dans la forêt
Partit se promener
Babar a rencontré
Un grillon vert qui faisait
Cri,Cri,Cri,Cri,Cri,Cri,
Cri,Cri,Cri,Cri,Cri,Cri,
""")

paroles_Babar()

Exercice 6⚓︎

Factoriser le code suivant :

🐍 Script Python
from turtle import *
up()
goto(-300, 0)
#première maison
down()
forward(90)
left(90)
forward(60)
left(30)
forward(30)
left(120)
forward(30)
right(60)
forward(60)
left(90)
forward(60)
left(90)
up()
forward(120)
#deuxième maison
down()
forward(150)
left(90)
forward(100)
left(30)
forward(50)
left(120)
forward(50)
right(60)
forward(100)
left(90)
forward(100)
left(90)
up()
forward(200)
#troisième maison
down()
forward(210)
left(90)
forward(140)
left(30)
forward(70)
left(120)
forward(70)
right(60)
forward(140)
left(90)
forward(140)
left(90)
up()
forward(280)

done() ## pour la version sur Capytale
a = input() ## sur un autre éditeur, on peut aussi mettre un imput() pour éviter que la fenêtre ne se ferme...

Exercice 7⚓︎

L'anniversaire de Théo tombe le 29 février. Il a rédigé un programme qui affiche s'il aura un 29 février cette année ou non.

Il l'a codé de la manière suivante :

🐍 Script Python
def annee_chouette(a):
    if a%400 == 0 or (a%4 == 0 and a%100 != 0) :
        print("Chouette, cette année, j'ai un anniversaire !")
    else:
        print("Tant pis, encore pas cette année...")

Conformément aux "bonnes pratiques", créez une fonction bien nommée pour calculer le booléen correspondant au test du if.

Exercice 8⚓︎

Le programme suivant est tout a fait optimisé, sans répétition dans l'écriture.

🐍 Script Python
from turtle import *

def figure1():
    for i in range(6):
        down()
        for j in range(10):
            for k in range(6):
                forward(50)
                left(60)
            left(36)
        up()
        left(60)
        forward(120)

up()
goto(0, -100)
speed(10)
down()
figure1()
done() ## pour Capytale

Mais, d'une part, il contient des boucles dans des boucles, et d'autre part, il apparaît nettement qu'il est composé de petites parties auxquelles il est aisé de donner du sens (qui dessinent une figure plutôt simple).

Séparer ce code avec des plus petites fonctions bien nommées qui pourront être appelées dans la fonction figure1().

Exercice 9 - pour les plus rapides⚓︎

  1. Ecrire une fonction qui prend en paramètres les 3 longueurs des côtés d’un triangle (en cm) et renvoie son aire en sortie.

    Indication. Faire une recherche internet sur la formule de Héron.

    On testera le programme à l’aide d’un triangle rectangle (dimensions de votre choix) dont l’aire est facile à calculer.

  2. (Source Wikipédia) La formule de Héron présente une instabilité lors du calcul numérique, qui se manifeste pour les triangles en épingle, c’est-à-dire dont un côté est de dimension très petite par rapport aux autres (confrontation de petites et grandes valeurs).

    a. Tester avec des valeurs extrêmes (exemple : \(a = b = 1000000000\) et \(c = 0,000000001\)).

    b. En choisissant les noms de côtés de sorte à ce que \(a > b > c\), et en réorganisant les termes de façon à optimiser les grandeurs ajoutées ou soustraites, on obtient la formule de Kahan, plus stable :

\(A=\frac{1}{4}\sqrt{(a+(b+c))(c-(a-b))(c+(a-b))(a+(b-c))}.\)

Editer une nouvelle fonction utilisant cette formule de Kahan, puis tester les deux fonctions avec des valeurs extrêmes (exemple : \(a = b = 1000000000\) et \(c = 0,000000001\)).