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ée