Podsumowanie — bezpieczny kalkulator
Część sekcji Logika i przepływ programu ścieżki Ruby w Coddy. Lekcja 47 z 56.
Zbuduj mały kalkulator, który radzi sobie z nieprawidłowymi danymi wejściowymi, łącząc raise, wiele klauzul rescue oraz ensure.
Wyzwanie
ŚredniZdefiniuj metodę calc(a, op, b), która:
- Zgłasza
ArgumentErrorz komunikatem"unknown operator", jeśliopnie jest jednym z+,-,*,/ - W przeciwnym razie wykonuje działanie (dla
/użyj arytmetyki całkowitoliczbowej)
Następnie odczytaj trzy wiersze wejścia, a, op, b, i wywołaj calc wewnątrz begin / rescue / ensure:
- W przypadku powodzenia wypisz
<a> <op> <b> = <result> - W przypadku
ArgumentErrorwypiszBad operator - W przypadku
ZeroDivisionErrorwypiszCannot divide by zero - W
ensurezawsze wypisz--- end ---
Użyj Integer(...) do sparsowania a i b w tym samym bloku begin, aby dane wejściowe, które nie są liczbami całkowitymi, również skutkowały wypisaniem Bad operator (ArgumentError obejmuje oba przypadki).
Dla danych wejściowych 6 / * / 7 wynik to:
6 * 7 = 42
--- end ---Dla danych wejściowych 10 / / / 0:
Cannot divide by zero
--- end ---Spróbuj swoich sił
# TODO: zdefiniuj calc(a, op, b), zgłaszaj ArgumentError dla nieznanego op
raw_a = gets.chomp
op = gets.chomp
raw_b = gets.chomp
# TODO: użyj begin/rescue/ensure zgodnie z opisem
Wszystkie lekcje w sekcji Logika i przepływ programu
1Łańcuchy znaków w szczegółach
Przegląd metod łańcuchów znakówInterpolacja łańcuchów znakówIterowanie po łańcuchach znakówDzielenie i łączeniePowtórka – Tkacz łańcuchów znaków4Bloki, procki i lambdy
Czym jest blok?do..end a nawiasy klamroweSłowo kluczowe yieldParametry blokuProcki i lambdyPodsumowanie — własny iterator7Hashe, część 2
Hash.new z wartościami domyślnymiIterowanie po haszachZagnieżdżone haszeŁączenie i przekształcaniePowtórka — licznik częstotliwości10Projekt – ewidencja uczniów
Przegląd projektuDodawanie ucznia5Potęga Enumerable
Select i RejectŁączenie wywołań mapReduce / Injectcount, all?, any?, none?group_by i partitionsort_by, min_by, max_byPodsumowanie — potok danych8Zaawansowane podejmowanie decyzji
case z klasami i wyrażeniami regularnymiwhen z wieloma wartościamiOperator trójargumentowyInline if / unlessPowtórka – klasyfikator ocen3Tablice 2D
Podstawy tablic 2DDostęp do elementów tablic 2DIterowanie po tablicach 2DTypowe wzorce 2DPowtórzenie – operacje na macierzach6Projekt – Menedżer biblioteki
Przegląd projektuDodaj książkę9Obsługa błędów
Czym jest wyjątek?begin / rescueWiele klauzul rescueensure i raisePodsumowanie — bezpieczny kalkulatorPoćwicz samodzielnie: Kompilator Ruby online