| Name | ID | 1.1 | 1.2 | 1.3 | 1.4 | 2.1 | 2.2 | 2.3 | 2.4 | 2.5 | Extra | | | | Sum | Mark | | | | | | | | | | | | | |-------+--------+--------+-----+-----+-----+-----+-----+-----+-----+-----+-------+---+---| | Name1 | 111111 | 10 | 10 | 10 | 12 | 12 | 3 | 4 | 12 | 3 | | 1 | 5 | | 2 | 78 | #ERROR | | | | | | | | | | 2 | 5 | | Name2 | 22222 | | | | | | | | | | | 3 | 5 | | | 0 | #ERROR | | | | | | | | | | 4 | 5 | | Name3 | 33333 | | | | | | | | | | | 5 | 5 | | | 0 | #ERROR | | | | | | | | | | 6 | 5 | #+TBLFM: $14='(sbe score2mark (score $13) (passscore "50")) #+name: score2mark #+begin_src python :var score=0 :var passscore=0 def score2mark(score, passscore): marklist = [5, 4.3, 4, 3.7, 3.3, 3, 2.7 ,2.3, 2, 1.7, 1.3, 1] step=(100-passscore)/(len(marklist)-1) if score < passscore: return marklist[0] for mark in marklist[1:]: if round(passscore) <= score <= round(passscore+step): return mark else: passscore += step return -1 return score2mark(score, passscore) #+end_src