if(): write the end-of-term report line
Hard
At the end of term every student gets one line on their report. You are given the student's test scores, in order. A test the student was absent for is null.
Return one of these
"No results"— the student has no scores at all: the list is empty, or every test was missed."Incomplete: 2 missed"— two or more tests were missed, with the real number in place of the 2."B, average 85.5"— otherwise: the grade, then the average of the tests actually taken, rounded to one decimal place.
Grades, by the average
"A"— 90 or more"B"— 75 or more"C"— 60 or more"F"— below 60
A missed test is not a zero. {80, null, 91} averages 85.5, over the two tests that were taken.
Watch out
count()counts the nulls too, so it is not the number of tests taken.- A student who missed everything has taken 0 tests, so check for that before dividing.
Tip: you need the number of tests taken in more than one place. a!localVariables() lets you work it out once and name it; repeating the expression works too.
Input
ri!scores— List of Integer, where a missed test is null
ri! Rule Inputs
ri!scoresList of Integer{
80,
null,
91
}Example 1 — Every test taken
Input: ri!scores
{
95,
92,
90
}Output:
"A, average 92.3"
Example 2 — One missed test is fine
Input: ri!scores
{
80,
null,
91
}Output:
"B, average 85.5"
Example 3 — Just short of an A
Input: ri!scores
{
89,
90
}Output:
"B, average 89.5"
Example 4 — A C grade
Input: ri!scores
{
70,
61
}Output:
"C, average 65.5"
Example 5 — A failing average
Input: ri!scores
{
61,
58
}Output:
"F, average 59.5"
Example 6 — Two tests missed
Input: ri!scores
{
70,
null,
null,
95
}Output:
"Incomplete: 2 missed"
Example 7 — Every test missed
Input: ri!scores
{
null,
null
}Output:
"No results"
Example 8 — No tests yet
Input: ri!scores
{}Output:
"No results"
Appian Expression Tips
- • Use
ri!variableNamefor rule inputs - • Use
a!localVariables(local!x: …, body)for locals - • Use
a!forEach(items: …, expression: fv!item)to iterate - • Use
where()/reject(fn!isnull, list)to filter