Vous le craigniez en rêviez, le voici : votre premier TP. Un entrainement opportun pour tester ce que nous avons appris jusqu'ici.
Enoncé
Pour notre premier TP, nous allons coder un convertisseur d'angle. Pour rappel, un angle peut, par exemple, être exprimé en degrés ou en radians. Nous ne considérons que ces deux unités dans un premier temps.
Notre convertisseur devra comporter un menu pour permettre à l'utilisateur de choisir l'action à réaliser. Par exemple :
1 2 3 4 5 6 | Options disponibles : 1 : Convertir des degrés en radians 2 : Convertir des radians en degrés q : Quitter Votre choix : |
Suite au choix de l'utilisateur, nous devrons alors, soit quitter, soit lui demander la valeur qu'il souhaite convertir. Nous utiliserons les formules suivantes pour les conversions :
Si vous ne savez pas ce qu'est un angle exprimé en radian, ne vous inquiétez pas, vous n'aurez pas besoin de le savoir pour la suite du TP, comprenez simplement qu'il s'agit d'une unité de mesure d'un angle, de la même façon que le mètre et le millimètre sont des unités de mesure d'une longueur. Pour passer d'une unité à une autre, nous utiliserons les formules données ci-dessus.
Nous afficherons ensuite le résultat de la conversion. Nous demanderons à l'utilisateur s'il souhaite quitter le programme. Si oui, on coupe tout, si non, on affiche de nouveau le menu et ainsi de suite. Cette question aura aussi l'avantage de ne pas afficher une fois de plus le menu tout de suite après la conversion, afin de mieux distinguer le résultat.
Voilà pour les consignes. Je vous recommande d'essayer de distinguer les portions de code qui peuvent former une fonction et de les séparer.
Maintenant, un petit point technique que nous verrons plus en détail bientôt, mais qui nous sera utile dans ce TP. Pour placer une variable à la suite d'une chaîne de caractère, notamment dans un print
, on utilise le +
:
1 2 | nom = "Clem" print("Bonjour " + nom) |
La variable doit être une chaîne de caractères. S’il s'agit d'un nombre, il faudra la convertir, sous peine d'erreur.
C’est à vous de jouer maintenant. Prenez le temps qu’il faut, faites-le en plusieurs fois si besoin, écrivez un petit brouillon sur papier du fonctionnement (ça peut vous aider, ne riez pas). Je vais, pour ma part, coder une proposition de correction dans mon coin. Ne copiez pas !
Correction
Voici une proposition de correction, à regarder une fois que vous avez cherché bien sûr. Ce n'est pas parce que vous n'avez pas le même code que celui proposé ci-dessous que le vôtre est faux; il existe plusieurs façons de procéder. Le code proposé est commenté afin de « parler de lui-même ».
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | # N'oubliez pas l'encodage from math import pi def deg_en_rad(deg): # Converti des degrés en radians return deg * pi / 180 def rad_en_deg(rad): # Converti des radians en degrés return rad * 180 / pi def menu(): # Affiche le menu et renvoie le choix de l'utilisateur print("\nOptions disponibles : ") # On saute une ligne au début print("1 : Convertir des degrés en radians") print("2 : Convertir des radians en degrés") print("q : Quitter\n") # On saute une ligne return input("Votre choix : ") def demande_continuer(): # On demande si l'utilisateur veut quitter avant de réafficher le menu reponse = input("Effectuer une autre conversion ? (O/N) :\n ") if reponse == "N": return False return True # On définit une variable qui fait office de drapeau continuer = True print("Super Convertisseur Degré-Radian Réversible") # Notre boucle principale permet de proposer # et d'effectuer plusieurs conversions à la suite while continuer: # On affiche le menu et on récupère le choix de l'utilisateur choix = menu() # On traite le choix de l'utilisateur en se souvenant # qu'il s'agit d'une chaine de caractères if choix == "1": # On récupère et converti l'angle donné par l'utilisateur deg = float(input("Mesure en degré : ")) # On affiche le résultat en pensant à convertir en chaine de caractères print("Mesure en radian : " + str(deg_en_rad(deg))) # On demande si l'on souhaite continuer (cela permet aussi de mieux # voir le résultat avant d'être submergé par le menu) continuer = demande_continuer() elif choix == "2": # De même dans l'autre sens de conversion rad = float(input("Mesure en radian : ")) print("Mesure en degré : " + str(rad_en_deg(rad))) continuer = demande_continuer() elif choix == "q": # On veut quitter continuer = False else: print("Option inconnue") print("\nCe convertisseur vous est juteusement offert par la Clem's Foundation") |
Je me répète, mais ce n'est pas parce que votre code souffre de quelques problèmes, ou se présente différemment, que vous devez tout effacer pour utiliser cette correction. Au contraire, gardez votre code et améliorez-le. Vous comprendrez mieux vos erreurs en les corrigeant qu'en utilisant un autre code tout prêt. Vous aurez ensuite le plaisir de faire évoluer et présenter fièrement votre création.
D'ailleurs, voici quelques idées de modifications, mais n'hésitez pas à apporter les vôtres en plus :
- Placer les fonctions de conversion dans un module séparé
- Ajouter la conversion en grades (je suis généreux, $\theta_{grades} = \theta_{radians} \times \frac{200}{\pi}$)
- Ajouter un symbole après l'affichage du résultat reflétant l'unité
- Faire un convertisseur d'unité de mesure anglaises/internationales (et ainsi sauvez de pauvres sondes spatiales)
Maintenant que les bases sont posées, nous allons nous intéresser à un concept tenant une place importante en Python : la POO.