Files
Personal-Website-Project/portalfejlesztes_net_ben/__init__.py

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)