2016-07-12 51 views
-1

创建一个将数字作为参数的函数,并根据该数字返回一个等级。做这个代码的各种方法是什么?

分数级

任何大于1或小于0.6 '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 
+0

你如何获得'score'? –

+0

*口译员不会接受* *?你得到了什么错误? –

+0

哦,错误是,“价值不是预期的”。 – DonTerry

回答

4

我会建议使用case语句用于这一目的:

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 
+0

Yupp翻译接受了它,谢谢兄弟。 – DonTerry

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 
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"