Aller au contenu principal

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")

🔑 Corrigé disponible