MediumPython

Single Responsibility

PythonClean CodeSRPRefactoring

This function does three distinct jobs: filters active users, filters seniors, and formats — a maintenance nightmare.

# dirty — one function, three responsibilities
def solve(raw_users):
    active = [u for u in raw_users if u['is_active']]
    seniors = [u for u in active if u['age'] >= 60]
    return [f"{u['name'].upper()} ({u['age']})" for u in seniors]

Refactor into three functions, each with one job:

  • filter_active(users) — keep only active users
  • filter_seniors(users) — keep only users aged 60+
  • format_users(users) — format as "NAME (age)" strings

solve(users, 'filter_active') dispatches to the right function.

Sample tests

Test #1filter_seniors keeps age >= 60
Input: [[{"age":55,"name":"Bob","is_active":true},{"age":62,"name":"Eve","is_active":true}],"filter_seniors"]
Output: [{"age":62,"name":"Eve","is_active":true}]
Test #2format_users uppercases name and adds age
Input: [[{"age":70,"name":"Carol","is_active":true}],"format_users"]
Output: ["CAROL (70)"]
Test #3filter_active keeps active users
Input: [[{"age":65,"name":"Alice","is_active":true}],"filter_active"]
Output: [{"age":65,"name":"Alice","is_active":true}]