AP Computer Science Principles Written Response Exhaustive Study Guide

Guide Overview and Author Details

  • Source Material: AP Computer Science Principles Written Response Scoring Guide.

  • Author: Tanner Crow, AP Computer Science Teacher.     * Experience: 11+ years teaching AP CS.     * Stats: 1,800+ tutoring hours, 5.0 rating (444 reviews).     * Website: apcsexamprep.com.

  • Total Content:     * 3 complete projects: Grade Calculator, Quiz App, and Budget Tracker.     * Answer models for all 4 written response categories and all 6 scoring rows.     * Side-by-side comparisons of "Weak" vs. "Strong" responses.     * Annotated callouts for scoring decisions.     * Blank practice templates.

  • Important Exam Note: Written responses are completed during the proctored AP exam. They are not submitted beforehand. The guide serves as a rehearsal for the actual 60-minute exam session.

The AP Exam Written Response Structure

  • Time Allocation: 60 minutes to answer 2 written response questions (comprising 4 total prompts).

  • Personalized Project Reference (PPR): Students have their PPR available during the exam, which included:     1. A screenshot of the procedure definition (with its parameter).     2. A screenshot of the procedure call.     3. A screenshot of the list being used.     * Restriction: No comments are allowed in the PPR screenshots.

  • The 4 Prompts and Scoring Allocation:     * Prompt 1: Program Design, Function & Purpose (2 points). Tests ability to describe what the program does, why it exists, and the inputs/outputs.     * Prompt 2(a): Algorithm Development (1 point). Tests the ability to trace sequencing, selection, and iteration.     * Prompt 2(b): Errors & Testing (1 point). Tests identification of test cases with specific inputs/outputs and edge cases.     * Prompt 2(c): Data & Procedural Abstraction (2 points). Tests the explanation of list usage for managing complexity and the procedure’s role.

Scoring Principles and Pattern Recognition

  • Row-Based Scoring: Scoring is holistic within a row. One weak sentence can result in earning zero points for an entire row.

  • PPR Dependency: Responses must only reference code that is visible within the PPR screenshots.

  • Logical Consistency: Expected test outputs must be logically computed from the provided code, not estimated or guessed.

  • Key Vocabulary: Correct responses must mirror the rubric using specific phrases:     * "Manages complexity."     * "Sequencing/selection/iteration."     * "Parameter affects the behavior."     * "Without the list, I would need…"

Project 1: Grade Calculator — Code and Prompt Analysis

  • Program Overview: User enters grades, program stores them in a list, calculates average, and assigns a letter grade.

  • PPR Screenshot 1 (Code Logic):     * List initialization: grades=[]grades = [].     * Input loop: for i in range(num):g=float(input("Enter grade:"));grades.append(g)for\ i\ in\ range(num): g = float(input("Enter\ grade: ")); grades.append(g).     * Procedure Definition: def calculate_average(grade_list):def\ calculate\_average(grade\_list):.     * Logic inside Procedure:         * total=0total = 0 (Initialization).         * for grade in grade_list:for\ grade\ in\ grade\_list: (Iteration).         * total=total+gradetotal = total + grade (Sequencing/Accumulation).         * average=total/len(grade_list)average = total / len(grade\_list) (Sequencing/Calculation).         * Selection (If/Elif/Else):             * average90letter="A"average \ge 90 \rightarrow letter = "A"             * average80letter="B"average \ge 80 \rightarrow letter = "B"             * average70letter="C"average \ge 70 \rightarrow letter = "C"             * Elseletter="F"Else \rightarrow letter = "F"

  • Prompt 1 (Purpose vs. Functionality):     * Weak Response Example: "My program calculates grades. The user inputs their grades and the program shows the average."     * Strong Response Example: "The purpose of my program is to help students track their academic performance… accept numeric grade values… outputs calculated average as a decimal and corresponding letter grade… giving students a clear, immediate picture of their standing."     * The Rule: Purpose is the WHY (problem solved). Functionality is the WHAT (steps taken). Input/Output must be specific (type and method of entry).

  • Prompt 2(a) (Algorithm Details):     * Strong Logic Trace: If grade_list=[85,90,75]grade\_list = [85, 90, 75], total accumulates to 250250, average is calculated as 83.3383.33, and selection assigns "B""B".     * Requirement: You must explain what iteration does (e.g., "accumulates the sum"), not just label it.

  • Prompt 2(b) (Errors & Testing):     * Test Case 1 (Normal): calculate_average([95,88,92])calculate\_average([95, 88, 92]) yields average 91.6791.67 and letter "A""A".     * Test Case 2 (Boundary): calculate_average([70,69,71])calculate\_average([70, 69, 71]) yields average 70.070.0 and letter "C""C". This tests the threshold between C and F.

  • Prompt 2(c) (Complexity and Abstraction):     * List usage: Manages complexity because the program can handle any number of grades using one variable. Without it, you would need separate variables (e.g., grade1,grade2,...,grade50grade1, grade2, ..., grade50) and 50 separate addition statements.     * Parameter usage: grade_listgrade\_list allows the procedure to work on any dataset. Passing [95,88,92][95, 88, 92] vs. [60,55,72][60, 55, 72] changes the behavior/output despite code remaining static.

Project 2: Trivia Quiz App — Code and Prompt Analysis

  • Program Overview: Parallel lists store questions and answers. The procedure loops through, prompts the user, evaluates answers, and returns a score.

  • PPR Screenshot 1 (Code Logic):     * questions=["What does CPU stand for?","What number system do computers use?",...]questions = ["What\ does\ CPU\ stand\ for?", "What\ number\ system\ do\ computers\ use?", ...]     * answers=["Central Processing Unit","Binary",...]answers = ["Central\ Processing\ Unit", "Binary", ...]     * def run_quiz(q_list,a_list):def\ run\_quiz(q\_list, a\_list):.     * Selection logic: if user_ans.lower()==a_list[i].lower():if\ user\_ans.lower() == a\_list[i].lower():.

  • Prompt 2(b) (Test Cases):     * Test Case 1: All correct answers yields 3/33 / 3.     * Test Case 2 (Edge Case): Case sensitivity. Entering "binary""binary" (lowercase) should yield "Correct!" due to .lower() conversion.

  • Prompt 2(c) (Abstraction):     * Parallel Lists: Managing content in parallel structures. Without them, you would need separate strings for every q/a pair (q1,q2,a1,a2q1, q2, a1, a2) and separate if/elseif/else blocks for each.

Project 3: Budget Tracker — Code and Prompt Analysis

  • Program Overview: Stores expense amounts and categories. Procedure category_totalcategory\_total sums expenses matching a specific category string.

  • PPR Screenshot 1 (Code Logic):     * amounts=[45.00,12.50,80.00,22.00,15.75]amounts = [45.00, 12.50, 80.00, 22.00, 15.75]     * categories=["food","food","rent","food","transport"]categories = ["food", "food", "rent", "food", "transport"]     * def category_total(expense_list,cat_list,category):def\ category\_total(expense\_list, cat\_list, category):.

  • Prompt 2(a) (Algorithm Trace):     * Example for category="food"category = "food":         * Index 0: "food" matches, add 45.0045.00.         * Index 1: "food" matches, add 12.5012.50.         * Index 2: "rent" no match.         * Index 3: "food" matches, add 22.0022.00.         * Index 4: "transport" no match.         * Final Total: 79.5079.50.

  • Prompt 2(b) (Testing Logic):     * Case 1: Category with multiple entries (tests non-consecutive indices).     * Case 2: Category with no entries (e.g., "entertainment"). The procedure should return the initialized value of 00.

Final Mastery Checklist for Students

  • Prompt 1: Use the template: "The purpose of my program is to help [user] [achieve goal / solve problem]."

  • Prompt 2(a): Explicitly mention (1) sequencing initialization, (2) loop iteration specifics, (3) selection branch outcomes, and (4) a step-by-step trace with math.

  • Prompt 2(b): Always include a boundary/edge test. Examples: empty list, exact threshold, missing category.

  • Prompt 2(c): On the list question, specifically describe the code without the list (naming variables like exp1,exp2exp1, exp2). On the parameter question, illustrate how two different values (arguments) passed into the call create two different results (outputs).

  • College Board Stats:     * 34.8% of students using these methods score 5s on the AP CSP exam.     * The National average for 5s is 9.6%.