fiche mémo : 2.1. Bonjour, Python.¶
Une brève introduction à la syntaxe Python, à l'affectation de variables et aux nombres¶
Vincent GODARD - V2- 24/03/2025¶
Cours Introduction à la programmation¶
Département de géographie - L3 - Université de Paris 8¶
Traduction librement (largement) inspirée de : https://www.kaggle.com/code/colinmorris/hello-python
Sources :
Kaggle : https://www.kaggle.com/learn
Python Tutorial : https://www.w3schools.com/python/default.asp
Cours de Python : https://python.sdv.u-paris.fr/00_avant_propos/
Téléchargement des documents nécessaires :
Dossier compressé à télécharger => (pas utile ici).
Ce cours couvre les compétences clés en Python dont vous aurez besoin pour commencer à utiliser Python pour la science des données. Le cours est idéal pour quelqu'un qui a déjà une expérience de codage et qui souhaite ajouter Python à son répertoire. (Si vous êtes un codeur débutant, il faut d'abord consulter le cours d'introduction à la programmation (fm 1.1 à fm 1.5), conçu pour les débutants complets qui souhaitent se lancer avec Python.)
Nous commencerons par un bref aperçu de la syntaxe Python, de l'affectation de variables et des opérateurs arithmétiques.
1. Hello, Python!¶¶
Python doit son nom à la troupe de comédiens britanniques les Monty Python (https://en.wikipedia.org/wiki/Monty_Python), nous allons donc créer notre premier programme Python en hommage à leur sketch sur le spam (https://en.wikipedia.org/wiki/Spam_(Monty_Python_sketch)).
Pour le plaisir, essayez de lire le code ci-dessous et de prédire ce qu'il va faire une fois exécuté. (Si vous n'en avez aucune idée, ce n'est pas grave !)
Cliquez ensuite sur le bouton « sortie » pour voir les résultats de notre programme.
## En version originale
spam_amount = 0
print(spam_amount)
# Ordering Spam, egg, Spam, Spam, bacon and Spam (4 more servings of Spam)
spam_amount = spam_amount + 4
if spam_amount > 0:
print("But I don't want ANY spam!")
viking_song = "Spam " * spam_amount
print(viking_song)
Il y a beaucoup à découvrir ici ! Ce programme idiot démontre de nombreux aspects importants de ce à quoi ressemble le code Python et de son fonctionnement. Examinons le code de haut en bas.
spam_amount = 0
Affectation de variable : ici, nous créons une variable appelée spam_amount et lui attribuons la valeur 0 à l'aide de =, qui est appelé l'opérateur d'affectation.
Remarque : si vous avez programmé dans certains autres langages (comme Java ou C++), vous remarquerez peut-être certaines choses que Python ne nous demande pas de faire ici :
○ nous n'avons pas besoin de « déclarer » spam_amount avant de lui attribuer une valeur ;
○ nous n'avons pas besoin d'indiquer à Python à quel type de valeur spam_amount va faire référence. En fait, nous pouvons même continuer à réattribuer spam_amount pour faire référence à un autre type comme une chaîne ou un booléen.
print(spam_amount)
Appels de fonctions : print est une fonction Python qui affiche la valeur qui lui est transmise à l'écran. Nous appelons les fonctions en mettant des parenthèses après leur nom et en plaçant les entrées (ou arguments) de la fonction dans ces parenthèses.
# Commande de Spam, œuf, Spam, Spam, bacon et Spam (4 portions supplémentaires de Spam)
spam_amount = spam_amount + 4
La première ligne ci-dessus est un commentaire. En Python, les commentaires commencent par le symbole #.
Nous voyons ensuite un exemple de réaffectation. La réaffectation de la valeur d'une variable existante ressemble à la création d'une variable - elle utilise toujours l'opérateur d'affectation =.
Dans ce cas, la valeur que nous attribuons à spam_amount implique une arithmétique simple sur sa valeur précédente. Lorsqu'il rencontre cette ligne, Python évalue l'expression du côté droit du = (0 + 4 = 4), puis affecte cette valeur à la variable du côté gauche
if spam_amount > 0 :
print("Mais je ne veux AUCUN spam !")
viking_song = "Spam Spam Spam"
print(viking_song)
Nous ne parlerons pas beaucoup des « conditions » avant un certain temps, mais même si vous n'avez jamais codé auparavant, vous pouvez probablement deviner ce que cela fait. Python est apprécié pour sa lisibilité et sa simplicité.
Notez comment nous avons indiqué quel code appartient au if. « Mais je ne veux AUCUN spam !» n'est censé être imprimé que si spam_amount est positif. Mais le code ultérieur (comme print(viking_song)) doit être exécuté quoi qu'il arrive. Comment le savons-nous (et Python) ?
Les deux points (:) à la fin de la ligne if indiquent qu'un nouveau bloc de code démarre. Les lignes suivantes qui sont indentées font partie de ce bloc de code.
Remarque : si vous avez déjà codé, vous savez peut-être que d'autres langages utilisent des {accolades} pour marquer le début et la fin des blocs de code. L'utilisation d'espaces significatifs par Python peut surprendre les programmeurs habitués à d'autres langages, mais en pratique, cela peut conduire à un code plus cohérent et plus lisible que les langages qui n'imposent pas l'indentation des blocs de code.
Les lignes suivantes traitant de viking_song ne sont pas indentées avec 4 espaces supplémentaires, elles ne font donc pas partie du bloc de code du if. Nous verrons plus d'exemples de blocs de code indentés plus tard lorsque nous définirons des fonctions et utiliserons des boucles.
Cet extrait de code est également notre première observation d'une chaîne (string) en Python :
"But I don't want ANY spam!"
Les chaînes peuvent être marquées par des guillemets doubles ou simples. Mais comme cette chaîne particulière contient un caractère guillemet simple (le "'" de don"t), nous pourrions confondre Python en essayant de l'entourer de guillemets simples, à moins que nous ne soyons prudents.
viking_song = "Spam " * spam_amount
print(viking_song)
L'opérateur * peut être utilisé pour multiplier deux nombres (3 * 3 donne 9), mais nous pouvons également multiplier une chaîne par un nombre, pour obtenir une version qui a été répétée autant de fois. Python propose un certain nombre de petites astuces pour gagner du temps, comme celle-ci, où les opérateurs comme * et + ont une signification différente selon le type d'élément auquel ils sont appliqués. (Le terme technique pour cela est surcharge d'opérateur (Operator overloading https://en.wikipedia.org/wiki/Operator_overloading).)
2. Nombres et arithmétique en Python¶¶
Nous avons déjà vu ci-dessus un exemple de variable contenant un nombre :
spam_amount = 0
« Nombre » est un bon nom informel pour ce genre de chose, mais si nous voulions être plus techniques, nous pourrions demander à Python comment il décrirait le type de chose qu'est spam_amount :
type(spam_amount)
Il s'agit d'un int, abréviation de "entier" (integer). Il existe un autre type de nombre que nous rencontrons couramment en Python :
type(19.95)
Un float est un nombre avec des décimales, très utile pour représenter des éléments tels que des poids ou des proportions.
type() est la deuxième fonction intégrée que nous avons vue (après print()), et c'est une autre fonction intéressante à retenir. Il est très utile de pouvoir demander à Python "quel genre de chose est-ce ?".
Une chose classique que l'on souhaite faire avec les nombres est d'effectuer des opérations arithmétiques. Nous avons vu l'opérateur + pour l'addition et l'opérateur * pour la multiplication. Python nous couvre également pour le reste des boutons de base de votre calculatrice :
Vous pouvez réellement faire beaucoup de calculs avec Python ! Consultez le tableau ci-dessous pour quelques exemples.
| Opérateur | Nom | Description |
|---|---|---|
| a + b | Addition | Somme de a et b |
| a - b | Soustraction | Différence de a et b |
| a * b | Multiplication | Produit de a et b |
| a / b | Division vraie | Quotient de a et b |
| a // b | Division entière | Quotient de a et b, en supprimant les parties fractionnaires |
| a % b | Modulo | Reste entier après division de a par b |
| a ** b | Exponentiation | a élevée à la puissance b |
| -a | Négation | Le négatif de a |
Une observation intéressante ici est que, alors que votre calculatrice n'a probablement qu'un seul bouton pour la division, Python en propose deux types. La « vraie division » est essentiellement ce que fait votre calculatrice :
print(5 / 2)
print(6 / 2)
Cela nous donne toujours un float.
L'opérateur // nous donne un résultat arrondi à l'entier inférieur.
print(5 // 2)
print(6 // 2)
Pensez-vous à une situation dans laquelle cela pourrait être utile ? Vous en verrez bientôt un exemple dans les défis de codage.
3. Ordre des opérations¶
L'arithmétique que nous avons apprise à l'école primaire comporte des conventions sur l'ordre dans lequel les opérations sont évaluées. Certains s'en souviennent grâce à un mnémonique tel que PEMDAS - Parenthèses, Exposants, Multiplication/Division, Addition/Soustraction (https://www.mathsisfun.com/operation-order-pemdas.html). Elles sont pour la plupart assez intuitives.
En général, Python suit les mêmes règles pour décider de l'ordre des opérations.
8 - 3 + 2
-3 + 4 * 2
Parfois, l'ordre par défaut des opérations n'est pas celui que nous souhaitons :
## Définition des variables
hat_height_cm = 25
my_height_cm = 190
# Quelle est ma taille, en mètres, lorsque je porte mon chapeau ?
total_height_meters = hat_height_cm + my_height_cm / 100
print("Hauteur en mètres =", total_height_meters, "?")
Les parenthèses sont utiles ici. Vous pouvez les ajouter pour forcer Python à évaluer les sous-expressions dans l'ordre que vous souhaitez.
## Quel est le meilleur choix de position des parenthèses ?
# Choix 1
total_height_meters = hat_height_cm + (my_height_cm / 100)
print("Choix 1 : Hauteur en mètres =", total_height_meters, "?")
# Choix 2
total_height_meters = (hat_height_cm + my_height_cm) / 100
print("Choix 2 : Hauteur en mètres =", total_height_meters)
4. Fonctions intégrées pour travailler avec des nombres¶¶
## min et max renvoient respectivement le minimum et le maximum de leurs arguments...
print(min(1, 2, 3))
print(max(1, 2, 3))
## abs renvoie la valeur absolue d'un argument :
print(abs(32))
print(abs(-32))
En plus d'être les noms des deux principaux types numériques de Python, int et float peuvent également être appelés comme des fonctions qui convertissent leurs arguments dans le type correspondant :
print(float(10))
print(int(3.33))
# Ils peuvent même être appelés sur des chaînes de caractères (strings) !
print(int('807') + 1)
5. Quelques exemples supplémentaires¶
5.1. Une histoire de parenthèses¶
# Ajoutez des parenthèses à l’expression suivante afin qu’elle soit évaluée à 1.
5 - 3 // 2
# Ajoutez des parenthèses à l’expression suivante afin qu’elle soit évaluée à 0.
8 - 3 * 2 - 1 + 1
5.2. Des cercles proportionnels¶
Pour calculer la taille des cercles proportionnels lors d'une représentation cartographique d'une variable quantitative dénombrée ou mesurée.
Section inspirée du cours n°3.1. de Traitement des données et cartographie (http://margaux.ipt.univ-paris8.fr/vgodard/enseigne/carto2/memocart/mem31car.htm). En particulier, la section des méthodes et le paragraphe "1.2.1. Par le calcul".
Pour représenter les données quantitatives dénombrées ou mesurées,
Variable visuelle utilisée : la Taille
Objectif : faire varier la taille d'un figuré proportionnellement à une quantité
-
En implantation ponctuelle
variation de la surface d'1 symbole
En implantation ponctuelle ou zonale,
le signe le plus utilisé est le cercle.
Si la surface du cercle est proportionnelle à la quantité à représenter, alors :
Comme 2 quantités sont proportionnelles,
alors leurs surfaces le sont également
La règle de proportionnalité permet d'éliminer les Pi.
En pratique, les quantités sont connues mais pas les rayons.
On recherche le cercle de référence, celui qui caractérise la quantité la plus importante ou, plus précisément, la quantité la plus élevée pour la surface d'implantation la plus faible (se référer au fond de carte et aux données).
-
Cela revient à déterminer le rayon supportable (sans masquer les voisins) !
-
Puis, transformer l'équation de la façon suivante :
-
Puis, calculer n'importe quel rayon Ri comme suit :
Enfin, tracer les cercles sur la carte.
À titre d'exemple, nous allons prendre les valeurs suivantes qui sont issues d'un exercice proposé par ESRI pour la prise en main d'ArcGIS Pro : Créer une carte (ancienne version sur les données des hopitaux de Las Vegas, encore en ligne en 2023, https://learn.arcgis.com/fr/projects/create-a-map/).
- Vous trouverez la table attributaire ici : http://julienas.ipt.univ-paris8.fr/vgodard/pub/enseigne/carto2/claroline/tdfm31/Clark_County_Hospitals.csv
Prenons l'exemple de l'hôpital Boulder City Hospital, comme hôpital de référence, dont le nombre de cas en 2015 était de 215 hospitalisations (Q_ref), si pour des questions "d'encombrement" sur la carte, le rayon que nous lui attribuons est de 2 mm (R_ref), quel serait alors le rayon à utiliser pour représenter le nombre de cas du North Vista Hospital, qui, en 2015, dénombrait 6653 cas ?
## Quelle est la taille du rayon pour le North Vista Hospital (6653 cas) ?
R_ref = 2
Q_ref = 215
Q_NVH = 6653
R_NVH = Q_NVH ** (1/2) * R_ref / Q_ref ** (1/2)
R_NVH
Et pour le Saint Rose Dominican Hospitals San Martin Campus (7737 cas) ?
## Quelle est la taille du rayon pour le Saint Rose Dominican Hospitals San Martin Campus (7737 cas) ?
## Pourriez-vous afficher le résultat avec un chiffre après la virgule ?
Q_SRDH = 7737
R_SRDH = Q_SRDH ** (1/2) * R_ref / Q_ref ** (1/2)
print("Rayon =", f"{R_SRDH:.1f}", "mm")
## En attendant de découvrir les boucles (loop) avec "for", sauriez-vous créer une fonction dans l'esprit de la section 2.5. de la fiche mémo 1.2
## (http://margaux.ipt.univ-paris8.fr/vgodard/enseigne/intropro/memointropro/mem12intropro.html)
## où il y aurait juste à introduire la quantité de cas dans la fonction ?
# Définir la fonction
def quel_rayon(Q):
# Calcul du rayon en mm
R =
# Sortie de la fonction
return R
# Rentrer la quantité Q lue dans la liste pour chaque hôpital.
R = quel_rayon(?????)
print(R)
Il y a quatorze hôpitaux, c'est un peu fastidieux. Nous verrons bientôt les boucles qui permettent de répéter l'action décrite dans des lignes de code sur une série de données.