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
- Cada estudiante es una tabla con nombre y arreglo de puntajes.
lettercalifica por una escalera if/elseif.- Una sola pasada acumula el promedio del curso.
Palabras clave y builtins usados aquí
doelseelseifendforfunctionifinipairslocalprintreturnthen
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.
Paso 2 de 3 en Bis; paso 26 de 27 en Fundamentos del lenguaje.