2016-07-12 2 views
-1

Создайте функцию, которая принимает число в качестве аргумента и возвращает оценку на основе этого числа.Каковы различные способы выполнения этого кода?

Оценка Оценка

Все больше 1 или меньше, чем 0,6 'F'

0,9 или больше "А"

0,8 или больше "Б"

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

Я предлагаю использовать случай заявление для этой цели:

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" 
Смежные вопросы