How to generate a test in html through python easily.
Here is the full code in a github repository
# in darm 2 ho fatto in modo che si possa usare l'apostrofo (codice 18-21)
import glob
from random import choice
from files.createfile import createfile
from files.darm_start import *
from files.darm_end import *
# from dati.browser3 import *
class Start:
def __init__(self):
"a menu to choose a file in the directory 'dati'"
self.images()
self.show_files()
self.inputfilename() # self.filename contains the txt file with questions you choose
self.create_list_of_dict(self.filename)
self.create_test()
def images(self):
self.imgslist = [
"https://picsum.photos/200"
]
def create_list_of_dict(self, filename):
"takes the data from filename and convert them into a dictonary"
'''
from
what is...
is ...
is ...
is ...
to this
{
question = "What is....",
image = "",
choice = ["is...", "is...", "is..."],
correct = "",
explation = ""
}
'''
qdic = {}
flist = []
def list_of_questions():
# read the file and splits every qna in a string
# file is a list of strings each with a qna
with open(filename, 'r', encoding='utf-8') as file:
file = file.read()
file = file.split("\n\n")
# every string in the list becomes a list with [q,a,a...]
return file
def list_of_list_with_qna(file):
for eachstring in file:
flist.append(eachstring.split("\n"))
def delete_empty_items():
for eachsublist in flist:
for e in eachsublist:
if e == '':
eachsublist.pop(eachsublist.index(e))
question = eachsublist[0]
eachsublist.pop(0)
qdic[question] = eachsublist
file = list_of_questions()
list_of_list_with_qna (file)
delete_empty_items()
self.qdic = qdic
def show_files(self):
text = "File di testo nella cartella: dati"
text += "------------------------------------"
for number,eachfile in enumerate(glob.glob("dati/*.txt")):
print(number, eachfile.replace("dati\\",""))
text += "------------------------------------"
print(text)
def inputfilename(self):
file_number = int(input("Scegli il numero del file? > "))
self.filename = glob.glob("dati/*.txt")[file_number]
def convert_for_template(self, question, answers):
html = f"""{{
"question" : "{question}",
"image" : "{choice(self.imgslist)}",
"choices" : {answers},
"correct" : "{answers[0]}",
"explanation" : "", }},"""
return html
def create_test(self):
global htmlpage
for question in self.qdic:
answers = self.qdic[question]
htmlpage += self.convert_for_template(question, answers)
htmlpage += endpage
filename = f"{input('nome del file: ')}.html"
createfile(filename, htmlpage)
test = Start()
Example
Subscribe to the newsletter for updates
Tkinter templatesTwitter: @pythonprogrammi - python_pygame
Claude's Games
1. Memory gameVideos
Speech recognition gamePygame's Platform Game