2016-07-12 55 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"