106 lines
3.4 KiB
Python
106 lines
3.4 KiB
Python
from flask import Flask, render_template, request, redirect, url_for, session, Blueprint
|
|
import os
|
|
import random
|
|
|
|
# Define the Blueprint for the halozatok quiz
|
|
szamitogepek_mukodese = Blueprint(
|
|
'szamitogepek_mukodese', # Blueprint name
|
|
__name__,
|
|
template_folder='./templates' # Path to templates
|
|
)
|
|
|
|
preguntas = ['templates/uni/subjects/szamitogepek_mukodese/szgm_kerdessor.txt']
|
|
|
|
def parse_questions():
|
|
questions = []
|
|
lines = []
|
|
for pregunta in preguntas:
|
|
with open(pregunta, 'r', encoding='utf-8') as f:
|
|
lines.extend(f.readlines())
|
|
|
|
for line in range(0, len(lines)-1, 2):
|
|
questions.append({
|
|
'question': lines[line].strip(),
|
|
'answer': lines[line + 1].strip()
|
|
})
|
|
|
|
return questions
|
|
|
|
# Quiz Route
|
|
@szamitogepek_mukodese.route('/')
|
|
@szamitogepek_mukodese.route('/quiz', methods=['GET', 'POST'])
|
|
def quiz():
|
|
if 'quiz_questions' not in session:
|
|
questions = parse_questions()
|
|
halozatok_questions = random.sample(questions, 20)
|
|
session['quiz_questions'] = halozatok_questions
|
|
session['question_index'] = 0
|
|
session['answers'] = []
|
|
else:
|
|
halozatok_questions = session['quiz_questions']
|
|
|
|
question_index = session.get('question_index', 0)
|
|
|
|
if question_index >= len(halozatok_questions):
|
|
return redirect(url_for('szamitogepek_mukodese.result'))
|
|
|
|
current_question = halozatok_questions[question_index]
|
|
|
|
return render_template('szgm_quiz.html', question=current_question, question_index=question_index)
|
|
|
|
# Submit Answer Route
|
|
@szamitogepek_mukodese.route('/submit_answer', methods=['POST'])
|
|
def submit_answer():
|
|
user_answers = request.form.get('answer')
|
|
question_index = int(request.form.get('question_index'))
|
|
|
|
if 'answers' not in session:
|
|
session['answers'] = []
|
|
|
|
answers = session.get('answers')
|
|
answers.append(user_answers)
|
|
session['answers'] = answers
|
|
|
|
question_index += 1
|
|
session['question_index'] = question_index
|
|
|
|
return redirect(url_for('szamitogepek_mukodese.quiz'))
|
|
|
|
# Result Route
|
|
@szamitogepek_mukodese.route('/result')
|
|
def result():
|
|
halozatok_questions = session['quiz_questions']
|
|
answers = session['answers']
|
|
score = 0
|
|
mistakes = []
|
|
|
|
for i in range(len(answers)):
|
|
if halozatok_questions[i]['answer'] == answers[i]:
|
|
score += 1
|
|
else:
|
|
mistakes.append({
|
|
'question': halozatok_questions[i]['question'],
|
|
'answer': 'True' if answers[i] == 'I' else 'False',
|
|
'correct': 'True' if halozatok_questions[i]['answer'] == 'I' else 'False'
|
|
})
|
|
halozatok_questions[i]['answer'] = 'True' if halozatok_questions[i]['answer'] == 'I' else 'False'
|
|
|
|
return render_template('szgm_result.html', score=score, total=len(halozatok_questions), mistakes=mistakes, halozatok_questions=halozatok_questions)
|
|
|
|
# Restart Route
|
|
@szamitogepek_mukodese.route('/restart')
|
|
def restart():
|
|
session.pop('question_index', None)
|
|
session.pop('answers', None)
|
|
session.pop('quiz_questions', None)
|
|
|
|
return redirect(url_for('szamitogepek_mukodese.quiz'))
|
|
|
|
# All Questions Route
|
|
@szamitogepek_mukodese.route('/allquestions')
|
|
def allquestions():
|
|
questions = parse_questions()
|
|
for i in questions:
|
|
i['answer'] = 'True' if i['answer'] == 'I' else 'False'
|
|
return render_template('szgm_allquestions.html', questions=questions)
|