You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

校园Side Project:基于CSV的测验报告(主题+难度筛选)开发遇阻求助

How to Fix Your Subject + Difficulty Quiz Report Feature

Hey there! Let's work through this stuck spot—you already nailed the user-specific progress report, so you're halfway there. Here's a step-by-step breakdown to build that subject-and-difficulty CSV report for Fergus:

1. First, Lock Down Your Data Structure

Before writing any new code, double-check that your quiz results data has clear, consistent fields for subject and difficulty. If you're storing results in a database, make sure those columns exist; if it's a flat file/object, confirm each result entry includes these values.

For example, your data should look something like this (adjust to your language):

quiz_results = [
    {"user_id": 456, "subject": "Math", "difficulty": "Hard", "score": 78, "completed_date": "2024-05-22"},
    {"user_id": 789, "subject": "English", "difficulty": "Easy", "score": 92, "completed_date": "2024-05-21"},
    # ... more entries
]

If these fields are missing (e.g., you only have question IDs), you'll need to map each question to its subject/difficulty first—this is the foundation of your filter.

2. Build a Robust Filter Logic

You need to take Fergus's input (subject + difficulty) and pull only matching results. A few key tips here:

  • Normalize input and data: Handle case sensitivity (e.g., Fergus types "math" but your data uses "Math") by converting both to lowercase/uppercase:
    target_subject = input("Enter subject: ").strip().lower()
    target_difficulty = input("Enter difficulty: ").strip().lower()
    
    filtered_results = [
        res for res in quiz_results
        if res["subject"].lower() == target_subject
        and res["difficulty"].lower() == target_difficulty
    ]
    
  • Handle sub-topics (if needed): If Fergus might input subtopics like "Algebra" instead of "Math", create a mapping dictionary to group them:
    subject_groups = {"algebra": "math", "geometry": "math", "literature": "english"}
    # Then adjust the filter to use the group instead of raw input
    mapped_subject = subject_groups.get(target_subject, target_subject)
    

3. Reuse Your Existing CSV Generation Code

You already have a working CSV generator for the user progress report—don't reinvent the wheel! Just modify it to accept your filtered results instead of user-specific ones.

For example, if your existing function looks like this:

def generate_user_progress_csv(user_id, results, filename):
    # code to write CSV with user's progress

Tweak it to a generic function that takes any list of results:

def generate_generic_csv(results, filename):
    # same CSV writing logic, no user ID filter

Then call it with your filtered data:

output_filename = f"{target_subject}_{target_difficulty}_quiz_results.csv"
generate_generic_csv(filtered_results, output_filename)

4. Add Input Validation & Error Handling

Prevent crashes and confusing outputs by validating Fergus's input:

  • Create a list of valid subjects/difficulties:
    valid_subjects = ["math", "english", "science"]
    valid_difficulties = ["easy", "medium", "hard"]
    
  • Check if the input matches a valid option before running the filter:
    if target_subject not in valid_subjects:
        print(f"Invalid subject! Choose from: {', '.join(valid_subjects)}")
        exit()
    # Same check for difficulty
    
  • Handle empty filtered results: If no matches exist, generate a CSV with a clear message (e.g., a single row saying "No quiz results found for this subject and difficulty") instead of a blank file.

5. Test Edge Cases

Make sure your feature works for all scenarios:

  • No matching results (empty filtered list)
  • Multiple users matching the subject/difficulty
  • Case-variant inputs (e.g., "MATH" vs "math")
  • Sub-topic inputs (if you added that mapping)

内容的提问来源于stack exchange,提问作者user9420932

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:29:18