ICS 33 - Assignment 3 - Reinforcement
Due: Friday, August 16, 2025 @ 11:59pm
Submit via Gradescope:
● query_tools .py (autograded)
● query_analysis .pdf (manually graded)
Summary
This assignment reinforces your skills in:
● SQL query writing
● Python comprehensions
● Custom iterators using the iteration protocol Generator functions and lazy evaluation
Generative AI Extra Credit
Use of gen AI: You may use generative AI (gen AI) to help you (e.g., ChatGPT or Copilot), but you must include (1) all prompts and outputs provided by the gen AI and (2) any modifications you made to the resulting outputs provided and why you modified the outputs as such. This policy allows us to understand (1) how you are using gen AI and (2) help you use it more effectively, so as to demonstrate to others (e.g., future or possible employers) that you are adding value beyond the gen AI itself (e.g., you are worth hiring as a junior developer rather than having a senior developer just use the gen AI and not hire a junior developer). To encourage the submission of such gen AI-oriented materials, submitting this information in a file called genai_io .pdf will earn you up to 3 points of extra credit. We will grade that file on the quality of your prompts, the sensibility of the modifications to outputs, and the reasoning behind those modifications. Note that code generated using the current state-of-the-art generative AI has a strong tendency to be overly verbose and hallucinate, so we will be checking for such properties and others when evaluating quality and sensibility. Avoid just prompting and re-prompting generative AI without understanding the output. We will discuss strategies to assist you with this as we progress through the lectures.
We will also be using tools to detect your use of generative AI, so if we have strong suspicions that you have used generative AI without following the policy specified above, you may face a severe penalty, including failing the assignment or having your incident reported to the UCI Office of Academic Integrity & Student Conduct (OAISC), which may lead to suspension or dismissal/expulsion.
What You Will Submit
File
|
Purpose
|
Grading
|
Points
|
query_tools .py
|
Python code and SQL query strings
|
Autograded
|
90
|
query_analysis .pdf
|
Written SQL queries and lazy explanation
|
Manually graded
|
10
|
Use the provided query_analysis_template .docx to complete your PDF.
Problems
1a. SQL Query (15 points)
Write a SQL query to return the names of all employees in the 'engineering ' department who earn more than $85,000, sorted by salary descending.
● Write this query as a Python string in query_1a in query_tools .py
● Also, copy this query into your PDF submission (query_analysis .pdf)
1b. SQL Query (15 points)
Write a SQL query to return the average salary of employees whose job title contains the word 'Senior '. Round the result to two decimal places.
● Write this query as a Python string in query_1b in query_tools .py
● Also, copy this query into your PDF submission (query_analysis .pdf)
2. Comprehensions (15 points)
Implement the following functions in query_tools .py. Each must consist of a single return statement using a comprehension:
python
def extract_ids_above_threshold(records, threshold):
"""Returns a list of IDs of employees whose salary exceeds
the threshold."""
python
def project_department_counts(records):
"""Returns a dictionary mapping each department to its
employee count."""
You can assume records as a dictionary consisting of the information from employees
3. Custom Iterator (12 points)
Implement the class SalaryStepper:
python
class SalaryStepper:
def __init__(self, start, stop, step=5000): ...
def __iter__(self): ...
def __next__(self): ...
This class should yield salary values starting at start, stopping before stop, and incremented by step.
Example:
python
list(SalaryStepper(80000, 90000)) # ➞ [80000, 85000]
4. Generator with Lazy Filtering (21 points)
Implement the generator function filtered_names ( records ) that yields names of employees who:
● Work in the 'engineering ' department
● Have names starting with 'J '
● Have a salary greater than or equal to (>=) $90,000
You must implement this lazily, using yield or generator expressions. Do not use intermediate lists.
5. Lazy Evaluation Explanation (10 points)
In query_analysis .pdf, explain why and how your implementation of filtered_names () is lazy, and what the benefit is.
● Your answer must be 3–5 sentences
● Focus on concepts from the lecture: memory efficiency, searching, etc.