Menu
CoddyTech

在 case / when 中使用范围

本课属于 Coddy Ruby 学习旅程的“逻辑与流程”单元。第 8 课,共 56 课。

范围在 Ruby 的 case 语句中非常实用。许多语言需要用一连串带比较运算符的 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 语句按范围进行分类:

  • 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

亲手试试

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

# TODO:用 case 和范围对每个年龄分类,统计各类别的人数,并打印报告
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Ruby 在线编译器