5

ここでRubyへのNoob。いくつかの演習に取り組み、壁にぶつかりました。

演習: 一連の成績の文字の成績を計算する

テスト スコアの配列を受け入れるメソッド get_grade を作成します。配列内の各スコアは 0 から 100 の間である必要があります。ここで、100 は最大スコアです。

平均スコアを計算し、「A」、「B」、「C」、「D」、「E」、または「F」の文字のグレードを文字列として返します。

エラーを返し続けます:

avg.rb:1: syntax error, unexpected tLBRACK, expecting ')'
def get_grade([100,90,80])
               ^
avg.rb:1: syntax error, unexpected ')', expecting $end

これが私がこれまでに持っているものです。クラスで学習しているメソッドを使用しようとしているので、以下のメソッドまたは .join に固執したいと思います。そのため、合計、注入などは必ずしも役に立ちません。そして、リクエストの具体性について前もってお詫び申し上げます:)コードを大幅に減らすより良い方法があると確信していますが、私はこの方法で始めようとしています。

    def get_grade([100,90,80])
      get_grade = (array[0] + array[1] + array[2]).to_i / array.length.to_i
    case get_grade
      when 90..100
      "A"
      when 80..90
       "B"
      when 70..80
       "C"
      when 60..70
       "D"
      when 0..60
       "F"
      else
     "Error"
      end
    end

    puts get_grade([100,90,80])
4

5 に答える 5

7

[100,90,80]関数定義のパラメーターリストのように、配列リテラルをランダムにダンプすることはできません。関数本体から判断すると、単一のパラメーターを受け入れるつもりだったと思いますarray

def get_grade(array)
  grade = (array[0].to_i + array[1].to_i + array[2].to_i) / array.length
  case grade
    # unchanged
  end
end
于 2013-05-20T01:53:15.760 に答える
1

case楽しみのために、大きなステートメントを簡潔に置き換えます。

def letter_grade( score ) # assumes that score is between 0 and 100 (not 0-1)
  %w[F F F F F F D C B A][ (score/10.0).floor ] || 'A' # handles grades >=100
end

または、より詳細にするには:

def letter_grade( score ) # score is between 0 and 100 (not 0-1)
  grades = %w[F F F F F F F F F F F F F F F F F F D- D D+ C- C C+ B- B B+ A- A A+ A+]
  grades[ (3.0*score/10).floor ]
end
于 2015-05-15T18:57:21.247 に答える
0

最大スコアは 100 であることに注意してください (最小スコアは 0 であると見なすことができます)。

def get_grade(array)
sum = 0
array.each do |x|
    sum += x
end

average = sum / array.length

if average > 100
  print "Grades must be no more than 100!"
elsif average >= 90
  grade = "A"
elsif average >= 80
  grade = "B"
elsif average >= 70
  grade = "C"
elsif average >= 60
  grade = "D"
elsif average >=0
  grade = "F"
else 
  print "Grades must be no less than 0!"
end
grade
    end

puts get_grade([100,90,80]) == "A"
puts get_grade([98,90,80]) == "B"
puts get_grade([80,80,80]) == "B"
puts get_grade([55,45,35]) == "F"
puts get_grade([101,100,104]) 
puts get_grade([-2,-3,-4])  
于 2014-04-04T14:22:59.423 に答える
0

今日は助けてくれてありがとう!これが、3つ以上の引数で機能させるために私がやったことです。Array#each メソッドを使用しました。もっとエレガントな解決策があると思いますが、うまくいきました! 午前10:00からこれに取り組んでいました。助けてくれてありがとう!

def get_grade(array)
     sum = 0
   array.each do |element|
    sum += element
   end
   average = sum / array.length
    if average >= 90
      grade = "A"
    elsif average >= 80
      grade = "B"
    elsif average >= 70
     grade = "C"
   elsif average >= 60
     grade = "D"
   elsif average >= 0
    grade = "F"
   else
   "Error"
   end
end

puts get_grade([70,80,80,90,100])
puts get_grade([100,80,90,11,20])
puts get_grade([30,20,10,60,75])
于 2013-05-20T06:16:28.473 に答える