北屋教程网

专注编程知识分享,从入门到精通的编程学习平台

4-ruby case语句和循环中的while语句以及until语句

4-ruby case语句和循环中的while语句以及until语句

本篇章的主要内容

  • case语句
  • while循环以及until语句

case语句

在 Ruby 中,case 语句是一种多条件分支结构,类似于其他语言的 switch-case,但更灵活强大。它使用 case-when-else 语法,可以匹配值、范围、类型、正则表达式等。

  1. case语句的语法:case 变量;当变量的值与case后的值匹配时,执行相应的代码块。
  2. case语句的结构:类似于其他语言中的switch语句,但ruby中没有switch关键字。
  3. case语句的特点:可以添加多个case,每个case后面跟着一个条件判断。
  4. 与传统switch语句的区别:ruby中的case语句没有break关键字,只会执行当前条件的代码块。
  5. 条件的复杂性:ruby中的case语句的条件可以是复杂的判断式。
  6. 范围表达式的使用:可以使用范围表达式来描述值的范围。

基础语法

case 表达式
when 值1
  # 匹配值1时执行
when 值2
  # 匹配值2时执行
else
  # 其他情况执行(可选)
end

示例:

基本用法(匹配值)

# 基本用法(匹配值)
grade = 'B'

case grade
when 'A'
  puts '优秀'
when 'B'
  puts '良好'
when 'C'
  puts '及格'
else
  puts '不及格'
end
# 输出: 良好

使用范围匹配

score = 85

case score
when 90..100
  puts 'A'
when 80..89
  puts 'B'
when 70..79
  puts 'C'
else
  puts 'F'
end
# 输出: B

使用正则表达式匹配

input = "hello123"

case input
when /^[a-z]+$/
  puts "全是字母"
when /^\d+$/
  puts "全是数字"
when /^[a-z]+\d+$/
  puts "字母开头后跟数字"
else
  puts "其他模式"
end
# 输出: 字母开头后跟数字

省略表达式(当作 if-elsif 使用)

age = 25

case
when age < 18
  puts "未成年"
when age >= 18 && age < 65
  puts "成年人"
else
  puts "老年人"
end
# 输出: 成年人

多条件匹配

fruit = "apple"

case fruit
when "apple", "pear", "banana"
  puts "这是常见水果"
when "dragonfruit", "kiwi"
  puts "这是进口水果"
else
  puts "未知水果"
end
# 输出: 这是常见水果

使用 Proc 或 lambda 匹配

even_check = ->(x) { x.even? }
odd_check = ->(x) { x.odd? }

number = 7

case number
when even_check
  puts "偶数"
when odd_check
  puts "奇数"
end
# 输出: 奇数

返回值

case 语句会返回最后执行的表达式的值:

result = case 2
         when 1 then "one"
         when 2 then "two"
         else "many"
         end

puts result  # 输出: two

这使得 case 语句可以用于赋值或作为方法的返回值。

注意事项

  1. Ruby 的 case 语句使用 === 运算符进行比较,这使得它可以处理多种匹配方式
  2. when 子句是按顺序评估的,第一个匹配的 when 块会被执行
  3. else 子句是可选的,用于处理没有匹配的情况
  4. 不需要使用 break 语句(与某些语言不同),Ruby 的 case 语句会自动跳出

循环语句的基本概念

  1. 循环语句的作用:重复执行一段代码,直到满足特定条件。
  2. while循环:当给定的条件满足时,执行代码块。
  3. until循环:当给定的条件不满足时,执行代码块。
  4. break和continue关键字:用于在循环中跳出或跳过某些迭代。

while循环

基本语法

while 条件
  # 循环体代码
end

代码示例

# 计数循环
count = 0
while count < 5
  puts "Count: #{count}"
  count += 1
end

# 输出:
# Count: 0
# Count: 1
# Count: 2
# Count: 3
# Count: 4

until循环

until 是 while 的反向操作,当条件为假时执行循环

基本语法

until 条件
  # 循环体代码
end

代码示例

# 倒计时
timer = 3
until timer == 0
  puts "倒计时: #{timer}"
  timer -= 1
end
puts "时间到!"

# 输出:
# 倒计时: 3
# 倒计时: 2
# 倒计时: 1
# 时间到!

break 关键字

用于提前退出循环

基本语法

while 条件
  # 代码
  break if 退出条件
  # 更多代码
end

代码示例

# 查找第一个能被7整除的数
num = 1
while true
  if num % 7 == 0
    puts "找到第一个能被7整除的数: #{num}"
    break
  end
  num += 1
end

# 输出: 找到第一个能被7整除的数: 7

next 关键字

跳过当前迭代,继续下一次循环

基本语法

while 条件
  # 代码
  next if 跳过条件
  # 更多代码
end

代码示例

# 打印1-10的奇数
n = 0
while n < 10
  n += 1
  next if n % 2 == 0
  puts "奇数: #{n}"
end

# 输出:
# 奇数: 1
# 奇数: 3
# 奇数: 5
# 奇数: 7
# 奇数: 9

综合示例

编写密码验证系统:

# 密码验证系统,最多尝试3次
attempts = 0
correct_password = "ruby123"

while attempts < 3
  print "请输入密码(还剩#{3 - attempts}次机会): "
  input = gets.chomp
  
  if input != correct_password
    attempts += 1
    next if attempts < 3  # 跳过后续代码,继续循环
    puts "密码错误,账户已锁定!"
    break
  end
  
  puts "登录成功!"
  break
end

# 可能的输出:
# 请输入密码(还剩3次机会): wrong
# 请输入密码(还剩2次机会): wrong
# 请输入密码(还剩1次机会): ruby123
# 登录成功!

特殊形式

单行形式

count = 0
puts(count += 1) while count < 5  # 输出1到5

后置循环(至少执行一次)

x = 10
begin
  puts "x = #{x}"
  x += 1
end while x < 5  # 虽然条件不满足,但会先执行一次

# 输出: x = 10

注意事项

  1. while 和 until 都可以与 begin...end 结合使用,确保循环体至少执行一次
  2. break 可以带返回值,如 break "result"
  3. next 也可以带参数,影响循环变量的值
  4. 避免无限循环,确保循环条件最终会变为 false
  5. Ruby 中更推荐使用迭代器 (each, times 等) 来处理大多数循环场景
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言