print, input… et un convertisseur de coordonnées GPS
Un programme devient vraiment utile quand il pose des questions et affiche des réponses. À la fin de cette partie, tu auras programmé un convertisseur de coordonnées GPS.
CoursAfficher : print
print affiche plusieurs éléments séparés par des virgules. Python ajoute un espace entre eux et passe à la ligne à la fin.
afficher.py
a = 7
b = 5print("La somme vaut", a + b) # La somme vaut 12print(f"{a} x {b} = {a * b}") # 7 x 5 = 35print(round(22 / 7, 3)) # 3.143
À retenir
Un texte s'écrit entre guillemets : "La somme vaut".
Dans une f-chaînef"...", ce qui est entre accolades { } est remplacé par sa valeur.
round(x, 2) arrondit x à 2 chiffres après la virgule.
CoursDemander : input
bonjour.py
prenom = input("Quel est ton prénom ? ")
print("Bonjour", prenom)
input affiche la question, attend que l'utilisateur tape une réponse et appuie sur Entrée, puis renvoie ce qui a été tapé.
Vigilance : input renvoie toujours du texte
Si l'utilisateur tape 12, input renvoie le texte"12", pas le nombre 12. Et "12" + "3" donne "123" !
Pour obtenir un nombre, on convertit : int(...) pour un entier, float(...) pour un nombre décimal.
À l'exécution, l'utilisateur doit taper les décimaux avec un point : 12.5.
produit.py
a = int(input("Premier entier : "))
b = int(input("Second entier : "))
print(f"{a} x {b} = {a * b}")
Type
Nom en Python
Exemples
Conversion
entier
int
12, -3
int("12") → 12
décimal
float
12.5, 3E8
float("12.5") → 12.5
texte (chaîne)
str
"Bonjour", "12"
str(12) → "12"
Vigilance
int(input("...")) : deux parenthèses fermantes à la fin, une pour input, une pour int.
ExercicesDes programmes qui dialoguent
EX 25Je m'entraîne🌶️prise en main
Exercice 25 — Bonjour
Écris un programme qui demande le prénom et l'âge de l'utilisateur, puis affiche par exemple :
console
Bonjour Léa, dans 10 ans tu auras 25 ans.
Indice
L'âge doit être converti avec int pour pouvoir lui ajouter 10.
💾 NOM_Prenom_ex25.py
EX 26Je m'entraîne🌶️prise en main
Exercice 26 — Le produit
Recopie produit.py, teste-le, puis modifie-le pour qu'il affiche aussi la somme et la différence des deux entiers.
Indice
Ajoute deux lignes print(f"...") sur le même modèle.
💾 NOM_Prenom_ex26.py
EX 27Je m'entraîne🌶️🌶️application
Exercice 27 — La division euclidienne, en clair
Complète ce programme pour qu'il demande un dividende et un diviseur, puis affiche l'égalité de la division euclidienne.
On multiplie la partie décimale par 60 : \(0{,}1646098 \times 60 = 9{,}876588\), donc \(m = 9\).
On multiplie la nouvelle partie décimale par 60 : \(0{,}876588 \times 60 = 52{,}59528\), donc \(s \approx 52{,}6\).
Résultat : 44° 9′ 52,6″ N. En Python, la partie entière d'un nombre positif s'obtient avec int : int(44.1646098) donne 44.
Vigilance
Ces méthodes valent pour des coordonnées positives (nord et est). À l'ouest de Greenwich (Bretagne, Bordeaux…), la longitude est négative en DD : on verra dans la partie 4 comment gérer N/S/E/O.
Les calculs décimaux sont approchés (exercice 18) : on arrondit les secondes, par exemple à 0,1″ près.
ExercicesConstruire le convertisseur
EX 30Je m'entraîne🌶️prise en main
Exercice 30 — À la main d'abord
Avec la calculatrice, convertis en DD la latitude de la tour Eiffel : 48° 51′ 30″.
Convertis en DMS sa longitude : 2,2945° E.
Indice
Pour la question 2 : \(d = 2\), puis \(0{,}2945 \times 60 = \ldots\)
💾 NOM_Prenom_ex30.py
EX 31Je m'entraîne🌶️🌶️application
Exercice 31 — De DMS vers DD
Écris un programme qui demande les degrés, les minutes et les secondes d'un angle, puis affiche sa valeur en degrés décimaux, arrondie à 6 chiffres après la virgule.
Teste-le avec la tour Eiffel (48° 51′ 30″) : tu dois retrouver ta réponse de l'exercice 30.
Indice 1
Les secondes peuvent être décimales (52.6) : utilise float.
Indice 2
dd = d + m / 60 + s / 3600, puis round(dd, 6).
💾 NOM_Prenom_ex31.py
EX 32Je m'entraîne🌶️🌶️🌶️plusieurs étapes
Exercice 32 — De DD vers DMS
Complète ce programme qui convertit un angle positif de DD vers DMS.
dd_vers_dms.py
dd = float(input("Angle en degrés décimaux : "))
d = int(dd) # partie entière
minutes_dec = (dd - d) * 60
m = ...
s = ...
print(f"{d}° {m}' {round(s, 1)}\"")
Tests : 44.1646098 doit donner 44° 9' 52.6" et 4.6103368 doit donner 4° 36' 37.2".
Indice 1
m est la partie entière de minutes_dec.
Indice 2
s s'obtient en multipliant par 60 la partie décimale de minutes_dec, c'est-à-dire minutes_dec - m.
Indice 3
Dans la dernière ligne, \" permet d'afficher un guillemet (le symbole des secondes).
💾 NOM_Prenom_ex32.py
EX 33Je m'entraîne🌶️🌶️application
Exercice 33 — L'aller-retour
Avec ton programme de l'exercice 31, convertis 44° 9′ 52,6″ en DD. Retrouves-tu exactement 44,1646098 ?
Une seconde d'angle de latitude correspond à environ 31 m sur le terrain. Quelle distance représente une erreur de 0,1″ ? Est-ce gênant pour placer le lycée sur une carte ?
Indice
L'écart vient de l'arrondi des secondes au dixième, fait à l'exercice 32.
💾 NOM_Prenom_ex33.py
EX 34Défi🌶️🌶️🌶️🌶️défi
Exercice 34 — Le convertisseur des pros
Défi : on peut convertir de DD vers DMS sans décimales, avec // et %, comme pour les durées de l'exercice 20.
Convertis l'angle en un nombre entier de secondes : total = round(dd * 3600).
Déduis-en d, m et s avec // et %, puis affiche le résultat.
Compare avec l'exercice 32 pour 44.1646098. Pourquoi les secondes diffèrent-elles légèrement ?
Indice
C'est exactement le même calcul que pour 55 555 secondes = 15 h 25 min 55 s !
💾 NOM_Prenom_ex34.py
À retenirSynthèse
Ce que je sais faire
Afficher des textes et des valeurs avec print et les f-chaînes.
Demander une valeur avec input et la convertir avec int ou float.