AP Computer Science Principles
PPR, video, and program code PDF.
4 screenshots. 6 points. No pressure.
The Personalized Project Reference is a document you submit in the AP Digital Portfolio before the exam. On exam day, College Board gives it back to you so you can reference your own code while answering written-response questions.
It contains exactly 4 code screenshots, organized into two sections: Procedure and List.
Each section has two parts: (i) showing the code itself and (ii) showing it being used.
Your code screenshots must not contain any comments. Comments in the PPR result in an automatic zero for that row.
Every screenshot in the PPR must meet these basic standards.
//, #, /* */, or any other comment syntax before capturing. This includes commented-out code.Screenshots i and ii
Show the full student-developed procedure with parameters that affect behavior and an algorithm that includes sequencing, selection, and iteration.
Show where that same procedure is actually called in your program with real arguments.
Screenshot i shows the full definition of your student-developed procedure. College Board checks for three things.
if/else. Iteration means a loop. Sequencing means steps in order.
All three must be present in the same procedure. You cannot split them across separate functions.
def calculate_grade(scores):
total = 0
for score in scores:
total = total + score
average = total / len(scores)
if average >= 90:
return "A"
elif average >= 80:
return "B"
else:
return "C or below"
def greet_user():
name = input("Name: ")
if name == "Alice":
print("Hello, Alice!")
else:
print("Hello, stranger!")
Look over the examples then go down one slide and pick which example meets all Procedure i requirements.
Choose the example that includes a parameter affecting behavior and has sequencing, selection, and iteration in the same procedure.
def calculate_grade(scores):
total = 0
for score in scores:
total = total + score
average = total / len(scores)
if average >= 90:
return "A"
elif average >= 80:
return "B"
else:
return "C or below"
calculate_grade) and returns a value.scores) that drives all the logic.for score in scores.if / elif / else on the average.def greet_user():
name = input("Name: ")
if name == "Alice":
print("Hello, Alice!")
else:
print("Hello, stranger!")
greet_user() takes nothing. No parameter means no effect on functionality.if/else) and sequencing, but that is not enough.def find_max(values, threshold):
best = None
for v in values:
if v > threshold:
if best is None or v > best:
best = v
return best
# My student developed procedure
def find_max(values, threshold):
best = None
for v in values:
if v > threshold:
if best is None or v > best:
best = v
return best
Look over both versions, then go down one slide to answer the question.
def find_max(values, threshold):
best = None
for v in values:
if v > threshold:
if best is None or v > best:
best = v
return best
# My student developed procedure
def find_max(values, threshold):
best = None
for v in values:
if v > threshold:
if best is None or v > best:
best = v
return best
# My student developed procedure.Screenshot ii is simpler: it just needs to show a call to the same procedure from screenshot i somewhere else in your program.
Tip: if the call is inside another function, show enough context so it is clear the call actually runs during program execution.
The procedure from earlier is calculate_grade(scores). Review these call examples.
result = calculate_grade([88, 92, 79])
calculate_grade()
student_scores = [70, 85, 91, 88]
letter = calculate_grade(student_scores)
print("Grade:", letter)
After reviewing, go down one slide to choose which calls earn credit.
calculate_grade([88, 92, 79])calculate_grade()calculate_grade(student_scores)result = calculate_grade([88, 92, 79])
calculate_grade()
scores. This call would crash and shows the parameter is not being used.student_scores = [70, 85, 91, 88]
letter = calculate_grade(student_scores)
print("Grade:", letter)
Screenshots i and ii
Show code that creates the list and/or adds data to it in a way that supports meaningful complexity management.
Show code that processes data from that same list, such as iterating, transforming, or computing results.
College Board does not just want to see a list. They want to see that using a list makes your program simpler or more powerful than it would be without one.
The list lets you handle a variable number of items, loop over them, or store related data together. Removing the list would require you to write repetitive code or hard-code values.
A list that holds exactly one value, or a list that is never iterated and whose elements are accessed only by fixed index (list[0], list[1]), does not meaningfully reduce complexity.
Ask yourself: if you replaced your list with individual variables, would your program be significantly longer or harder to write? If yes, your list manages complexity.
Screenshot i shows how data gets stored in your list. This could be at initialization, through a loop, or by appending values over time.
scores = [88, 92, 79]).scores.append(value) inside a loop).Tip: showing the list being populated inside a loop is a strong choice because it also demonstrates that the list scales with the data.
quiz_scores = []
for i in range(num_quizzes):
score = int(input("Enter score: "))
quiz_scores.append(score)
my_list = [42]
student_names = ["Alice", "Bob", "Carol", "David"]
Review the storage examples, then go down one slide to answer.
quiz_scoresmy_liststudent_namesquiz_scores = []
for i in range(num_quizzes):
score = int(input("Enter score: "))
quiz_scores.append(score)
num_quizzes. Clearly manages complexity.my_list = [42]
student_names = ["Alice", "Bob", "Carol", "David"]
Screenshot ii shows the same list from screenshot i being actively used. The code must do something meaningful with the list's contents.
print(my_list)) or passing the whole list to a function without processing it does not demonstrate meaningful use.Same list rule: screenshots i and ii must show the same list. You cannot use two different lists.
The list from earlier is student_names. Review these usage examples.
for name in student_names:
print("Welcome,", name)
print(student_names)
roster = []
for name in student_names:
roster.append(name.upper())
display_roster(roster)
When ready, go down one slide and choose which usages earn credit.
for name in student_names:
print("Welcome,", name)
print(student_names)
roster = []
for name in student_names:
roster.append(name.upper())
display_roster(roster)
student_names = []
absent_names = []
for record in attendance_records:
student_names.append(record["name"])
if record["absent"]:
absent_names.append(record["name"])
for n in absent_names:
print("Follow up:", n)
Look at these responses carefully, then go down one slide to answer.
student_names first, but Part ii uses absent_names.Requirements beyond the PPR
Your video must show your program running, but it has strict constraints. All of these must be true at the same time.
Note: text captions are allowed but not required. If you include them, make sure you do not show your name, school, or any other identifying information.
The Program Code PDF is your entire source code exported as a PDF. Unlike the PPR, comments are allowed here, and citation comments are required when code was not written entirely by you.
Run through all three components before marking anything as final in the AP Digital Portfolio.
PPR
Video
Program Code PDF