Récapitulatif - Calculatrice sécurisée
Fait partie de la section Logique et Flux du Journey Ruby de Coddy. Leçon 47 sur 56.
Construisez une petite calculatrice qui gère les entrées incorrectes, en combinant raise, plusieurs clauses rescue et ensure.
Défi
MoyenDéfinissez une méthode calc(a, op, b) qui :
- Lève une
ArgumentErroravec le message"unknown operator"siopn'est pas l'un des opérateurs suivants :+,-,*,/ - Effectue l'opération sinon (utilisez l'arithmétique entière pour
/)
Ensuite, lisez trois lignes depuis l'entrée, a, op, b : et appelez calc à l'intérieur d'un bloc begin / rescue / ensure :
- En cas de succès, affichez
<a> <op> <b> = <result> - En cas d'
ArgumentError, affichezBad operator - En cas de
ZeroDivisionError, affichezCannot divide by zero - Dans le bloc
ensure, affichez toujours--- end ---
Utilisez Integer(...) pour analyser a et b, à l'intérieur du même bloc begin, afin que les entrées non entières aboutissent également à Bad operator (ArgumentError couvre les deux cas).
Pour l'entrée 6 / * / 7, la sortie est :
6 * 7 = 42
--- end ---Pour l'entrée 10 / / / 0 :
Cannot divide by zero
--- end ---Essayez vous-même
# TODO: définir calc(a, op, b), lève ArgumentError pour un op inconnu
raw_a = gets.chomp
op = gets.chomp
raw_b = gets.chomp
# TODO: begin/rescue/ensure comme décrit
Toutes les leçons de Logique et Flux
1Les chaînes de caractères en profondeur
Aperçu des méthodes de chaînesInterpolation de chaînesParcourir les chaînesSplit et JoinRécapitulatif - String Weaver4Blocs, Procs & Lambdas
Qu'est-ce qu'un bloc ?do..end vs AccoladesLe mot-clé yieldParamètres de blocProcs et LambdasRécapitulatif - Itérateur personnalisé7Hashes - Partie 2
Hash.new avec des valeurs par défautItérer sur les HashesHashes imbriquésFusion et transformationRécapitulatif - Compteur de fréquence10Projet - Dossiers étudiants
Présentation du projetAjouter un étudiant2Intervalles
Qu'est-ce qu'un intervalle ?Méthodes d'intervalleLes intervalles dans Case / WhenRécapitulatif - Pratique des intervalles5La puissance d'Enumerable
Select et RejectChaîner MapReduce / Injectcount, all?, any?, none?group_by et partitionsort_by, min_by, max_byRécapitulatif - Data Pipeline3Tableaux 2D
Bases des tableaux 2DAccéder aux éléments 2DParcourir des tableaux 2DModèles 2D courantsRécapitulatif - Opérations sur les matrices6Projet - Gestionnaire de bibliothèque
Présentation du projetAjouter un livre9Gestion des erreurs
Qu'est-ce qu'une exception ?begin / rescueClauses rescue multiplesensure et raiseRécapitulatif - Calculatrice sécuriséeEntraînez-vous par vous-même : Compilateur Ruby en ligne