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
  • Всё остальное (отрицательные значения): skipped, не попадает в report

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

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

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

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

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

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

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор Ruby