15日目14日目-問題の正解率を表示
22172 ワード
0.quizページのhtmlファイルのjavascriptコードが長すぎてstatic/jsフォルダの個別ファイルに分離します。
OXテストの問題正解率をリアルタイムで計算して表示するコード
昨夜、どの問題にも問題がある正解率はどうでしたか.考えました.現在の「分類」(答えを明らかにする質問がある)に代わって、質問ごとの人に正解率を出してもらう意見がいいので、このように変えました.次に、実装プロセスとコードを示します.
//javascript 입니다.
/**
* @brief 정답을 골랐을 때 맞았는지 틀렸는지와 설명을 띄우고, 점수 합산을 위해 이 정보를 저장합니다.
* @param {string} selectedAnswer O를 골랐는지 X를 골랐는지에 대한 값
* @returns {}
* @author 김진회
* @date 21.08.24
*/
function selectAnswer(selectedAnswer) {
//답을 골랐을 때 마지막 문제라면 버튼이름을 '다음 문제로'에서 결과보러가기로 변경하기
let thisQuizNo = seq - 1;
if (thisQuizNo > 9) {
$('#btn-next').html("결과보러가기!");
}
//고른 답이 정답일 때(if)와 오답일 때(else)
if (selectedAnswer === correctAnswer) {
//이 문제의 정답을 맞췄다고 서버에 전송
$.ajax({
dataType: "json",
type: "POST",
url: "/saveone",
data: {
"quizno": thisQuizNo,
"device": device,
"correctOrNot": 1
},
success: function (response) {
}
})
countCorrect++;
// 모달창에 정답입니다! 문구와 정답 설명을 넣어 모달창 띄우기
temp_check = `정답입니다! <br/><br>`;
$('#description').html(temp_check);
modalOn()
} else {
//이 문제의 정답을 틀렸다고 서버에 전송
$.ajax({
dataType: "json",
type: "POST",
url: "/saveone",
data: {
"quizno": thisQuizNo,
"device": device,
"correctOrNot": 0
},
success: function (response) {
}
})
// 모달창에 아쉽네요! 문구와 함께 답 설명을 넣어 모달창 띄우기
temp_check = `아쉽지만 오답이에요! <br/><br>`;
$('#description').html(temp_check);
modalOn()
}
}
以上のように,問題の正解を選択したときに正解なのか誤りなのか,説明のために作成したselectAnswer関数内で正解なのか誤りなのかを選択し,コードを追加し,異なる値をajaxを介してサーバ側に送信する.# python입니다.
from flask import Flask, render_template, jsonify, request, flash, session, redirect
from pymongo import MongoClient
import datetime
app = Flask(__name__)
conn = MongoClient()
db = conn.good42
# 문제별 정답률: 퀴즈 하나를 풀 때마다 그 시도에서 해당 문제의 정답을 맞혔는지 여부를 DB에 저장하기
# author 김진회
# date 21.08.29
@app.route('/saveone', methods=['POST'])
def saveone():
quizno = request.form['quizno']
device = request.form['device']
correct = request.form['correctOrNot']
now = datetime.datetime.now()
doc = {
"quizno": quizno,
"device": device,
"correct": correct,
"time": now,
}
db.quizanswers.insert_one(doc)
return jsonify({'msg': '등록 완료!'})
サーバ側は、ajaxで送信された値を受信し、現在のビジュアル情報とともにmongodbに保存します.そして,解答を設定する際に,このように格納された情報を伝達し,サーバ側に正解率を計算させる.このように算出された対応する質問の正解率は,質問,正解,解説情報とともに回答に送られる.
# python입니다.
## 퀴즈페이지 HTML 화면 보여주기
## GET으로 들어오면 단순히 화면을 보여주고, POST로 들어오면 DB에서 다음 문제 정보를 전달하는 api
@app.route('/quiz', methods=['GET', 'POST'])
def quiz():
if request.method == 'GET':
return render_template('quiz.html')
elif request.method == 'POST':
seq = request.form['seq']
quiz = db.quiz.find_one({'no': seq}, {'_id': False})
#현재 문제의 정답률 계산하기
answers = db.quizanswers.find({'quizno':seq}).count()
corrects = db.quizanswers.find({'quizno':seq, 'correct':'1'}).count()
rate = round(corrects / answers * 100, 2)
return jsonify({'msg': '성공', 'quiz': quiz, 'rate': rate})
//javascript입니다.
/**
* @brief 현재 순서에 맞게 퀴즈를 세팅합니다.(ajax)
* @param {int} no 이번에 세팅해야할 퀴즈 번호
* @returns {}
* @author 김진회
* @date 21.08.23
*/
function setQuiz(no = 1) {
$.ajax({
dataType: "json",
type: "POST",
url: "/quiz",
data: {
"seq": no,
},
success: function (response) {
quiz = response.quiz['content']
correctAnswer = response.quiz['answer']
description = response.quiz['description']
quizno = response.quiz['no']
correctRate = response.rate
temp_quiz = `${quiz}`
temp_rate = `정답률: ${correctRate}%`
$('#quiz').html(temp_quiz);
$('#correct-rate').html(temp_rate);
numberOfQuiz(quizno);
}
})
//현재 풀고 있는 문제 번호를 +1해서 저장
seq++;
}
サーバ側はajaxで以下の問題情報を要求し,受信したsetQuiz関数に正解率補正Rateを符号化し,適切な場所でhtmlを作成して入れる.Reference
この問題について(15日目14日目-問題の正解率を表示), 我々は、より多くの情報をここで見つけました https://velog.io/@danceintherain/15일-프로젝트-14일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol