Académique Documents
Professionnel Documents
Culture Documents
3) À éviter… à faire
a) Afichage intempestif
Sauf si l’énoncé le demande, une fonction ne fait pas d’afchage, elle réalise un traitement et produit géné-
ralement un résultat qu’elle retourne.
b) Saisie intempestive
Sauf si l’énoncé le demande, une fonction ne fait pas de saisie, elle trouve ce dont elle a besoin dans ses
paramètres et/ou dans des variables globales.
Si besoin sur plusieurs lignes (la première est une indication de l'usage).
blabla
"""
def mafonction(params) :
"""Documentation de la fonction, indentée comme le bloc de code.
3) Efets de bord
La troisième partie du script montre qu’une fonction peut modifer une variable globale gliste mutable direc-
tement, sans avoir à spécifer la directive globale, car elle accède à la valeur (ici la liste) et modife directement
le contenu de cete valeur sans avoir à passer par une réafectation.
Plus insidieusement, cela montre aussi que si une fonction modife le contenu d’une valeur mutable qui lui est
donnée en paramètre (maliste), cete modifcation persiste dans cete valeur après l’appel de la fonction (tant
que cete valeur existe).
On évitera au maximum d’utiliser ces efets de bords, et autant que possible de modifer des variables globales
à partir de l’intérieur des fonctions.
Ψ Fournissez une valeur par défaut "Madame, Monsieur" pour le paramètre civilite et une valeur par
défaut "Veuillez agréer {civilite} {identite}, l'expression de mes sentiments distingués" pour
le paramètre formule.
Ψ Appelez cete fonction en fournissant les trois paramètres, seulement deux (premier et second, premier et
dernier), seulement le premier.
Ψ Défnissez une fonction stritems() acceptant un nombre variable de valeurs numériques en argument, et
retournant une chaîne de caractères contenant les représentations textuelles de ces nombres séparées par des
deux-points.
Par exemple : stritems(1, 4.3, 6, -3)
retourne "1:4.3:6:-3"
Défnissez une liste lst avec les nombres de 1 à 100 compris. Écrivez l’appel à stritems() utilisant cete
liste en argument (opération spéciale de « décapsulation de liste » en arguments).
Défnissez une fonction calcul(x) qui retourne la valeur de 1+2x. Appliquez la fonction afficheur() à
votre fonction calcul().
2) Fonction de saisie
Créez un fchier module Python TP4pourcent.py dans votre répertoire de TP.
Écrivez une fonction saisie_pourcents() qui efectue trois saisies de valeurs fotantes correspondant à des
pourcentages de « pour », « contre » et « abstentions » (demander des valeurs entre 0 % et 100%) et retourne
ces trois valeurs. Note : là on demande explicitement que la fonction fasse faire la saisie à l’utilisateur.
Utiliser cete fonction dans une boucle qui ré-exécute la saisie tant que que la somme des trois valeurs est difé-
rente de 100 (comme les valeurs sont fotantes, on autorisera un epsilon de 10 -10).
Afchez fnalement les trois valeurs valides.
3) Calcul de polynôme
Créez un fchier module Python TP4polynome.py dans votre répertoire de TP.
2 - On utilise args par convention, il est possible de choisir un autre nom de paramètre.
4 IV - Travail personnel à rendre
Défnissez une fonction polynome() qui accepte un premier paramètre x, suivi d’un nombre variable de coefc-
ients d’un polynôme, ordonnés par ordre croissant des puissances (les coefcients peuvent être nuls pour cer-
taines puissances). Cete fonction calcule et retourne la valeur du polynôme appliqué à x.
• polynome(x) calcule 0.
• polynome(x, a) calcule ax0
• polynome(x, a, b) calcule ax0 + bx1.
• polynome(x, a, b, c) calcule ax0 + bx1 + cx2.
• polynome(x, a, b, c, d) calcule ax0 + bx1 + cx2 + dx3.
• etc.
(vérifez votre fonction sur quelques cas faciles)
Demandez à l’utilisateur de saisir un nombre variable de coefcients (sortir de la boucle sur une saisie vide),
puis de saisir une valeur de début, une valeur de fn et une valeur de pas (en considérant fn>début et pas>0).
Afchez les résultats des calculs du polynôme correspondant aux coefcients saisis pour les valeurs de début à
fn avec le pas donné.
4) Tracé de courbe
Créez un fchier module Python TP4courbe.py dans votre répertoire de TP.
En reprenant l'exemple de tracé de courbe du module fourni dans le TP2 TP2_fabricliste.py, écrivez une
fonction courbe(lstx, lsty, labelx, labely, titre) qui trace la courbe des valeurs de la liste lsty en fonc-
tion des valeurs de la liste lstx. Défnissez des valeurs par défaut pour les labels et le titre.
Appliquer cete fonction aux résultats de la fonction poly(x) écrite au début de ce TP, pour des valeurs de x de
-10 à +10 avec un pas de 0.1. Remplissez deux listes listex et listey avec les valeurs correspondantes, et uti-
lisez votre fonction pour tracer la courbe.
a) Aficher un segment
On défni le chemin permetant de tracer un segment :
À partir des paramètres longueur et epaisseur, comment calculer la valeurs petite_longueur des quatre
traits obliques et la valeur grande_longueur des deux grands traits ?
Écrivez une fonction segment(epaisseur, longueur, coultour, coulrempl), qui réalise les déplacements 1 à
6 de ce chemin (le déplacement 0 à la position de départ sera réalisé par ailleurs), d’une façon relative 3 et en
utilisant le remplissage de polygone avec les deux couleurs données pour le trait du contour et le remplissage).
Après le tracé du segment, un déplacement sans tracé doit être réalisé pour replacer la tortue à l’extrémité du
segment (point entre les mouvements 3 et 4) et dans la même direction que la direction initiale — comme si la
fgure constituée par le segment n’était qu’un trait épais. Le crayon sera laissé levé.
On doit arriver à une fgure du style :
b) Aficher… 7 segments
Dans la litérature électronique, les segments sont nommés de A à G comme indiqué dans la
fgure (on a omis le point décimal qui existe en bas à droite sur certains afcheurs, habituel-
lement nommé DP).
Pour savoir quels segments doivent être allumés, on utilisera simplement une chaîne de
caractères contenant les letres des segments correspondants. Représenté sous forme d’un
dictionnaire (cf dernier cours) pour chaque chifre, cela donne :
SEGMENTS = { '0': "ABCDEF",
'1': "BC",
'2': "ABGED",
'3': "ABGCD",
'4': "BCFG",
'5': "ACDFG",
'6': "ACDEFG",
'7': "ABC",
'8': "ABCDEFG",
3 - Relative → le segment doit pouvoir être tracé avec n’importe quelle orientation de base, en n’importe quel
point d’origine.
6 IV - Travail personnel à rendre
'9': "ABCDFG",
}
Écrivez une fonction sept_segments(segments, epaisseur, longueur, coultour, coulallume, couleteint)
chargée de tracer les sept segments d’un afcheur. Si un segment doit être allumé on utilisera pour le remplis-
sage la couleur coulallume, et s’il doit être éteint la couleur couleteint. (note : l’utilisation d’expressions « if
ternaire » valeur1 if cond else valeur2) peut faciliter le code).
Le tracé d’un afcheur se fera en démarrant à la pointe de jonction des segments E et D, en bas à gauche. En
combinant des tracés de segments horizontaux vers la droite et verticaux vers le haut, et en utilisant lorsque
nécessaire la mémorisation de position et le déplacement absolu vers cete position.
À la fn du tracé la tortue sera repositionnée sur le point d’origine, dans son sens d’orientation d’origine.
Testez cete fonction en traçant tous les segments allumés et un peu plus loin tous les segments éteints. Laissez
le bloc de votre code de test dans une condition if False:… (ce qui permet de le réactiver simplement).
Écrivez une fonction chiffre_segments(chiffre, epaisseur, longueur, coultour, coulallume,
couleteint) qui à partir de la représentation textuelle d’un chifre, afche celui-ci sous la forme d’un afcheur
7 segments.
Testez cete fonction en traçant un des chifres. Laissez le bloc de votre code de test dans une condition if
False:… (ce qui permet de le réactiver simplement).
c) Aficher l’heure
Écrivez une fonction affiche_heure(sheure, epaisseur, longueur, coultour, coulallume, couleteint)
qui à partir d’une chaîne de caractères représentant une heure (par exemple "11 45 02"), afche les chifres
sous forme d’afchage 7 segments, en assurant l’espace entre les chifres et un espace plus grand lorsqu’il y a
un espace.
L’afchage se fait à partir d’une position absolue de votre choix (éventuellement 0,0), toujours la même.
Bonus : permetre d’afcher les caractères ‘:’ de séparation entre heures et minutes et minutes et secondes
s’ils sont dans la chaîne.
Testez cete fonction en afchant une heure quelconque fournie directement sous forme de chaîne. Laissez le
bloc de votre code de test dans une condition if False:… (ce qui permet de le réactiver simplement).
d) Une horloge
Créez un module TP4horloge.py qui import la fonction affiche_heure du module TP4afficheur.
Dans le module standard Python time, vous trouverez une fonction strftime() permetant de formater une
heure (par défaut l’heure courante). Elle prend comme premier paramètre une chaîne de formatage qui inter-
prète les séquences%… et utilise entre autres : %H pour l’heure sur deux chifres, %M pour les minutes sur deux
chifres et %S pour les secondes sur deux chifres. Vous trouverez également une fonction sleep() qui permet
de metre en pause le programme durant une durée (nombre fotant) exprimée en secondes.
Faites une boucle qui afche 10 fois l’heure courante, avec une pause de une seconde entre deux afchages.
Ajoutez ensuite les initialisations nécessaires de turtle pour avoir un afchage rapide, ainsi que l’appel à
affiche_heure() pour afcher cete heure.
Note : joli résultat en utilisant un fond noir (t.bgcolor("black")) et des couleurs "#3F3F3F" pour le contour,
"#FFFF00" pour les segments allumés et "#0F0F0F" pour les segments éteints. Une épaisseur de 4 et une lon-
gueur de 20 permetant d’avoir les afcheurs dans la fenêtre. Par exemple pour "12:45 12" :