iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0

複習小考頁面加入弱點加強模式,錯誤過越多次的題目越容易出現。

▍程式碼

<!-- quiz.html -->

<div>
    <!-- 加入弱點加強模式 -->
    <a href="{{ url_for('quiz', mode='weakness') }}">
            <div>
                弱點加強模式
                <div>根據題目錯誤次數進行重點練習。</div>
            </div>
        </div>
    </a>
</div>
# views.py

def quiz():
    mode = request.args.get('mode', 'selection')  

    # 模式選擇畫面 ...

    if mode == 'practice':
        # 錯題重練模式邏輯 ...
        
    # 弱點加強模式
    elif mode == 'weakness':
        # 根據 error_count 加權
        title = '弱點加強模式'
        weighted_population = [] # 儲存有錯誤紀錄的題目
        weights = []             # 儲存權重

        for question in all_questions:
            error_count = question.get('error_count', 0)
            if error_count > 0:
                weighted_population.append(question)
                weights.append(error_count) 
                
        if not weighted_population:
            return render_template('quiz.html', 
                                   title='無弱點題目可加強', 
                                   quiz_data=None, 
                                   mode='selection',
                                   error_message='目前沒有答錯的題目紀錄,請選擇隨機出題。')
        
        num_to_sample = min(QUIZ_SIZE, len(weighted_population))
        
        # 使用 random.choices 進行加權抽樣
        unique_quiz_data = set()
        
        # 設置上限避免無限循環
        max_attempts = num_to_sample * 50
        
        for _ in range(max_attempts):
            if len(unique_quiz_data) >= num_to_sample:
                break
            
            chosen_question = random.choices(
                weighted_population, 
                weights=weights, 
                k=1
            )[0]
            unique_quiz_data.add(tuple(sorted(chosen_question.items()))) 
            
        # 將結果轉回列表
        temp_data = [dict(item) for item in unique_quiz_data]
        quiz_data = temp_data[:num_to_sample]
        
        return render_template('quiz.html', 
                           title=title, 
                           quiz_data=quiz_data, 
                           mode=mode)

    else: 
        # 隨機抽題 ...
            
    # 未滿 50 題抽取所有題目
    num_to_sample = min(QUIZ_SIZE, len(source_questions))
    
    if num_to_sample > 0:
        quiz_data = random.sample(source_questions, num_to_sample)
    else:
        quiz_data = [] 
    
    return render_template('quiz.html', 
                           title=title, 
                           quiz_data=quiz_data, 
                           mode=mode)

上一篇
DAY23 - AI 助教
下一篇
DAY25 - 預測考題
系列文
打造你的數位圖書館:從雜亂檔案到個人化知識庫26
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言