Generate a test with missing words

This code will generate an html file with words to guess like this:

from random import shuffle, randint, choice
from createfile import createfile


a = """
ASSEGNO CIRCOLARE
L'assegno circolare è un titolo di credito con cui una banca promette di pagare a vista un determinato importo ad un soggetto beneficiario
I soggetti sono:
emittente, banca che rilascia l'assegno
beneficiario, persona a favore della quale viene emesso

Deve contenere
denominazione di assegno circolare
promessa della banca di pagare la somma indicata
importo scritto in cifre e lettere
beneficiario, persona in favore della quale viene emesso l'assegno;
data e luogo di emissione;
firma della banca emittente;
la clausola di non trasferibilità;
numero progressivo dell'assegno;
quadro di controllo con cifre da annullare o perforare;
cifre in inchiostro magnetico con codice ABI e CAB.

Ogni modulo è formato da due parti: madre e figlia.

Carta di debito:
strumento di pagamento elettronico con cui si possono prelevare contanti presso gli sportelli automatici e regolare acquisti di beni e servizi presso punti di vendita aderenti ad un circuito telematico.

Carte di debito:
strumenti di pagamento elettronico con cui si possono acquistare beni e servizi presso punti di vendita abilitati pagando l'importo alla metà del mese successivo.

Ri.ba.:
Servizio bancario di incasso elettronico che consente alle aziende di riscuotere le proprie fatture attraverso le banche.
Le cambiali:
Sono titoli di credito che contengono la promessa o l'ordine di pagare una somma di denaro a un soggetto, detto beneficiario, a una determinata scadenza e in un luogo indicato.

Credito significa: diritto ad esigere una somma di denaro.

Titolo di credito significa: documento che incorpora (in cui è scritto il diritto) il diritto ad esigere una somma di denaro. Possedere il titolo significa possedere il diritto.

La cambiale è un titolo di credito:
astratto: non è indicato il motivo della sua emissione
all'ordine: è trasferibile con la girata (ordine scritto sul retro del titolo).
formale: è valido se possiede i requisiti previsti dall legge.
esecutivo: in caso di mancato pagamento i possessore può svolgere un'azione legale esecutiva nei confronti del debitore per recuperare l'importo spettante.
autonomo: il possessore può riscuotere l'importo indipendentemente dalle circostanze che hanno portatao alla sua emissione.
letterale: il diritto è definito da quanto scritto nella cambiale.

Pagherò:

Il pagherò è un titolo di credito che contiene la promessa incondizionata fatta da un soggetto detto emittente, di pagare una somma di denaro a un altro soggetto, detto beneficiario, a una determinata scadenza e in un luogo indicato.

I soggetti sono l'emittente e il beneficiario.
"""

omesse = """
assegno
credito
beneficiario
emittente
beneficiario
denominazione
promessa
lettere
beneficiario
firma
trasferibilità
progressivo
ABI
CAB
elettronico
successivo
banche
beneficiario
emittente
soggetti
letterale
elettronico
autonomo
incorpora
formale
legale
elettronico
astratto
successivo
ordine
promessa
beneficiario
credito
girata
""".splitlines()

parole = omesse[1:]
#shuffle(parole)     # per visualizzare le parole
#print(parole)       # in ordine casuale

def crea_lettera_a_caso(tratteggio):
	# mette una lettera a caso al posto di un _
	tratteggio = list(tratteggio)
	for n in range(int(len(tratteggio)/3)):
		index_altra_lettera = randint(1,len(mezzo)-1)
		tratteggio[index_altra_lettera] = mezzo[index_altra_lettera] + " "

	# ritrasforma in stringa tratteggio
	tratteggio = "".join(tratteggio)
	return tratteggio

for parola in parole:
	iniz = parola[0]
	fin = parola[-1]
	tratteggio = "_"*(len(parola)-2)
	mezzo = list(parola[1:-1])
	tratteggio = crea_lettera_a_caso(tratteggio)
	# Aggiunge spazio _ _ _
	tratteggio = " " + tratteggio.replace("_", "_ ")
	a = a.replace(parola, "[  " + iniz + tratteggio + fin + " ]", 1)

createfile("omesse.html", a)

And this is the createfile module that we imported above

import os

def createfile(filename, content):
	"Create a file"
	try:
		with open(filename, "w", encoding="utf-8") as file:
			file.write(content)
		os.system(filename)
	except:
		print("You must use an argument for the filename ('prova.html') and another for the content ('<b>Hello</b> World')")

def create_file_no_open(f,c):
	with open(f, "w", encoding="utf-8") as file:
		file.write(c)

def gettext(filename, content):
	"Create a file"
	try:
		with open(filename, "r", encoding="utf-8") as file:
			file = file.read()
			return text
	except:
		print("File not found")

def readtext(filename, content):
	gettext(filename, content)

def append_to_file(filename, content):
	"""Create a file"""
	try:
		with open(filename, "a", encoding="utf-8") as file:
			file.write(content)
		os.system(filename)
	except:
		print("You must use an argument for the filename ('prova.html') and another for the content ('<b>Hello</b> World')")

if __name__ == "__main__":
	creafile("filediprova.html", "<b>Hello</b>World")

Part 1: create a simple missing words test

Part 2: saving the test on html

Part 3: making it interactive

part 4: adding colors and initial and final letter to html file

In the following code I’ve added some changes:

  • eliminated the alert
  • added a red background for wrong answer
  • avoided an error when there are more identical missing words
  • added the first and last letter of the missing words

Now the page in the broswer looks like this:

import os
from collections import Counter

text = """
ASSEGNO CIRCOLARE
L'assegno circolare è un titolo di credito con cui una banca promette di pagare a vista un determinato importo ad un soggetto beneficiario
I soggetti sono:
emittente, banca che rilascia l'assegno
beneficiario, persona a favore della quale viene emesso

Deve contenere
denominazione di assegno circolare
promessa della banca di pagare la somma indicata
importo scritto in cifre e lettere
beneficiario, persona in favore della quale viene emesso l'assegno;
data e luogo di emissione;
firma della banca emittente;
la clausola di non trasferibilità;
numero progressivo dell'assegno;
quadro di controllo con cifre da annullare o perforare;
cifre in inchiostro magnetico con codice ABI e CAB.

Ogni modulo è formato da due parti: madre e figlia.

Carta di debito:
strumento di pagamento elettronico con cui si possono prelevare contanti presso gli sportelli automatici e regolare acquisti di beni e servizi presso punti di vendita aderenti ad un circuito telematico.

Carte di debito:
strumenti di pagamento elettronico con cui si possono acquistare beni e servizi presso punti di vendita abilitati pagando l'importo alla metà del mese successivo.

Ri.ba.:
Servizio bancario di incasso elettronico che consente alle aziende di riscuotere le proprie fatture attraverso le banche.
Le cambiali:
Sono titoli di credito che contengono la promessa o l'ordine di pagare una somma di denaro a un soggetto, detto beneficiario, a una determinata scadenza e in un luogo indicato.

Credito significa: diritto ad esigere una somma di denaro.

Titolo di credito significa: documento che incorpora (in cui è scritto il diritto) il diritto ad esigere una somma di denaro. Possedere il titolo significa possedere il diritto.

La cambiale è un titolo di credito:
astratto: non è indicato il motivo della sua emissione
all'ordine: è trasferibile con la girata (ordine scritto sul retro del titolo).
formale: è valido se possiede i requisiti previsti dall legge.
esecutivo: in caso di mancato pagamento i possessore può svolgere un'azione legale esecutiva nei confronti del debitore per recuperare l'importo spettante.
autonomo: il possessore può riscuotere l'importo indipendentemente dalle circostanze che hanno portatao alla sua emissione.
letterale: il diritto è definito da quanto scritto nella cambiale.

Pagherò:

Il pagherò è un titolo di credito che contiene la promessa incondizionata fatta da un soggetto detto emittente, di pagare una somma di denaro a un altro soggetto, detto beneficiario, a una determinata scadenza e in un luogo indicato.

I soggetti sono l'emittente e il beneficiario.
"""

missed = """
credito
beneficiario
emittente
denominazione
promessa
luogo
banca
trasferibilità
"""

def print_test(text, missed):
	"""Returns a text without some words replaced by _ _ _"""
	missed = missed.splitlines()
	for w in missed[1:]:
		text = text.replace(w, "_ "*len(w))
	return text

def interactive_mode(text, missed):
	"""Returns a text without some words replaced by [__________] input text"""
	missed = missed.splitlines()
	no_repeat = []
	count_words = Counter(missed[1:])
	for w in missed[1:]:
		if w not in no_repeat:
			no_repeat.append(w)
			no_repeat.append(w)
			lenght = str(len(w)+2)
			underscores = ". "*(len(w)-2)
			text = text.replace(w, "<input type='text' size=" + lenght + " placeholder='" + w[0] + underscores + w[-1] + "' onchange=\"if(this.value=='" + w + "'){this.readonly=true;this.style.background='yellow'}else{this.style.background='red'}\">", count_words[w])
	return text


def create_html(text, solution=0):
	if solution:
		text += "<br>-------<br>Solutions:<b>"
		text += missed + "</b>"
	with open("test.html", 'w', encoding='utf-8') as file:
		file.write(text)
	print(text)
	os.system("test.html")
	return "File has been written"

print(create_html(interactive_mode(text, missed), solution=1))

 

 

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.