The worksheetDownload the PDF
Answers

F13.6 Long answer questions

Exam preparation · GCSE · OCR J277 1.6.1, AQA 8525 3.8, Edexcel 1CP2 5.1.1 · about 15 min

BugBotLab

What this lesson is about

Point, because, so: a structure for discuss and evaluate questions, and a conclusion that decides.

Questions 5 marks in all

  1. [1 mark]How are long answers marked?

    1. AIn bands, for the quality of the argument
    2. BOne mark per fact
    3. CBy how much you write
    4. DBy handwriting
    Answer: A. Developed points and a conclusion reach the top band.
  2. [1 mark]What does a top-band answer always finish with?

    1. AA conclusion that decides, with a reason
    2. BA summary of the question
    3. CA list of key words
    4. DAn apology for running out of time
    Answer: A. Discuss and evaluate both want a judgement.
  3. [1 mark]The question names a village school with slow broadband. What should your points do?

    1. ARefer to that school and its broadband
    2. BTalk about schools in general
    3. CList every fact you know
    4. DOnly give advantages
    Answer: A. Relevance to the situation is what separates the bands.
  4. [1 mark]Put the parts of one developed point in order.

    Number the lines 1 to 3 to put them in the right order.

    1. Because: the reason it matters
    2. The point itself
    3. So: what follows from it
    Answer:
    The point itself
    Because: the reason it matters
    So: what follows from it

    Point, because, so. Repeat three times, then conclude.

  5. [1 mark]Which is worth more marks?

    1. A"The cache holds data the processor uses most, so fewer slow fetches from RAM are needed"
    2. B"It is faster"
    3. C"Cache is good"
    4. D"It improves performance"
    Answer: A. Name the thing and say why: development is where the marks are.

The task: mark a long answer

Write mark(answer) that scores a draft: one point for each phrase from FOR_WORDS it contains, one for each from AGAINST_WORDS, and two if it contains a phrase from CONCLUSION_WORDS, all ignoring capitals. For each answer in answers, print <name>: <score> and then, on the same line, needs both sides if it has nothing from one of the two sides, or needs a conclusion if it has no conclusion phrase, or top band if it has all three. At the end print best: <name>. Watch out: disadvantage contains advantage, so it counts on both sides.

# the two lines every program starts with: the commands, then the robot
from bugbot import *
connect()

FOR_WORDS = ["benefit", "advantage", "because it helps"]
AGAINST_WORDS = ["drawback", "disadvantage", "risk"]
CONCLUSION_WORDS = ["on balance", "overall", "in conclusion"]
answers = [
    ("Ada", "A benefit is that students learn to program, and another advantage is engagement. A drawback is the cost. On balance the school should buy them."),
    ("Bolt", "There is a clear advantage for practical work and another benefit for engagement."),
    ("Cog", "The risk is e-waste and the disadvantage is the cost, but the benefit is real."),
]

The hint students can ask for: Count how many phrases from each list appear in the lowered answer, with the conclusion worth two. Then decide the note: no phrase from one of the two sides, no conclusion, or all three.

A solution

from bugbot import *
connect()
FOR_WORDS = ["benefit", "advantage", "because it helps"]
AGAINST_WORDS = ["drawback", "disadvantage", "risk"]
CONCLUSION_WORDS = ["on balance", "overall", "in conclusion"]
answers = [
    ("Ada", "A benefit is that students learn to program, and another advantage is engagement. A drawback is the cost. On balance the school should buy them."),
    ("Bolt", "There is a clear advantage for practical work and another benefit for engagement."),
    ("Cog", "The risk is e-waste and the disadvantage is the cost, but the benefit is real."),
]

def mark(answer):
    text = answer.lower()
    fors = sum(1 for w in FOR_WORDS if w in text)
    againsts = sum(1 for w in AGAINST_WORDS if w in text)
    ends = 2 if any(w in text for w in CONCLUSION_WORDS) else 0
    return fors, againsts, ends

best_name = ""
best_score = -1
for name, answer in answers:
    fors, againsts, ends = mark(answer)
    score = fors + againsts + ends
    if fors == 0 or againsts == 0:
        note = " needs both sides"
    elif ends == 0:
        note = " needs a conclusion"
    else:
        note = " top band"
    print(f"{name}: {score}{note}")
    if score > best_score:
        best_score = score
        best_name = name
print("best:", best_name)

Any program that meets the task's checks is marked correct in the simulator; this is one way, not the only way.