Ruby基础知识-4.流程控制

1.1    条件判断

1.1.1 if条件语句

(1) 多行使用if..end; if..else..end; if..elsif..else..end;

print "输入分数:"

score = gets.to_i

if score >= 90

  puts "得A"

elsif score >= 80 and score < 90

  puts "得B"

elsif score >= 70 and score < 80

  puts "得C"

elsif score >= 60 and score < 70

  puts "得D"

else

  puts "不及格"

end

(2) 单行使用if..then..end; if..;..;end

if ARGV[0] then filename = ARGV[0] end

等效于 filename = ARGV[0] if ARGV[0]

1.1.2 unless条件语句

unless和if刚好相反,if条件成立才会执行区块内容,unless则在条件不成立才会执行区块,if是如果条件成立就执行区块,unless是除非条件成立,否则就执行区块。unless也可以搭配else使用。

print "输入正数:"

number = gets.to_i

unless number >= 0

    number = -number

end

puts number

1.1.3 case..when..条件语句

when多行显示:

print "请输入分数:"

case gets.to_i / 10

    when 10, 9

        puts "等级A"

    when 8

        puts "等级B"

    when 7

        puts "等级C"

    when 6

        puts "等级D"

    else

        puts "等级E"

end

when单行显示:

print "请输入分数:"

case gets.to_i / 10

    when 10, 9 then puts "等级A"

    when 8 then puts "等级B"

    when 7 then puts "等级C"

    when 6 then puts "等级D "

    else puts "等级E"

end

1.2    循环

1.2.1 while语句

(1)   前while循环

puts "输入两个数字..."

m = gets.to_i

n = gets.to_i

while n != 0

   r = m % n

   m = n

   n = r

end

puts "GCD: #{m}"

(2)   后while循环

begin

    print "输入数字:"

    printf "输入数为%s\n", gets.to_i % 2 == 0 ? "偶数" : "奇数"

    print "继续?(Yes/No)"

end while gets.chomp.upcase== "YES"

(3)   while单行用法

n = 1

n = (rand() * 10).to_i while n % 2 == 1

puts n

1.2.2 until语句

与while相反的是until,while是条件式成立时,执行循环体,until是直到条件式成立前,都要执行循环体。

(1)   前until循环

puts "输入两个数字..."

m = gets.to_i

n = gets.to_i

until n == 0

   r = m % n

   m = n

   n = r

end

puts "GCD: #{m}"

(2)   后until循环

begin

    print "输入数字:"

    printf "输入数为%s\n", gets.to_i % 2 == 0 ? "偶数" : "奇数"

    print "继续?(Yes/No)"

end until gets.chomp.upcase == "NO"

(3)   until单行用法

n = 1

n = (rand() * 10).to_i until n % 2 != 1

print n

1.2.3 loop语句

loop {puts "loop until the end of the world"}

loop do

    print "输入数字:"

    number = gets.to_i

    printf "输入数为%s\n" % (number % 2 == 0 ? "偶数" : "奇数")

    print "继续?(Yes /No)"

    if gets.chomp == "No"

        break

    end

end

1.2.4 for语句

for i in 1..3

  puts i

end

for i in [2,3]

  puts i

end

1.2.5 times遍历

times通常用在指定次数的循环上。

10.times {|i| puts "第#{i + 1}次的Orz..." }

10.times do |i|

    puts "第#{i + 1}次的Orz..."

end

1.2.6 each遍历

each是迭代器,loop、 times方法也是迭代器,只要可以使用each方法,就可以使用for,for其实是利用了each方法的语法。

[1, 2, 3, 4, 5].each{|x| print x}

[1, 2, 3, 4, 5].each do |element|

    print element

end

1.2.7 循环中的控制(next、break、redo)

break用于跳出整个循环;next用于跳出本次执行区间;redo用于重做当前执行区间。

#底下显示1234

for i in 1..9

  if i == 5

    break

  end

  print i

end

puts

#底下显示12346789

for i in 1..9

  if i == 5

    next

  end

  print i

end

#底下显示1234redoredoredo....

for i in 1..9

  if i == 5

    print "redo"

    redo

  end

  print i

end

1.2.8 异常语句begin...rescue...ensure

begin...rescue...ensure类似try...catch...finally。

例1:

print "文件案名称:"

name = gets.chomp

file = open(name, "r")

begin

    file.each do |line|

        print line

    end

rescue

    print "读取档案发生错误"

ensure

    file.close

end

例2:

def odd_even?

    begin

        print "输入整数:"

        input = Integer(gets)

        puts "#{input}为%s" % (input % 2 == 0 ? "偶数" : "奇数")

    rescue ArgumentError => e

        puts "请输入阿拉伯数字"

        print e.backtrace

    end

end

odd_even?

posted @ 2013-05-24 16:28  swzhou  阅读(259)  评论(0编辑  收藏  举报