コード例 #1
0
ファイル: api.py プロジェクト: Poligun/NihonngoDjango
def p_recheck_leanred_words(user):
    """
    重新检查并计算给定用户的已学习生词的信息。
        参数:
            待重新检查的用户的 ID。
    """
    with transaction.atomic():
        LearnedWord.objects.all().delete()

        question_dict = {}
        for question in Question.objects.filter(user_id = user.id, answered = True):
            if question.related_word_id not in question_dict:
                question_dict[question.related_word_id] = []
            question_dict[question.related_word_id].append(question)

        for key, value in question_dict.items():
            learned_word = LearnedWord(word_id = key, user_id = user.id)
            learned_word.save()
            value.sort(key = lambda q: q.answer_date)

            unfamiliarity = 1
            learned_word.learned_date = current_date = value[0].answer_date.date()
            total_answered_count = 0
            correct_answered_count = 0

            for question in value:
                time_delta = question.answer_date.date() - current_date
                unfamiliarity = p_calculate_unfamiliarity_with_params(time_delta, unfamiliarity, correct_answered_count)
                
                total_answered_count += 1
                if question.answer_is_correct:
                    correct_answered_count += 1
                    unfamiliarity -= 1 / UNFAMILIARITY_COEFFICIENT
                else:
                    unfamiliarity += 1 / UNFAMILIARITY_COEFFICIENT

                unfamiliarity = p_bound_value(unfamiliarity, (0, 1))
                current_date = question.answer_date.date()

            learned_word.last_review_date = current_date
            learned_word.total_answered_count = total_answered_count
            learned_word.correct_answered_count = correct_answered_count
            learned_word.unfamiliarity = unfamiliarity
            learned_word.save()