120 lines
3.8 KiB
Python
120 lines
3.8 KiB
Python
from flask import Flask, render_template, request, redirect, url_for, session, Blueprint
|
|
import os
|
|
import random
|
|
|
|
TEXTFILES = ["./portalfejlesztes_net_ben/kerdessor1_manual.txt", "./portalfejlesztes_net_ben/kerdessor2_manual.txt", "./portalfejlesztes_net_ben/kerdessor3.txt"]
|
|
|
|
portalfejlesztes_net_ben = Blueprint(
|
|
'portalfejlesztes_net_ben',
|
|
__name__,
|
|
template_folder='templates' # Ensure this matches the folder location
|
|
)
|
|
|
|
def parse_questions():
|
|
content = []
|
|
for file_path in TEXTFILES:
|
|
with open(file_path, 'r', encoding='utf-8') as file:
|
|
content.extend(file.read().split("\n\n"))
|
|
|
|
questions = []
|
|
|
|
for block in content:
|
|
lines = block.strip().split("\n")
|
|
question = lines[0].replace("Kérdés: ", "").strip()
|
|
answers = []
|
|
correct_answers = []
|
|
|
|
for line in lines[1:]:
|
|
answer = line.strip()
|
|
if answer.startswith('!'):
|
|
correct_answers.append(answer[1:].strip())
|
|
else:
|
|
answers.append(answer)
|
|
|
|
if correct_answers:
|
|
questions.append({
|
|
'question': question,
|
|
'answers': answers + correct_answers,
|
|
'correct_answers': correct_answers
|
|
})
|
|
|
|
return questions
|
|
|
|
@portalfejlesztes_net_ben.route('/')
|
|
@portalfejlesztes_net_ben.route('/quiz', methods=['GET', 'POST'])
|
|
def quiz():
|
|
if 'selected_questions' not in session:
|
|
questions = parse_questions()
|
|
selected_questions = random.sample(questions, 20)
|
|
session['selected_questions'] = selected_questions
|
|
session['question_index'] = 0
|
|
session['answers'] = []
|
|
else:
|
|
selected_questions = session['selected_questions']
|
|
|
|
question_index = session.get('question_index', 0)
|
|
|
|
if question_index >= len(selected_questions):
|
|
return redirect(url_for('portalfejlesztes_net_ben.result'))
|
|
|
|
current_question = selected_questions[question_index]
|
|
random.shuffle(current_question['answers'])
|
|
|
|
return render_template('quiz.html', question=current_question, question_index=question_index)
|
|
|
|
@portalfejlesztes_net_ben.route('/submit_answer', methods=['POST'])
|
|
def submit_answer():
|
|
user_answers = request.form.getlist('answer')
|
|
question_index = int(request.form.get('question_index'))
|
|
|
|
answers = session.get('answers', [])
|
|
answers.append(user_answers)
|
|
session['answers'] = answers
|
|
|
|
question_index += 1
|
|
session['question_index'] = question_index
|
|
|
|
return redirect(url_for('portalfejlesztes_net_ben.quiz'))
|
|
|
|
@portalfejlesztes_net_ben.route('/result')
|
|
def result():
|
|
selected_questions = session.get('selected_questions', None)
|
|
answers = session.get('answers', None)
|
|
|
|
score = 0
|
|
mistakes = []
|
|
|
|
for i, user_answer in enumerate(answers):
|
|
correct_answers = selected_questions[i]['correct_answers']
|
|
|
|
if set(user_answer) == set(correct_answers):
|
|
score += 1
|
|
else:
|
|
mistakes.append({
|
|
'question': selected_questions[i]['question'],
|
|
'correct_answer': correct_answers,
|
|
'user_answer': user_answer
|
|
})
|
|
|
|
questions_with_answers = zip(selected_questions, answers)
|
|
|
|
session.pop('question_index', None)
|
|
session.pop('answers', None)
|
|
session.pop('selected_questions', None)
|
|
|
|
return render_template('result.html', score=score, total=len(selected_questions), mistakes=mistakes, questions_with_answers=questions_with_answers)
|
|
|
|
@portalfejlesztes_net_ben.route('/restart')
|
|
def restart():
|
|
session.pop('question_index', None)
|
|
session.pop('answers', None)
|
|
session.pop('selected_questions', None)
|
|
|
|
return redirect(url_for('portalfejlesztes_net_ben.quiz'))
|
|
|
|
@portalfejlesztes_net_ben.route('/allquestions')
|
|
def allquestions():
|
|
questions = parse_questions()
|
|
|
|
return render_template('allquestions.html', questions=questions)
|