File size: 3,560 Bytes
50b7a69 4556c83 50b7a69 de7c6d8 9a82c5c 50b7a69 9a82c5c 4556c83 0d1bedf 9a82c5c 50b7a69 0d1bedf 50b7a69 de7c6d8 50b7a69 0d1bedf 3a7f5ab 0d1bedf 50b7a69 0d1bedf 50b7a69 d77ef80 83297c3 d77ef80 50b7a69 83297c3 de7c6d8 83297c3 4556c83 d77ef80 3a7f5ab 83297c3 de7c6d8 50b7a69 de7c6d8 50b7a69 83297c3 de7c6d8 9a82c5c b4443a9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
from flask import Flask, render_template, request, redirect, url_for, session
from flask_session import Session
import json
import random
import os
import time
app = Flask(__name__)
app.secret_key = 'supersecretkey'
# Configure Flask-Session
app.config['SESSION_TYPE'] = 'filesystem'
Session(app)
QUESTIONS_FOLDER = 'questions'
@app.route('/')
def index():
files = [f for f in os.listdir(QUESTIONS_FOLDER) if f.endswith('.json')]
return render_template('index.html', files=files)
@app.route('/start', methods=['POST'])
def start():
session['questions'] = []
session['answers'] = []
session['score'] = 0
session['current_question'] = 0
session['start_time'] = time.time()
selected_file = request.form['file']
session['selected_file'] = os.path.splitext(selected_file)[0] # Remove file extension
file_path = os.path.join(QUESTIONS_FOLDER, selected_file)
with open(file_path, 'r') as file:
questions = json.load(file)
random.shuffle(questions)
session['questions'] = questions
return redirect(url_for('quiz'))
@app.route('/quiz', methods=['GET', 'POST'])
def quiz():
if 'questions' not in session or 'current_question' not in session:
return redirect(url_for('index'))
if request.method == 'POST':
action = request.form.get('action')
if action == 'next':
answers = request.form.getlist('answer')
if answers:
session['answers'].append(answers)
correct_answers = session['questions'][session['current_question']]['correct']
if set(answers) == set(correct_answers):
session['score'] += 1
session['current_question'] += 1
if session['current_question'] >= len(session['questions']):
return redirect(url_for('results'))
elif action == 'previous':
session['current_question'] -= 1
if session['current_question'] < 0:
session['current_question'] = 0
elif action == 'end':
return redirect(url_for('results'))
question = session['questions'][session['current_question']]
multiple_selection = 'SELECT TWO' in question['question'] or 'SELECT THREE' in question['question']
elapsed_time = time.time() - session['start_time']
elapsed_time_str = time.strftime('%H:%M:%S', time.gmtime(elapsed_time))
return render_template('quiz.html', question=question,
question_number=session['current_question'] + 1,
total_questions=len(session['questions']),
selected_file=session['selected_file'],
show_previous=session['current_question'] > 0,
multiple_selection=multiple_selection,
elapsed_time=elapsed_time_str)
@app.route('/results')
def results():
if 'questions' not in session or 'answers' not in session:
return redirect(url_for('index'))
total_questions = len(session['questions'])
score_percentage = (session['score'] / total_questions) * 100
elapsed_time = time.time() - session['start_time']
elapsed_time_str = time.strftime('%H:%M:%S', time.gmtime(elapsed_time))
return render_template('results.html', score=session['score'],
total_questions=total_questions, score_percentage=score_percentage,
elapsed_time=elapsed_time_str)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860) |