2016-07-12 9 views
-1

数値を引数にとり、その数値に基づいてグレードを返す関数を作成します。 1より大きいかまたはより小さいこのコードを実行するさまざまな方法は何ですか?

スコアグレード

何0.6 'F'

0.9以上 ""

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" 
関連する問題