Il existe un écart étrange entre « connaître Python » et « savoir utiliser Python ». Beaucoup de gens regardent des dizaines de vidéos, copient des exemples et ont l’impression d’avoir compris — puis se retrouvent perdus au moment d’écrire quelque chose à partir de zéro. Ce livre a été conçu pour combler cet écart.
L’approche est simple : apprendre en exécutant. Chaque exemple de ce livre peut être exécuté directement dans le navigateur, sur place. Vous n’avez pas besoin d’installer Python, de préparer un éditeur, ni d’attendre quoi que ce soit. Lisez, exécutez, modifiez, exécutez à nouveau — constatez par vous-même ce qui change.
Ce livre parcourt trois parties successives :
Chaque chapitre suit le même schéma : une explication brève et dense, des exemples exécutables, puis des exercices avec solution que l’on peut déplier. Ne sautez pas les exercices. Lire vous rend les notions familières ; c’est écrire et exécuter qui vous rend capable.
Une remarque honnête. Tout ne peut pas être exécuté dans le navigateur. Les chapitres qui nécessitent des fichiers sur votre ordinateur, des paquets venant d’Internet, le réseau ou des programmes de longue durée le signaleront clairement et vous orienteront vers l’environnement adapté. Ce n’est pas une faiblesse — cela fait partie de l’apprentissage : savoir où quelque chose doit être exécuté.
Bonne lecture, et bon travail.
— RWID
Ce livre n’est pas un livre ordinaire : il contient Python en lui-même. Chaque exemple de code peut être exécuté directement, sans rien installer.
La barre supérieure du lecteur propose un Labo. Vous y trouverez le Labo Python : un interpréteur Python intégré à ce livre, où vous pouvez essayer du code sans quitter la page. Pour les projets plus importants, ouvrez l’IDE complet, un éditeur complet dans sa propre fenêtre où vous enregistrez et exécutez vos fichiers.
Au-dessus de chaque bloc de code se trouvent deux boutons :
Mon conseil. Ne vous contentez pas d’appuyer sur Exécuter. Changez d’abord les nombres, remplacez les noms, cassez le code volontairement — puis regardez ce qui se passe. L’erreur est le professeur le plus rapide.
Le Python du navigateur est bien réel, mais il vit dans un bac à sable (sandbox). Il ne peut pas toucher aux fichiers de votre ordinateur, installer des paquets depuis Internet ni ouvrir de connexion réseau. Certains sujets — en toute honnêteté — ne peuvent donc pas être exécutés ici. Les chapitres concernés le signalent clairement :
Environnement local requis. Ceci ne peut pas être exécuté dans le navigateur. Suivez le guide, et exécutez le code dans Python local + VS Code ou Google Colab.
Le guide complet d’installation de Python en local se trouve dans l’Annexe C. En résumé :
| ✅ Fonctionne ici | ⚠️ Limité ici | ❌ Environnement local requis |
|---|---|---|
| Python pur & stdlib de base | Calculs/tailles importants | Lecture-écriture de fichiers sur votre ordinateur |
| NumPy, pandas, Matplotlib | Pas de vrai réseau | pip install de n’importe quel paquet |
| scikit-learn (petite échelle) | Stockage non permanent | requests, sockets, bases de données |
HTML via rwid.show_html | GUI (tkinter/turtle), os/subprocess | |
multiprocessing, serveurs (Flask/FastAPI) |
La Partie I et un chapitre d’ouverture de la Partie II se lisent gratuitement. Pour débloquer le livre entier — jusqu’au projet final — activez-le avec 25 grâce au bouton à la fin du dernier chapitre d’échantillon, ou depuis l’application Books / Boutique.
Bonne exploration. Commencez à la page suivante.
Cliquez sur un titre pour y accéder. Les chapitres marqués d’un cadenas doivent être activés ( 25).
Chaque voyage commence par une seule ligne. En Python, cette ligne est print(). Exécutons d’abord le programme le plus simple, puis décortiquons ce qui se passe réellement.
print("Halo, dunia!")
Une ligne, une instruction. print() est une fonction : elle reçoit quelque chose entre les parenthèses, puis l’affiche à l’écran. Un texte entouré de guillemets — comme "Halo, dunia!" — s’appelle une chaîne de caractères (string).
Vous pouvez afficher plusieurs choses à la fois, séparées par des virgules :
print("Nama saya", "Eko")
print("2 + 3 =", 2 + 3)
Remarquez : "Nama saya" et "Eko" sont séparés automatiquement par une espace, tandis que 2 + 3 est bel et bien calculé d’abord pour donner 5, et seulement ensuite affiché.
Une ligne qui commence par # est ignorée par Python. Nous l’utilisons pour expliquer pourquoi, et non quoi.
# Ceci est un commentaire : Python ne l'exécute pas.
print("Halo") # un commentaire peut aussi se trouver en fin de ligne
Un bon code parle par ses noms ; on utilise les commentaires lorsque la raison n’apparaît pas clairement dans le code lui-même.
Essayez d’exécuter le code suivant. Il est volontairement faux, pour que vous appreniez à reconnaître le visage d’une erreur :
print("Halo"
Python s’arrêtera et signalera une SyntaxError. Ce n’est pas une catastrophe — c’est Python qui vous indique qu’une parenthèse n’a pas été fermée. Savoir lire un message d’erreur est une compétence essentielle. En général, la dernière ligne du message en contient l’essentiel.
print("Halo")
Comparez : un caractère de plus, et tout fonctionne.
Python lit le programme de haut en bas. Chaque print() est exécuté dans l’ordre :
print("Satu")
print("Dua")
print("Tiga")
Nous étudierons les variables à fond au chapitre suivant, mais un petit exemple ici vous aidera :
nama = "Eko"
tahun_lahir = 1990
print("Hai,", nama)
print("Usia pada 2026:", 2026 - tahun_lahir)
Le signe = donne un nom à une valeur. Après nama = "Eko", partout où nous écrivons nama, Python le remplace par "Eko".
17 * 24.panjang = 8 et lebar = 5, puis affichez l’aire du rectangle.SyntaxError, exécutez le code et lisez le message d’erreur. Puis corrigez-la.# 1
print("Eko")
print("Yogyakarta")
# 2
print(17 * 24)
# 3
panjang = 8
lebar = 5
print("Luas:", panjang * lebar)
# 4 — erreur courante : parenthèse non fermée
# print("Halo"
print("Halo")
print() affiche une valeur à l’écran.# ouvre un commentaire ignoré par Python.Au chapitre suivant, nous ferons sérieusement connaissance avec les variables et les types de données.
Une variable est le moyen de donner un nom à quelque chose pour pouvoir le réutiliser. Python n’exige pas que nous déclarions le type — il le devine à partir de la valeur — mais comprendre les types de données reste indispensable, car le type détermine ce que l’on peut et ne peut pas faire.
umur = 25
nama = "Siti"
tinggi = 1.68
menikah = False
Quatre lignes, quatre types de base : int (25), str ("Siti"), float (1.68) et bool (False). Pour connaître le type de quelque chose, utilisez type() :
print(type(25)) # <class 'int'>
print(type(1.68)) # <class 'float'>
print(type("Siti")) # <class 'str'>
print(type(False)) # <class 'bool'>
int est un nombre entier ; float est un nombre à virgule. La division donne toujours un float :
print(10 / 3) # 3.3333333333333335
print(10 // 3) # 3 (division entière)
print(10 % 3) # 1 (reste de la division)
print(2 ** 10) # 1024 (puissance)
Les opérateurs // et % sont des compagnons de tous les jours : l’un pour diviser en parts égales, l’autre pour le reste. Ensemble, ils permettent de décomposer un nombre :
menit = 145
print(menit // 60, "jam", menit % 60, "menit") # 2 h 25 min
Les chaînes peuvent être concaténées avec + et répétées avec * :
depan = "Eko"
belakang = "Wibowo"
print(depan + " " + belakang)
print("ha" * 3) # hahaha
print(len("Python")) # 6
Nous approfondirons les chaînes au chapitre 7. Pour l’instant, retenez simplement qu’une chaîne est une suite de caractères, et que len() en calcule la longueur.
bool n’a que deux valeurs : True et False. Elles naissent des comparaisons :
print(5 > 3) # True
print(5 == 5) # True (attention : == pour comparer, = pour affecter)
print(5 != 5) # False
Un piège classique.
=affecte une variable ;==compare. Confondre ces deux signes est l’une des erreurs les plus fréquentes chez les débutants.
Il nous arrive de devoir changer de type. Les fonctions int(), float() et str() s’en chargent :
nomor = "42" # ceci est une chaîne, pas un nombre
print(nomor + "5") # 425 (concaténation, pas addition !)
print(int(nomor) + 5) # 47 (cette fois, c'est bien additionné)
print(str(100) + "!") # 100!
print(int(3.9)) # 3 (tronqué, pas arrondi)
La façon la plus agréable d’afficher des valeurs de types mélangés est la f-string — une chaîne préfixée par f qui peut contenir des expressions entre {} :
nama = "Eko"
umur = 36
print(f"Hai {nama}, usiamu {umur} tahun.")
print(f"Setahun lagi: {umur + 1}")
print(f"Pi sekitar {3.14159:.2f}") # 2 chiffres après la virgule
Les f-strings reviendront tout au long de ce livre. Maîtrisez-les dès maintenant.
Parfois, une variable n’a pas encore de valeur. En Python, « pas encore là » est représenté par None :
hasil = None
print(hasil) # None
print(hasil is None) # True
None est différent de 0, différent de "". Il signifie réellement « absence ».
200 minutes."7" et 3 ; additionnez-les comme des nombres, puis affichez le résultat.berat = 72.5 (kg) et tinggi = 1.75 (m), puis calculez l’indice de masse corporelle berat / tinggi ** 2 et affichez-le avec 1 chiffre après la virgule.# 1
depan = "Eko"
belakang = "Wibowo"
tahun = 1990
print(f"{depan} {belakang}, lahir {tahun}.")
# 2
total = 200
print(f"{total // 60} jam {total % 60} menit")
# 3
print(int("7") + 3)
# 4
berat = 72.5
tinggi = 1.75
imt = berat / tinggi ** 2
print(f"IMT: {imt:.1f}")
int, float, str, bool et None.// effectue la division entière, % donne le reste, ** met à la puissance.= affecte, == compare.Pourquoi un bon code Python semble-t-il concis et agréable à lire ? Parce qu’il utilise des idiomes — des façons d’écrire devenues courantes chez les Pythonistes. Ce chapitre enseigne les compréhensions et plusieurs habitudes qui rendent le code plus court, plus clair et plus pythonique.
L’ancienne manière de remplir une liste :
kuadrat = []
for x in range(1, 6):
kuadrat.append(x ** 2)
print(kuadrat)
La compréhension la condense en une seule ligne :
kuadrat = [x ** 2 for x in range(1, 6)]
print(kuadrat) # [1, 4, 9, 16, 25]
genap = [x for x in range(10) if x % 2 == 0]
print(genap) # [0, 2, 4, 6, 8]
Le schéma : [expression for item in iterable], filtré au besoin par un if.
Pour un dict, utilisez {clé: valeur for ...} ; pour un set, {...} :
panjang = {kota: len(kota) for kota in ["jakarta", "bali", "medan"]}
print(panjang)
unik = {huruf.lower() for huruf in "Halo Dunia" if huruf != " "}
print(sorted(unik))
enumerate fournit un numéro d’ordre ; zip parcourt deux listes à la fois :
buah = ["apel", "mangga", "jeruk"]
for nomor, nama in enumerate(buah, start=1):
print(f"{nomor}. {nama}")
nama = ["Eko", "Siti"]
umur = [36, 25]
for n, u in zip(nama, umur):
print(f"{n} berusia {u} tahun")
Les deux renvoient un itérateur, donc économes en mémoire. zip s’arrête à la liste la plus courte.
Une condition simple peut s’écrire sur une ligne ; le dépaquetage (unpacking) répartit une séquence dans plusieurs variables :
umur = 20
print("dewasa" if umur >= 18 else "anak")
a, b = 1, 2
a, b = b, a # échange sans variable auxiliaire
print(a, b)
kepala, *ekor = [1, 2, 3, 4]
print(kepala, ekor) # 1 [2, 3, 4]
Les f-strings peuvent régler le format des nombres et l’alignement :
nilai = 1234567.891
print(f"{nilai:,.2f}") # 1,234,567.89
print(f"{0.87:.1%}") # 87.0%
print(f"{42:05d}") # 00042
print(f"{'kanan':>10}|")
print(f"{'kiri':<10}|")
L’opérateur morse (walrus) := affecte une valeur tout en la testant :
data = [1, 2, 3, 4, 5, 6]
if (n := len(data)) > 3:
print(f"ada {n} item")
from collections import Counter
kata = "susu roti susu teh roti susu".split()
print(Counter(kata).most_common(2))
pengguna = {"nama": "Eko"}
print(pengguna.get("kota", "tidak diketahui"))
harga = {"beras": 12000, "gula": 15000, "minyak": 18000}, créez un nouveau dict contenant les prix après une remise de 10 %.zip + une compréhension de dict pour associer ["a", "b", "c"] à [1, 2, 3].["Nasi Goreng", "Mie Ayam", "Sate"] en utilisant enumerate.hasil = []
for x in range(1, 11):
if x % 3 == 0:
hasil.append(x * x)
# 1
print([x ** 2 for x in range(1, 11) if x % 2 == 1])
# 2
harga = {"beras": 12000, "gula": 15000, "minyak": 18000}
print({nama: int(bayar * 0.9) for nama, bayar in harga.items()})
# 3
kunci = ["a", "b", "c"]
nilai = [1, 2, 3]
print({k: v for k, v in zip(kunci, nilai)})
# 4
for nomor, item in enumerate(["Nasi Goreng", "Mie Ayam", "Sate"], start=1):
print(f"{nomor}. {item}")
# 5
print([x * x for x in range(1, 11) if x % 3 == 0])
enumerate numérote ; zip parcourt plusieurs séquences à la fois.a if condition else b sert aux conditions brèves.* recueille le reste.:= affecte tout en testant.Au chapitre suivant, nous découperons le programme en modules et paquets que l’on peut importer.