Analizza e valuta semplici problemi matematici espressi a parole, restituendo la risposta come numero intero.
I problemi senza operazioni danno semplicemente il numero indicato.
What is 5?
Il risultato è 5.
Somma due numeri.
What is 5 plus 13?
Il risultato è 18.
Gestisci numeri grandi e numeri negativi.
Ora svolgi le altre tre operazioni.
What is 7 minus 5?
2
What is 6 multiplied by 4?
24
What is 25 divided by 5?
5
Gestisci una serie di operazioni, in sequenza.
Dato che questi problemi sono espressi a parole, valuta l'espressione da sinistra a destra, ignorando il consueto ordine delle operazioni.
What is 5 plus 13 plus 6?
24
What is 3 plus 2 multiplied by 3?
15 (cioè non 9)
Il parser deve rifiutare:
A volte è necessario sollevare un'eccezione. Quando lo fai, dovresti sempre includere un messaggio di errore significativo che indichi qual è l'origine dell'errore. Questo rende il codice più leggibile e aiuta molto a fare debug. Nei casi in cui sai che l'origine dell'errore sarà di un certo tipo, puoi scegliere di sollevare uno dei tipi di errore predefiniti, ma dovresti comunque includere un messaggio significativo.
Questo esercizio in particolare richiede che tu usi l'istruzione raise per «lanciare» un ValueError se la domanda passata ad answer() è malformata o non valida, oppure contiene un'operazione sconosciuta. I test passeranno solo se usi raise sull'exception e includi anche un messaggio insieme ad essa.
Nota bene: il messaggio necessario è diverso per ogni scenario, anche se viene sollevato lo stesso tipo di errore.
Controlla i test con attenzione.
Per sollevare un ValueError con un messaggio, scrivi il messaggio come argomento del tipo exception:
# if the question contains an unknown operation.
raise ValueError("unknown operation")
# if the question is malformed or invalid.
raise ValueError("syntax error")
Per gestire un errore sollevato all'interno di un particolare blocco di codice, si può usare un try-except. I blocchi try-except «avvolgono» il codice che potrebbe causare un errore, associando tutte le eccezioni a un errore, a più errori o ad altre porzioni di codice che si occupano del problema:
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")
Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.