Licence CC BY-NC-SA

TP: Premier du nom

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 :

$$ \begin{aligned} \theta_{degrés} &= \theta_{radians} \times \frac{180}{\pi} \\ \theta_{radians} &= \theta_{degrés} \times \frac{\pi}{180} \end{aligned} $$

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 ! :diable:

Correction

Voici une proposition de correction, à regarder une fois que vous avez cherché bien sûr. :p 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.