"""
Exercise 2 – SOLUTION – Persona, Task, and Data in a Structured Prompt
=======================================================================
AISE501 · Prompting in Coding · Spring Semester 2026
"""
from pathlib import Path
from server_utils import chat, get_client, print_messages, print_separator
client = get_client()
code_to_review = Path("analyze_me.py").read_text()
temperature_value=1
# ── Part A: Persona + Task + Code ─────────────────────────────────────────────
print_separator("Part A – Structured Prompt: Persona / Task / Code")
prompt_a = f"""\
You are a senior Python engineer with 10+ years of experience.
You are rigorous about correctness, follow PEP-8 strictly, and care
deeply about defensive programming and readable code.
Review the Python code provided below.
Identify every bug and code-quality issue you can find.
For each issue, state what is wrong and why it is a problem.
{code_to_review}
"""
messages_a = [
{"role": "user", "content": prompt_a}
]
print_messages(messages_a)
response_a = chat(client, messages_a, temperature=temperature_value)
print(response_a)
# ── Part B: Refine – Ask for a Prioritised Bug List ───────────────────────────
print_separator("Part B – Refined Prompt: Prioritised Bug List")
system_b = """\
You are a senior Python engineer performing a thorough code review.
Be concise, precise, and always refer to line numbers when available.
"""
prompt_b = f"""\
You are a senior Python engineer with 10+ years of experience.
You are rigorous about correctness, follow PEP-8, and care about
defensive programming and readable code.
Review the Python code below.
Identify every bug and code-quality issue.
Classify each finding by severity:
- Critical : causes a crash or wrong result under normal use
- Medium : bad practice that will cause problems in production
- Style : violates PEP-8 or reduces readability
For each finding produce exactly this structure (plain text):
[SEVERITY] Line :
Fix hint:
Group findings under headings: ## Critical, ## Medium, ## Style
{code_to_review}
"""
messages_b = [
{"role": "system", "content": system_b},
{"role": "user", "content": prompt_b},
]
print_messages(messages_b)
response_b = chat(client, messages_b, temperature=temperature_value)
print(response_b)
# ── Part C: Request a Corrected Function ──────────────────────────────────────
print_separator("Part C – Ask for a Corrected Function")
followup = """\
Rewrite only the `calculate_statistics` function with all bugs fixed.
Requirements:
- Handle an empty list gracefully (return None or raise ValueError with a clear message)
- Use sample variance (divide by N-1)
- Add full PEP-8 type hints
- Add a NumPy-style docstring
Return only the function code, no surrounding explanation.
"""
messages_c = messages_b + [
{"role": "assistant", "content": response_b},
{"role": "user", "content": followup},
]
print_messages(messages_c)
response_c = chat(client, messages_c, temperature=temperature_value)
print(response_c)
# ── Reflection Questions ──────────────────────────────────────────────────────
print_separator("Reflection Questions")
print(
"1. Did the LLM find all 7 bugs? Which did it miss?\n"
"2. How did the tag change the structure of the answer?\n"
"3. What is the advantage of continuing a conversation vs. starting fresh?\n"
"4. How would you scale this pattern to a large codebase (many files)?\n"
)