Ripasso - Calcolatrice sicura
Fa parte della sezione Logica e flusso del percorso Swift di Coddy. Lezione 48 di 56.
Sfida
MedioCrea una piccola calcolatrice sicura contro gli input non validi.
Definisci CalcError: Error con i casi: parse, divideByZero, unknownOp.
Definisci una funzione che genera errori compute(_ a: String, _ op: String, _ b: String) throws -> Int che:
- Analizza
aebcome numeri interi, generando.parsese uno dei due non è valido - Genera
.unknownOpquandoopnon è uno tra+,-,*,/ - Genera
.divideByZeroquandoop == "/"eb == 0 - Altrimenti restituisce il risultato intero
Leggi una singola riga di input: un elenco di espressioni a:op:b separate da virgole. Elaborale nell'ordine con un do/catch. Stampa una riga per ogni espressione:
= <n>in caso di successoparse error,div by zeroounknown opper ciascun caso di errore
Dopo le righe per ogni espressione, stampa una riga riepilogativa: OK: <n> con il conteggio delle espressioni completate con successo.
Per l'input 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4, l'output è:
= 8
div by zero
parse error
unknown op
= 8
OK: 2Provalo tu
let exprs = readLine()!.components(separatedBy: ",")
// TODO: enum CalcError; func compute(...) throws -> Int;
// loop, do/try, print l'esito per ogni expr; infine print 'OK: <n>'
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Conteggio e indiciMaiuscole, minuscole e rimozione degli spaziRicerca nelle stringheSuddivisione e unioneSostituzione di sottostringheRiepilogo - Verifica del nome utente4Insiemi
Creare insiemiUnione e intersezioneDifferenza e differenza simmetricaSottoinsieme e sovrainsiemeRiepilogo - Filtro per tag7Progetto - Tracciatore di abitudini
Panoramica del progettoSegna come completato10Progetto - Motore di quiz
Panoramica del progettoPorre domande2Intervalli e passi
Intervalli chiusi e semiapertiPassoMetodi degli intervalliIntervalli in switchRiepilogo - Griglia del calendario5Funzioni di ordine superiore Parte 1
MapFilterReduceConcatenare map, filter e reduceRiepilogo - Statistiche sulle parole3Dizionari
Dichiarare i dizionariRicerca facoltativaAggiornare i dizionariIterare sui dizionariRaggruppare i valoriRipasso - Inventario6Funzioni di ordine superiore Parte 2
compactMapflatMapsorted(by:)Creare pipelineRiepilogo - Classifica9Gestione degli errori
throws ed Errordo, try, catchtry? e try!Propagazione degli erroriRipasso - Calcolatrice sicuraEsercitati da solo: Playground Swift