Parolaio

Parolaio

Facile

Istruzioni

Analizza e valuta semplici problemi matematici espressi a parole, restituendo la risposta come numero intero.

Iterazione 0: i numeri

I problemi senza operazioni danno semplicemente il numero indicato.

What is 5?

Il risultato è 5.

Iterazione 1: l'addizione

Somma due numeri.

What is 5 plus 13?

Il risultato è 18.

Gestisci numeri grandi e numeri negativi.

Iterazione 2: sottrazione, moltiplicazione e divisione

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

Iterazione 3: operazioni multiple

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)

Iterazione 4: errori

Il parser deve rifiutare:

  • Operazioni non supportate ("What is 52 cubed?")
  • Domande non matematiche ("Who is the President of the United States")
  • Problemi espressi a parole con sintassi non valida ("What is 1 plus plus 2?")

Messaggi di eccezione

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")
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Python Exercism

Vuoi iniziare Parolaio?

Iscriviti a Exercism per imparare e padroneggiare Python con 17 concetti146 esercizi e il mentoring di persone reali, tutto gratis.