iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
Formations
Python · Débutant

Python

Apprendre Python de zéro jusqu'au niveau expert : syntaxe, structures de données, POO, générateurs, décorateurs, typage, tests, async et internals du langage.

Python 3.13uvpytestmypyasyncio
01Introduction et installation02Variables et types de base03Conditions et boucles04Fonctions05Listes, tuples, dictionnaires et ensembles06Modules, fichiers et exceptions07Programmation orientée objet08Itérateurs, générateurs, décorateurs et context managers09Typage statique et tests10Concurrence : threads, processus et asyncio11Niveau expert : internals, métaprogrammation et performance
Chapitre 2·30 min

Variables et types de base

Une variable en Python n'est pas une boîte qui contient une valeur. C'est une étiquette collée sur un objet. Cette nuance paraît académique ; elle explique pourtant la moitié des bugs de débutant qu'on verra plus loin.

a = [1, 2, 3]
b = a          # b est une deuxième étiquette sur la même liste
b.append(4)
print(a)       # [1, 2, 3, 4]

Les types fondamentaux

TypeExempleMutable
int42, -7, 1_000_000non
float3.14, 1e-3non
boolTrue, Falsenon
str"texte", 'texte'non
NoneNonenon
list[1, 2]oui
dict{"a": 1}oui

type() renvoie le type d'une valeur, isinstance() teste l'appartenance :

type(42)               # <class 'int'>
isinstance(3.0, float) # True
isinstance(True, int)  # True — bool hérite de int

Nombres

Les entiers Python n'ont pas de limite de taille. 2 ** 1000 fonctionne sans overflow.

10 / 3    # 3.3333333333333335  — division réelle, toujours float
10 // 3   # 3                   — division entière
10 % 3    # 1                   — modulo
2 ** 10   # 1024                — puissance
-7 // 2   # -4                  — arrondi vers moins l'infini, pas vers zéro

Les flottants suivent IEEE 754, avec ses pièges :

0.1 + 0.2 == 0.3   # False
0.1 + 0.2          # 0.30000000000000004

Pour de l'argent, utilisez decimal.Decimal :

from decimal import Decimal
Decimal("0.1") + Decimal("0.2") == Decimal("0.3")  # True

Chaînes de caractères

Les str sont des séquences Unicode immuables. Guillemets simples ou doubles, c'est équivalent. Triple guillemets pour du multiligne.

nom = "Ada"
msg = f"Bonjour {nom}, tu as {36 + 1} ans"
multi = """Ligne 1
Ligne 2"""
 
nom[0]        # 'A'
nom[-1]       # 'a'  — index négatif = depuis la fin
nom[0:2]      # 'Ad' — slicing, fin exclue
len(nom)      # 3

Les méthodes les plus utiles :

s = "  Python est Génial  "
s.strip()              # 'Python est Génial'
s.lower()              # '  python est génial  '
s.split()              # ['Python', 'est', 'Génial']
"-".join(["a", "b"])   # 'a-b'
s.replace("Génial", "top")
"py" in s.lower()      # True
s.startswith("  Py")   # True

Une chaîne est immuable : nom[0] = "E" lève TypeError. Toute « modification » crée une nouvelle chaîne.

Les f-strings acceptent des spécificateurs de format :

prix = 1234.5678
f"{prix:.2f}"      # '1234.57'
f"{prix:,.2f}"     # '1,234.57'
f"{42:05d}"        # '00042'
f"{prix=}"         # 'prix=1234.5678' — pratique pour déboguer

Booléens et valeurs « falsy »

Tout objet a une valeur de vérité. Sont considérés comme faux : False, None, 0, 0.0, "", [], {}, set(). Le reste est vrai.

panier = []
if not panier:
    print("Panier vide")

Les opérateurs and et or ne renvoient pas forcément un booléen : ils renvoient l'un des deux opérandes.

nom = "" or "Anonyme"   # 'Anonyme'
0 and 5                 # 0

None

None représente l'absence de valeur. On le compare avec is, jamais == :

resultat = None
if resultat is None:
    print("Pas encore calculé")

is teste l'identité (même objet en mémoire), == teste l'égalité de valeur. None est un singleton, is est donc à la fois correct et plus rapide.

Conversions

int("42")        # 42
int("3.5")       # ValueError
int(float("3.5"))# 3
float("3.5")     # 3.5
str(42)          # '42'
bool("False")    # True — chaîne non vide !
list("abc")      # ['a', 'b', 'c']

Le piège bool("False") revient souvent quand on lit des variables d'environnement. Comparez explicitement : os.environ.get("DEBUG") == "1".

Affectations pratiques

x, y = 1, 2          # affectation multiple
x, y = y, x          # échange sans variable temporaire
a = b = 0            # même objet pour les deux
compteur += 1        # pas de ++ en Python
premier, *reste = [1, 2, 3, 4]  # premier=1, reste=[2, 3, 4]

Conventions de nommage

  • snake_case pour variables et fonctions
  • PascalCase pour les classes
  • MAJUSCULES pour les constantes (convention, rien n'empêche la réassignation)
  • _prefixe pour signaler « interne, ne pas toucher »

Exercice

Écrire un convertisseur Celsius → Fahrenheit qui affiche le résultat avec une décimale.

convert.py
celsius = float(input("Température en °C : "))
fahrenheit = celsius * 9 / 5 + 32
print(f"{celsius:.1f} °C = {fahrenheit:.1f} °F")

Retenez surtout l'idée d'étiquette : une variable pointe vers un objet, et deux variables peuvent pointer vers le même. Cette mécanique devient critique dès qu'on manipule des listes et des dictionnaires.

Précédent
Introduction et installation
Suivant
Conditions et boucles

Développeur fullstack passionné. J'apprends en construisant et je documente tout — front, back, outils. Le code s'apprend mieux en public.

Naviguer

IndexTous les articlesFormationsProfilOutilsBibliothech

Ailleurs

GitHub RSS

Newsletter

Les articles, libs et découvertes. Une fois par semaine, pas plus.

© 2026 William LoreeConçu & codé à la main