Menu
Coddy logo textTech

Диапазоны в Case / When

Часть раздела Логика и управление потоком путешествия по Ruby на Coddy — урок 8 из 56.

Диапазоны отлично показывают себя внутри оператора case в Ruby. Там, где многим языкам требуется цепочка if/elsif с операторами сравнения, Ruby позволяет сопоставлять значение с диапазонами напрямую.

score = 78
grade = case score
        when 90..100 then "A"
        when 80..89  then "B"
        when 70..79  then "C"
        when 60..69  then "D"
        else              "F"
        end
puts grade  # C

За кулисами when 70..79 использует оператор === диапазона, что эквивалентно (70..79).include?(score).

Форма case короче, легче читается и быстрее пишется, чем длинная лестница if/elsif.

challenge icon

Задание

Легко

Прочитайте список целых чисел (возраст), разделенных запятыми. Для каждого возраста классифицируйте его с помощью оператора case, используя диапазоны (ranges):

  • 0..12: Child
  • 13..19: Teen
  • 20..64: Adult
  • 65 или выше: Senior
  • Все остальное (отрицательные числа): пропускается, не попадает в отчет

Выведите строку с количеством для каждой ненулевой категории в фиксированном порядке: Child, Teen, Adult, Senior. Пропускайте категории с нулевым количеством людей. После подсчетов выведите Skipped: <n>, где n — это количество отрицательных (недопустимых) возрастов.

Для входных данных 5,15,30,70,-3,40,12 результатом будет:

Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1

Шпаргалка

Используйте диапазоны в операторах case — Ruby выполняет сопоставление через === (эквивалентно include?):

score = 78
grade = case score
        when 90..100 then "A"
        when 80..89  then "B"
        when 70..79  then "C"
        when 60..69  then "D"
        else              "F"
        end
puts grade  # C

Попробуйте сами

ages = gets.chomp.split(",").map(&:to_i)

# TODO: классифицировать каждый возраст с помощью case + диапазонов, подсчитать количество по категориям, вывести отчет
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком