TD - types simples (corrigé)
Corrigé — TD : Types simples en Python
Ce corrigé est destiné à l’enseignant. Il détaille la réponse attendue et le raisonnement à valoriser pour chaque question.
Script 1 — Conversions de types
Q1. Le script lève une erreur :
Aucun prix ne s’affiche.
Q2. str(19.90) produit la chaîne '19.9' (le zéro final disparaît). Or int() appliqué à une chaîne n’accepte que des chaînes représentant un entier — il ne fait pas d’arrondi, contrairement à int() appliqué à un float qui, lui, tronque. Convertir en chaîne puis en entier n’est donc pas équivalent à arrondir un flottant.
Q3. Version attendue :
Point clé à valoriser : utilisation de round() directement sur le float, sans passer par str. Une réponse utilisant int(prix + 0.5) peut être acceptée si l’élève explique la limite (ne fonctionne pas pour les négatifs) ; c’est l’occasion de rappeler que round() est la fonction adaptée pour arrondir.
Script 2 — Chaînes de caractères
Q1. Le script lève une erreur :
Q2. Les chaînes de caractères sont des objets immuables en Python : une fois créées, elles ne peuvent pas être modifiées caractère par caractère via l’affectation indexée (nom[0] = ...). Toute transformation doit produire une nouvelle chaîne.
Q3. Version attendue, par exemple :
Points clés à valoriser :
- usage du slicing
nom[-2:](index négatif vu dans le cours) pour récupérer les deux derniers caractères ; - construction d’une nouvelle chaîne avec
*(répétition) et+(concaténation), sans tentative de modification en place ; - une solution utilisant
nom[:-2]remplacé caractère par caractère dans une boucle est correcte mais moins élégante — à signaler sans pénaliser si le résultat est juste.
Script 3 — Booléens et nombres flottants
Q1.
Q2. 0.1 + 0.1 + 0.1 ne vaut pas exactement 0.3 en mémoire à cause de la représentation limitée des flottants (norme IEEE 754, mentionnée dans le cours) : le résultat réel est légèrement différent de 0.3 (par exemple 0.30000000000000004), donc compte == 0.3 renvoie False. La seconde ligne affichée confirme que le résultat d’une comparaison est bien de type bool.
Q3. Version attendue :
Point clé à valoriser : on ne compare pas deux flottants directement avec ==, on arrondit d’abord à une précision raisonnable avec round() (fonction déjà vue dans le cours). Une solution utilisant math.isclose peut être acceptée en bonus si l’élève l’a rencontrée ailleurs, mais n’est pas exigée puisqu’elle n’est pas dans le cours fourni.
Grille de correction indicative
| Question | Compétence évaluée | Barème indicatif |
|---|---|---|
| Q1 (×3) | Lire du code et prédire un résultat / une erreur sans exécuter | 1 pt chacune |
| Q2 (×3) | Mobiliser la notion exacte du cours pour expliquer | 2 pts chacune |
| Q3 (×3) | Modifier le code en respectant une contrainte précise | 3 pts chacune |
Total : 18 points.