typestar

grade_report.lua en Lua

Boletines desde un roster de tablas, una escalera elseif y format.

-- Average each student's scores and print a letter-grade report.

local roster = {
  { name = "Ada", scores = { 92, 88, 97 } },
  { name = "Grace", scores = { 84, 91, 78 } },
  { name = "Alan", scores = { 70, 66, 74 } },
  { name = "Edsger", scores = { 58, 67, 61 } },
}

local function average(student)
  local total = 0
  for _, s in ipairs(student.scores) do total = total + s end
  return total / #student.scores
end

local function letter(avg)
  if avg >= 90 then return "A"
  elseif avg >= 80 then return "B"
  elseif avg >= 70 then return "C"
  elseif avg >= 60 then return "D"
  else return "F" end
end

table.sort(roster, function(a, b) return a.name < b.name end)

print("student  avg grade")
local class_total, class_count = 0, 0
for _, s in ipairs(roster) do
  local avg = average(s)
  print(string.format("%-8s %4.1f  %s", s.name, avg, letter(avg)))
  for _, score in ipairs(s.scores) do
    class_total = class_total + score
    class_count = class_count + 1
  end
end
print(string.format("Class average: %.1f", class_total / class_count))

Cómo funciona

  1. Cada estudiante es una tabla con nombre y arreglo de puntajes.
  2. letter califica por una escalera if/elseif.
  3. Una sola pasada acumula el promedio del curso.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
36
Caracteres a escribir
1014
Tokens
264
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 244 segundos.

Escribe este fragmento

Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.

← Anterior Siguiente →