Main site structure with first uni quiz
This commit is contained in:
119
portalfejlesztes_net_ben/__init__.py
Normal file
119
portalfejlesztes_net_ben/__init__.py
Normal file
@ -0,0 +1,119 @@
|
||||
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)
|
Reference in New Issue
Block a user