Multiple choice tests with Python

With the following script you can take a text with multiple choices like these

What is .....
the first
the second
the fourth
the fifth

What is ....
x
y
z
v

Where the first answer is the right one.

The script will:

  • add the number to each question
  • add a letter to each answer
  • shuffle the answers
  • create a file with the test (in html)
  • create a file with the correct answer (in txt)

The code

from tkinter import filedialog
import os
from random import shuffle

'''
            THIS CODE TAKES A TXT FILE
            WITH QUESTIONS WITH 4 ANSWER
            DIVIDED BY AN EMPTY LINE,
            GIVE A NUMBER TO QUESTION
            SHUFFLES ANSWERS AND GIVES THEM A LETTER
            IT CREATES A CORRETTORE whith the right answers
            in the correttore.txt


'''


a = filedialog.askopenfilename(initialdir = ".",title = "Select file",filetypes = (("text","*.txt"),("all files","*.*")))
# a = "preliminari_2.txt"
with open(a, "r", encoding="utf-8") as file:
    file = file.readlines()

html = ""
newdom = 1
risposte = []
letters = "abcd"
countdom = 1
corrette = []
for line in file:
    if line == "\n":
        newdom = 1
        continue
    if newdom == 1:
        html += f"<b>{countdom}. {line}</b><br>"
        newdom = 0
        countdom += 1
    else:
        risposte.append(line)
    if len(risposte) == 4:
        corrette.append(f"{countdom - 1}: {risposte[0]}")
        shuffle(risposte)
        for n, risposta in enumerate(risposte):
            html += f"{letters[n]}. {risposta}<br>"
        risposte = []
        newdom = 1
        html += "<br>"


with open("output.html", "w", encoding="utf-8") as file:
    file.write(html)

with open("correttore.txt", "w") as file:
    file.write("".join(corrette))
os.startfile("output.html")


Subscribe to the newsletter for updates
Tkinter templates
Avatar My youtube channel

Twitter: @pythonprogrammi - python_pygame

Videos

Speech recognition game

Pygame's Platform Game

Other Pygame's posts

Published by pythonprogramming

Started with basic on the spectrum, loved javascript in the 90ies and python in the 2000, now I am back with python, still making some javascript stuff when needed.