Bavard

Bavard

Facile

Instructions

Analyse et évalue de simples problèmes de mathématiques formulés en mots, puis renvoie la réponse sous forme de nombre entier.

Itération 0 : les nombres

Les problèmes sans aucune opération s'évaluent simplement au nombre donné.

What is 5?

S'évalue à 5.

Itération 1 : addition

Additionne deux nombres.

What is 5 plus 13?

S'évalue à 18.

Gère les grands nombres et les nombres négatifs.

Itération 2 : soustraction, multiplication et division

Maintenant, effectue les trois autres opérations.

What is 7 minus 5?

2

What is 6 multiplied by 4?

24

What is 25 divided by 5?

5

Itération 3 : opérations multiples

Gère une suite d'opérations, dans l'ordre.

Comme ces problèmes sont formulés en mots, évalue l'expression de gauche à droite, en ignorant l'ordre habituel des opérations.

What is 5 plus 13 plus 6?

24

What is 3 plus 2 multiplied by 3?

15 (c'est-à-dire pas 9)

Itération 4 : erreurs

L'analyseur syntaxique doit rejeter :

  • Les opérations non prises en charge (« What is 52 cubed? »)
  • Les questions qui ne relèvent pas des mathématiques (« Who is the President of the United States »)
  • Les problèmes formulés en mots dont la syntaxe est invalide (« What is 1 plus plus 2? »)

Messages d'exception

Il est parfois nécessaire de lever une exception. Dans ce cas, tu dois toujours inclure un message d'erreur explicite pour indiquer la source de l'erreur. Cela rend le code plus lisible et facilite grandement le débogage. Lorsque tu sais que la source de l'erreur sera d'un certain type, tu peux choisir de lever l'un des types d'erreur intégrés, mais tu dois quand même inclure un message explicite.

Cet exercice en particulier demande d'utiliser l'instruction raise pour « lever » une ValueError si la question passée à answer() est mal formée ou invalide, ou si elle contient une opération inconnue. Les tests ne passeront que si tu lèves l'exception avec raise et que tu y joins un message. Remarque : le message attendu est différent pour chaque scénario, même si c'est le même type d'erreur qui est levé. Vérifie les tests attentivement.

Pour lever une ValueError avec un message, écris le message comme argument du type exception :

# if the question contains an unknown operation.
raise ValueError("unknown operation")

# if the question is malformed or invalid.
raise ValueError("syntax error")

Pour gérer une erreur levée dans un bloc de code donné, on peut utiliser un try-except. Les blocs try-except « englobent » le code susceptible de provoquer une erreur, en associant toutes les exceptions à une erreur, à plusieurs erreurs, ou à d'autres portions de code chargées de traiter le problème :

while len(equation) > 1:
        try:
           # The questionable/error-prone code goes here,in an indented block
           # It can contain statements, loops, if-else blocks, or other executable code.
           x_value, operation, y_value, *rest = equation
           ...
           ...

        except:
            # Code for what to do when an error gets thrown in the code above.
            # This could be one error, or more complicated logging, error checking and messaging.
            raise ValueError("syntax error")
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Python Exercism

Prêt à commencer Bavard ?

Inscris-toi sur Exercism pour apprendre et maîtriser Python avec 17 concepts146 exercices, et un vrai mentorat humain, le tout gratuitement.