1. Faire un calcul sans le garder
L'erreur numéro un, et de loin. En maths, écrire « a + 6 » a un sens en soi. En Python, une ligne qui calcule sans ranger le résultat quelque part ne sert à rien : la valeur est calculée, puis jetée.
a = 10
a + 6 # Python calcule 16, puis l'oublie
print(a) # 10a = 10
a = a + 6 # le résultat est rangé dans a
print(a) # 16Aucun message d'erreur n'apparaît, et c'est ce qui rend la faute difficile à voir. Le réflexe à installer : à gauche du signe égal, l'endroit où l'on range ; à droite, le calcul.
2. Écrire =+ au lieu de +=
score = 10
score =+ 5 # Python lit : score = (+5)
print(score) # 5score = 10
score += 5 # raccourci de : score = score + 5
print(score) # 153 à 6. Quatre fautes que Python signale tout de suite
Celles-là ont au moins l'avantage d'arrêter le programme. Le message dit exactement quoi corriger, à condition de le lire.
| Ce qu'on écrit | Ce que fait Python | Ce qu'il faut écrire |
|---|---|---|
| if age = 18: | SyntaxError. Un seul égal sert à ranger une valeur, jamais à comparer. | if age == 18: |
| if age > 18 | SyntaxError. Les deux-points manquent en fin de ligne. | if age > 18: puis la ligne suivante décalée de quatre espaces. |
| for i in range(1, 10): | Aucune erreur, mais la boucle s'arrête à 9 : la borne de droite est exclue. | range(1, 11) pour aller jusqu'à 10. |
| "Tu as " + 15 + " ans" | TypeError. Python refuse de coller du texte et un nombre. | "Tu as " + str(15) + " ans", ou plus simple : f"Tu as {15} ans". |
7. Oublier que input renvoie toujours du texte
Même quand l'utilisateur tape des chiffres, Python range du texte. Pour lui, « 12 » et 12 ne sont pas la même chose.
age = input("Ton âge : ")
print(age + 1) # TypeError : on n'ajoute pas 1 à du texteage = int(input("Ton âge : "))
print(age + 1) # 16 si l'utilisateur a tapé 15Convertissez au moment de la saisie, pas dix lignes plus loin. Avec des nombres à virgule, c'est float au lieu de int.
8. Confondre print et return
print affiche à l'écran. return renvoie une valeur au reste du programme. Une fonction qui se contente d'afficher ne renvoie rien : elle renvoie None.
def double(n):
print(n * 2)
resultat = double(5) # affiche bien 10
print(resultat) # Nonedef double(n):
return n * 2
resultat = double(5)
print(resultat) # 10La règle simple : si le résultat doit servir ailleurs, c'est return. print sert à montrer quelque chose à un humain, à la toute fin.
9. Passer par les indices quand ce n'est pas nécessaire
Le programme fonctionne, donc personne ne corrige. C'est pourtant le marqueur le plus visible d'un code de débutant, et la source de la moitié des erreurs d'indice.
for i in range(len(notes)):
print(notes[i])for note in notes:
print(note)
# Et si le numéro de la case sert vraiment :
for i, note in enumerate(notes):
print(i, note)En Python, une boucle for parcourt directement les éléments. On ne passe par range que si l'indice sert à quelque chose, ce qui est rare.
10. Comparer des nombres à virgule avec ==
Un ordinateur ne stocke pas 0,1 exactement, mais la valeur binaire la plus proche. Les écarts minuscules s'accumulent, et une égalité qui devrait être vraie devient fausse.
print(0.1 + 0.2 == 0.3) # False
print(0.1 + 0.2) # 0.30000000000000004from math import isclose
print(isclose(0.1 + 0.2, 0.3)) # Trueisclose vérifie que deux nombres sont assez proches pour être tenus pour égaux. C'est la bonne façon de comparer des flottants, et cela évite d'écrire soi-même une tolérance à la main.
Le réflexe qui vaut les dix autres : lire le message d'erreur
Beaucoup d'élèves voient du rouge, paniquent, et changent une ligne au hasard. Python indique pourtant la ligne exacte, le type d'erreur et souvent la valeur en cause. Ces cinq messages couvrent la quasi-totalité des cas des premières semaines.
| Le message | Ce qu'il veut dire | Où regarder |
|---|---|---|
| SyntaxError | La phrase n'est pas du Python valide. | La ligne indiquée, et surtout celle juste au-dessus. |
| NameError | Ce nom n'existe pas encore. | Une faute de frappe, ou une variable utilisée avant d'être créée. |
| TypeError | Deux types incompatibles sont mélangés. | Un texte et un nombre, le plus souvent un input non converti. |
| IndexError | Cette case n'existe pas dans la liste. | La longueur réelle de la liste, pas celle qu'on imagine. |
| IndentationError | Les décalages ne sont pas cohérents. | Un mélange de tabulations et d'espaces dans le fichier. |
Et après ces dix erreurs ?
La copie de liste
Écrire b = a sur une liste ne crée pas une copie : les deux noms désignent le même objet, et modifier l'un modifie l'autre. C'est la première vraie marche après ces dix erreurs.
Les structures de données
Piles, files, arbres et graphes reposent entièrement sur la compréhension des références. Sans elle, tout le chapitre reste opaque.