执行此代码的方法有哪些?

时间:2016-07-12 08:56:56

标签: ruby

创建一个函数,该函数将数字作为参数,并根据该数字返回等级。

  

得分等级

     

大于1或小于0.6&f;#< f'

     

0.9或更高" A"

     

0.8或更高" B"

     

0.7或更高" C"

     

0.6或更高" D"

我试图想出另一种编写此代码的方法,因为解释器不会接受它。有人可以帮助我吗?

def grader(score)
  if score >= 0.9 
    return "A"
  elsif score >= 0.8 
    return "B"
  elsif score >= 0.7  
    return "C"
  elsif score >= 0.6  
    return "D"
  elsif score < 0.5 or score > 1.01 
    return "F"
  else
    return "O"
  end
end

3 个答案:

答案 0 :(得分:4)

我建议为此目的使用案例陈述:

def grader(score)
  case score
  when 0.9..1    then 'A'
  when 0.8...0.9 then 'B'
  when 0.7...0.8 then 'C'
  when 0.6...0.7 then 'D'
  else                'F'
  end
end

答案 1 :(得分:0)

您可以使用Hash之类的配置。

GRADE_TABLE = {(0.9..1) => 'A', (0.8..0.9) => 'B', (0.7..0.8) => 'C', (0.6..0.7) => 'D'}
def get_grade(score)
  GRADE_TABLE.each{|sc, grade| return grade if sc.include?(score)}
  'F'
end

答案 2 :(得分:0)

GRADES = [[0.9, "A"], [0.8, "B"], [0.7, "C"], [0.6, "D"], [-Float::INFINITY, "F"]]

def grader(score)
  score = 0 if score > 1
  GRADES.find { |k,_| score >= k }.last
end

grader 0.50  #=> "F" 
grader 0.60  #=> "D" 
grader 0.65  #=> "D" 
grader 0.70  #=> "C" 
grader 0.79  #=> "C" 
grader 0.82  #=> "B" 
grader 0.93  #=> "A" 
grader 1.07  #=> "F"