Atelier 12 - Exceptions
Compréhension
Numéro 1
Sans l'exécuter, que va afficher le code suivant?
try:
print("A")
x = int("abc")
print("B")
except ValueError:
print("C")
print("D")
Numéro 2
Sans l'exécuter, que va afficher le code suivant?
try:
x = int("5")
except ValueError:
print("Erreur")
else:
print("Pas d'erreur")
print("Fin")
Numéro 3
Sans l'exécuter, que va afficher le code suivant?
try:
x = 10 / 0
except ValueError:
print("A")
except ZeroDivisionError:
print("B")
print("C")
Pratique
Numéro 4
Demandez 2 nombres à l'utilisateur, divisez le nombre 1 par le nombre 2. Si on divise par zéro, interceptez l'erreur (avec une exception) et donnez zéro comme résultat.
Exemple:
Veuillez choisir le nombre 1: 42
Veuillez choisir le nombre 2: 0
La réponse est: 0.0
Numéro 5
Reprendre le numéro 5 de l'atelier 4. Validez que l'information donnée par l'utilisateur est valide (le nombre est bien un int positif et le prix est bien un float positif avec 2 décimales ou moins). Chaque champ doit être validé indépendamment: ne redemandez que le champ invalide, pas les champs déjà validés.
Copie de l'énoncé du numéro 5 de l'atelier 4:
Demandez à l'utilisateur un nombre de produits et un prix unitaire. Affichez sur 2 décimales: Le sous-total, la TPS, la TVQ et le total.
Exemple:
Veuillez entrer un nombre de produits: 4
Veuillez entrer un prix unitaire: 9.99
Sous-total: 39.96
TPS: 2.00
TVQ: 3.99
Total: 45.95
Exemple avec la gestion d'erreurs:
Veuillez entrer un nombre de produits: jhk
Ce n'est pas un nombre valide
Veuillez entrer un nombre de produits: -98
Le nombre de produits doit être plus grand que zéro
Veuillez entrer un nombre de produits: 10
Veuillez entrer un prix unitaire: sdfg
Ce n'est pas un nombre valide
Veuillez entrer un prix unitaire: -98.25
Le prix unitaire doit être plus grand que zéro
Veuillez entrer un prix unitaire: 98.999
Le prix ne peut pas avoir plus de 2 décimales
Veuillez entrer un prix unitaire: 9.99
Numéro 6
Reprendre le numéro 6 de l'atelier 11, mais cette fois en utilisant try/except plutôt qu'une validation manuelle avec isdigit(). Le résultat final doit être identique.
Copie de l'énoncé du numéro 6 de l'atelier 11:
Demandez un nombre entre 1 et 10 à l'utilisateur. Si l'entrée n'est pas valide, affichez le message d'erreur approprié et reposez la question, jusqu'à ce qu'un nombre valide soit entré:
- Si ce n'est pas un nombre entier valide: "Ce n'est pas un nombre entier valide"
- Si le nombre est plus petit que 1: "Le nombre doit être supérieur ou égal à 1"
- Si le nombre est plus grand que 10: "Le nombre doit être inférieur ou égal à 10"
Exemple:
Entrez un nombre entre 1 et 10: abc
Ce n'est pas un nombre entier valide
Entrez un nombre entre 1 et 10: -3
Le nombre doit être supérieur ou égal à 1
Entrez un nombre entre 1 et 10: 15
Le nombre doit être inférieur ou égal à 10
Entrez un nombre entre 1 et 10: 7
Vous avez entré: 7
Numéro 7
Demandez 2 nombres à l'utilisateur puis divisez le premier par le second. Utilisez 1 try avec 2 except pour distinguer les erreurs possibles:
- Si un des nombres n'est pas valide: "Un des nombres entrés n'est pas valide"
- Si vous divisez par zéro: "Impossible de diviser par zéro"
Exemple:
Veuillez choisir le nombre 1: 10
Veuillez choisir le nombre 2: abc
Un des nombres entrés n'est pas valide
Veuillez choisir le nombre 1: 10
Veuillez choisir le nombre 2: 0
Impossible de diviser par zéro
Veuillez choisir le nombre 1: 10
Veuillez choisir le nombre 2: 4
La réponse est: 2.5
Analyse
Numéro 8
Le code suivant fonctionne correctement, mais pourrait être amélioré (il ne respecte pas les bonnes pratiques).
try:
age: int = int(input("Quel âge avez-vous? "))
majeur: bool = age >= 18
if majeur:
print("Vous êtes majeur")
else:
print("Vous êtes mineur")
print("Merci d'avoir répondu")
except ValueError:
print("Ce n'est pas un nombre valide")