Files
Personal-Website-Project/templates/uni/subjects/szamitogepek_mukodese/szgm_app.py

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)