Calculatrice avec historique
Fait partie de la section Logique et Flux du Journey Swift de Coddy — leçon 56 sur 56.
Défi
MoyenConstruisez une calculatrice qui traite un flux d'expressions, tolère les erreurs et affiche un historique par opérateur à la fin.
Lisez une seule ligne d'entrée : une liste séparée par des virgules d'expressions au format a:op:b. Les opérateurs sont +, -, *, /. Définissez une énumération CalcError: Error avec les cas parse, divideByZero, unknownOp.
Pour chaque expression, dans l'ordre :
- Affichez
= <n>en cas de succès - Affichez
parse,divZero, ouunknownOppour chaque cas d'erreur
Après les lignes par expression, affichez une ligne par opérateur ayant réussi au moins une fois, dans l'ordre fixe +, -, *, / :
<op>: count=<n> sum=<total>count est le nombre de fois où cet opérateur a réussi ; sum est le total de ces résultats réussis.
Pour l'entrée 3:+:5,10:/:0,7:*:2,9:%:2,12:-:4,8:+:2, la sortie est :
= 8
divZero
= 14
unknownOp
= 8
= 10
+: count=2 sum=18
-: count=1 sum=8
*: count=1 sum=14Essayez vous-même
let exprs = readLine()!.components(separatedBy: ",")
let order = ["+", "-", "*", "/"]
// TODO: enum CalcError; func compute(...) throws -> Int;
// boucle, do/try, afficher le résultat; construire l'historique par opération;
// rapport final dans l'ordre fixe, seulement les opérations qui ont réussi
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Comptage et indicesCasse et nettoyageRecherche dans les chaînesDécoupage et jointureRemplacement de sous-chaînesRécapitulatif - Vérification du nom d'utilisateur4Ensembles
Création d'ensemblesUnion et intersectionSoustraction et différence symétriqueSous-ensemble et sur-ensembleRécapitulatif - Filtre de tags7Projet - Suivi d'habitudes
Aperçu du projetMarquer comme terminé10Projet - Moteur de quiz
Présentation du projetPoser des questions2Intervalles et Pas
Fermé vs Semi-ouvertLe PasMéthodes d'intervalleIntervalles dans un SwitchRécapitulatif - Grille de calendrier5Fonctions d'ordre supérieur, Partie 1
MapFilterReduceChaînage de map, filter, reduceRécapitulatif - Statistiques de mots