Niveau 1 — Les bases
Objectifs du niveau
À la fin de ce niveau tu sais écrire un petit programme interactif complet : il affiche des informations, stocke des valeurs dans des variables bien nommées, demande des données à l'utilisateur avec input(), les convertit dans le bon type, calcule, et affiche un résultat propre en f-string. Tu sais aussi lire un traceback (NameError, TypeError, ValueError) sans paniquer.
C'est le socle de TOUT le reste : les niveaux 2 à 10 supposent ces réflexes acquis.
Les leçons
| Leçon | Fichier | Contenu | État |
|---|---|---|---|
| 01-1 | lecon-01-1-print-variables.md | print(), variables, assignation, f-strings, NameError | Disponible |
| 01-2 | lecon-01-2-types-nombres-input-conversions.md | types int/float/str/bool, opérateurs, input(), conversions, TypeError/ValueError | Disponible |
| 01-3 | lecon-01-3-chaines-de-caracteres.md | indexation, slicing, len(), immutabilité, méthodes str, in/find/count, f-strings avancées, IndexError | ✅ Disponible |
Durée indicative
1 semaine à raison d'une session par jour : 2 jours par leçon (lecture + exercices), 1 jour de mini-projets, 1 jour de révision (questions de révision + refaire de tête les exercices ratés).
Critères de sortie
On ne passe au niveau 2 que si TOUTES les cases sont cochées :
- Je crée des variables, je les affiche en f-string, sans regarder les leçons.
- Je peux dire le type de n'importe quelle valeur littérale (
42,"42",3.14,True) sans exécutertype(). - Je connais le résultat ET le type de
7 / 2,7 // 2,7 % 2,2 ** 3. - Je sais expliquer pourquoi
print(0.1 + 0.2)n'affiche pas0.3. - J'ai le réflexe :
input()retourne toujours unestr, conversion obligatoire avant tout calcul. - Je provoque volontairement un
NameError, unTypeErroret unValueError, et je lis chaque traceback de bas en haut. - Les deux mini-projets (carte de présentation, convertisseur) tournent sans erreur.
- Les commits des séries 01-1 et 01-2 sont faits.
Erreurs emblématiques du niveau
Ces quatre erreurs, tu DOIS les avoir rencontrées (et comprises) avant le niveau 2 :
NameError: name 'x' is not defined— variable utilisée avant d'être créée, ou faute de frappe (Python distingueTotalettotal).TypeError: can only concatenate str (not "int") to str— mélange texte + nombre, presque toujours uninput()jamais converti.ValueError: invalid literal for int() with base 10: 'abc'— le type demandé est le bon, mais la VALEUR ne peut pas être convertie. Piège inclus :int("3.5")échoue aussi.- Le bug silencieux — pas de traceback du tout :
foublié devant une f-string, ligne de calcul dont le résultat n'est pas assigné,0.1 + 0.2affiché brut. Le programme « marche » mais le résultat est faux : toujours vérifier la sortie.