09 Exos Fonctions Compléments
Exercice 1⚓︎
-
Écrire une fonction
tableavec un argumentnqui produit l’affichage de la table den(de \(n\times 1\) à \(n\times 10\)) lorsqu'on l’appelle. Tester l’instructiontable(2)dans le Shell. -
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
nde $n\times $début à $n\times $fin - par défaut,
debutvaut 1 etfinvaut 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\) ;
maistable(9, 0, 12)va afficher la table de 9 entre \(9\times 0\) et \(9\times 12\) ;
-
Comment appeler la fonction pour faire afficher la table de 7 entre \(7\times 1\) et \(7\times 12\) ?
Exercice 2⚓︎
-
Écrire une fonction (ou procédure)
repetequi répète le mot ’NSI’ un certain nombre de fois au choix, passé en paramètre. -
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⚓︎
-
É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. -
Écrire une fonction
est_constructiblequi 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 Pythona = 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. -
Utiliser la fonction
inputet les deux fonctions précédentes pour écrire une fonctionsaisie_puis_perimetrequi 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
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 :
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 :
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.
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⚓︎
-
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.
-
(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\)).