{"id":2045,"date":"2019-05-25T20:53:34","date_gmt":"2019-05-25T18:53:34","guid":{"rendered":"https:\/\/pythonprogramming.altervista.org\/?p=2045"},"modified":"2019-05-26T16:23:32","modified_gmt":"2019-05-26T14:23:32","slug":"generate-a-test-with-missing-words","status":"publish","type":"post","link":"https:\/\/pythonprogramming.altervista.org\/generate-a-test-with-missing-words\/","title":{"rendered":"Generate a test with missing words"},"content":{"rendered":"<p>This code will generate an html file with words to guess like this:<\/p>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/05\/copertina.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2046\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/05\/copertina.png\" alt=\"\" width=\"731\" height=\"528\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/05\/copertina.png 731w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/05\/copertina-320x231.png 320w\" sizes=\"auto, (max-width: 731px) 100vw, 731px\" \/><\/a><\/p>\n<pre class=\"lang:default decode:true\">from random import shuffle, randint, choice\r\nfrom createfile import createfile\r\n\r\n\r\na = \"\"\"\r\nASSEGNO CIRCOLARE\r\nL'assegno circolare \u00e8 un titolo di credito con cui una banca promette di pagare a vista un determinato importo ad un soggetto beneficiario\r\nI soggetti sono:\r\nemittente, banca che rilascia l'assegno\r\nbeneficiario, persona a favore della quale viene emesso\r\n\r\nDeve contenere\r\ndenominazione di assegno circolare\r\npromessa della banca di pagare la somma indicata\r\nimporto scritto in cifre e lettere\r\nbeneficiario, persona in favore della quale viene emesso l'assegno;\r\ndata e luogo di emissione;\r\nfirma della banca emittente;\r\nla clausola di non trasferibilit\u00e0;\r\nnumero progressivo dell'assegno;\r\nquadro di controllo con cifre da annullare o perforare;\r\ncifre in inchiostro magnetico con codice ABI e CAB.\r\n\r\nOgni modulo \u00e8 formato da due parti: madre e figlia.\r\n\r\nCarta di debito:\r\nstrumento 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.\r\n\r\nCarte di debito:\r\nstrumenti di pagamento elettronico con cui si possono acquistare beni e servizi presso punti di vendita abilitati pagando l'importo alla met\u00e0 del mese successivo.\r\n\r\nRi.ba.:\r\nServizio bancario di incasso elettronico che consente alle aziende di riscuotere le proprie fatture attraverso le banche.\r\nLe cambiali:\r\nSono 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.\r\n\r\nCredito significa: diritto ad esigere una somma di denaro.\r\n\r\nTitolo di credito significa: documento che incorpora (in cui \u00e8 scritto il diritto) il diritto ad esigere una somma di denaro. Possedere il titolo significa possedere il diritto.\r\n\r\nLa cambiale \u00e8 un titolo di credito:\r\nastratto: non \u00e8 indicato il motivo della sua emissione\r\nall'ordine: \u00e8 trasferibile con la girata (ordine scritto sul retro del titolo).\r\nformale: \u00e8 valido se possiede i requisiti previsti dall legge.\r\nesecutivo: in caso di mancato pagamento i possessore pu\u00f2 svolgere un'azione legale esecutiva nei confronti del debitore per recuperare l'importo spettante.\r\nautonomo: il possessore pu\u00f2 riscuotere l'importo indipendentemente dalle circostanze che hanno portatao alla sua emissione.\r\nletterale: il diritto \u00e8 definito da quanto scritto nella cambiale.\r\n\r\nPagher\u00f2:\r\n\r\nIl pagher\u00f2 \u00e8 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.\r\n\r\nI soggetti sono l'emittente e il beneficiario.\r\n\"\"\"\r\n\r\nomesse = \"\"\"\r\nassegno\r\ncredito\r\nbeneficiario\r\nemittente\r\nbeneficiario\r\ndenominazione\r\npromessa\r\nlettere\r\nbeneficiario\r\nfirma\r\ntrasferibilit\u00e0\r\nprogressivo\r\nABI\r\nCAB\r\nelettronico\r\nsuccessivo\r\nbanche\r\nbeneficiario\r\nemittente\r\nsoggetti\r\nletterale\r\nelettronico\r\nautonomo\r\nincorpora\r\nformale\r\nlegale\r\nelettronico\r\nastratto\r\nsuccessivo\r\nordine\r\npromessa\r\nbeneficiario\r\ncredito\r\ngirata\r\n\"\"\".splitlines()\r\n\r\nparole = omesse[1:]\r\n#shuffle(parole)     # per visualizzare le parole\r\n#print(parole)       # in ordine casuale\r\n\r\ndef crea_lettera_a_caso(tratteggio):\r\n\t# mette una lettera a caso al posto di un _\r\n\ttratteggio = list(tratteggio)\r\n\tfor n in range(int(len(tratteggio)\/3)):\r\n\t\tindex_altra_lettera = randint(1,len(mezzo)-1)\r\n\t\ttratteggio[index_altra_lettera] = mezzo[index_altra_lettera] + \" \"\r\n\r\n\t# ritrasforma in stringa tratteggio\r\n\ttratteggio = \"\".join(tratteggio)\r\n\treturn tratteggio\r\n\r\nfor parola in parole:\r\n\tiniz = parola[0]\r\n\tfin = parola[-1]\r\n\ttratteggio = \"_\"*(len(parola)-2)\r\n\tmezzo = list(parola[1:-1])\r\n\ttratteggio = crea_lettera_a_caso(tratteggio)\r\n\t# Aggiunge spazio _ _ _\r\n\ttratteggio = \" \" + tratteggio.replace(\"_\", \"_ \")\r\n\ta = a.replace(parola, \"[  \" + iniz + tratteggio + fin + \" ]\", 1)\r\n\r\ncreatefile(\"omesse.html\", a)<\/pre>\n<p>And this is the createfile module that we imported above<\/p>\n<pre class=\"lang:default decode:true\">import os\r\n\r\ndef createfile(filename, content):\r\n\t\"Create a file\"\r\n\ttry:\r\n\t\twith open(filename, \"w\", encoding=\"utf-8\") as file:\r\n\t\t\tfile.write(content)\r\n\t\tos.system(filename)\r\n\texcept:\r\n\t\tprint(\"You must use an argument for the filename ('prova.html') and another for the content ('&lt;b&gt;Hello&lt;\/b&gt; World')\")\r\n\r\ndef create_file_no_open(f,c):\r\n\twith open(f, \"w\", encoding=\"utf-8\") as file:\r\n\t\tfile.write(c)\r\n\r\ndef gettext(filename, content):\r\n\t\"Create a file\"\r\n\ttry:\r\n\t\twith open(filename, \"r\", encoding=\"utf-8\") as file:\r\n\t\t\tfile = file.read()\r\n\t\t\treturn text\r\n\texcept:\r\n\t\tprint(\"File not found\")\r\n\r\ndef readtext(filename, content):\r\n\tgettext(filename, content)\r\n\r\ndef append_to_file(filename, content):\r\n\t\"\"\"Create a file\"\"\"\r\n\ttry:\r\n\t\twith open(filename, \"a\", encoding=\"utf-8\") as file:\r\n\t\t\tfile.write(content)\r\n\t\tos.system(filename)\r\n\texcept:\r\n\t\tprint(\"You must use an argument for the filename ('prova.html') and another for the content ('&lt;b&gt;Hello&lt;\/b&gt; World')\")\r\n\r\nif __name__ == \"__main__\":\r\n\tcreafile(\"filediprova.html\", \"&lt;b&gt;Hello&lt;\/b&gt;World\")<\/pre>\n<h2>Part 1: create a simple missing words test<\/h2>\n<p><iframe loading=\"lazy\" title=\"Python: create a test with missing words\" width=\"747\" height=\"420\" src=\"https:\/\/www.youtube.com\/embed\/4Ghc7VqfC3Q?feature=oembed&amp;enablejsapi=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<h2>Part 2: saving the test on html<\/h2>\n<p><iframe loading=\"lazy\" title=\"Python: create a test with missing words 2\" width=\"747\" height=\"420\" src=\"https:\/\/www.youtube.com\/embed\/Th09gdBkIjY?feature=oembed&amp;enablejsapi=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<h2>Part 3: making it interactive<\/h2>\n<p><iframe loading=\"lazy\" title=\"Python: missing word test 3\" width=\"747\" height=\"420\" src=\"https:\/\/www.youtube.com\/embed\/RH_5VmKpg0I?feature=oembed&amp;enablejsapi=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/p>\n<h2>part 4: adding colors and initial and final letter to html file<\/h2>\n<p>In the following code I&#8217;ve added some changes:<\/p>\n<ul>\n<li>eliminated the alert<\/li>\n<li>added a red background for wrong answer<\/li>\n<li>avoided an error when there are more identical missing words<\/li>\n<li>added the first and last letter of the missing words<\/li>\n<\/ul>\n<p>Now the page in the broswer looks like this:<\/p>\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/05\/img3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2058\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/05\/img3.png\" alt=\"\" width=\"646\" height=\"424\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/05\/img3.png 646w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/05\/img3-320x210.png 320w\" sizes=\"auto, (max-width: 646px) 100vw, 646px\" \/><\/a><\/p>\n<pre class=\"lang:default decode:true\">import os\r\nfrom collections import Counter\r\n\r\ntext = \"\"\"\r\nASSEGNO CIRCOLARE\r\nL'assegno circolare \u00e8 un titolo di credito con cui una banca promette di pagare a vista un determinato importo ad un soggetto beneficiario\r\nI soggetti sono:\r\nemittente, banca che rilascia l'assegno\r\nbeneficiario, persona a favore della quale viene emesso\r\n\r\nDeve contenere\r\ndenominazione di assegno circolare\r\npromessa della banca di pagare la somma indicata\r\nimporto scritto in cifre e lettere\r\nbeneficiario, persona in favore della quale viene emesso l'assegno;\r\ndata e luogo di emissione;\r\nfirma della banca emittente;\r\nla clausola di non trasferibilit\u00e0;\r\nnumero progressivo dell'assegno;\r\nquadro di controllo con cifre da annullare o perforare;\r\ncifre in inchiostro magnetico con codice ABI e CAB.\r\n\r\nOgni modulo \u00e8 formato da due parti: madre e figlia.\r\n\r\nCarta di debito:\r\nstrumento 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.\r\n\r\nCarte di debito:\r\nstrumenti di pagamento elettronico con cui si possono acquistare beni e servizi presso punti di vendita abilitati pagando l'importo alla met\u00e0 del mese successivo.\r\n\r\nRi.ba.:\r\nServizio bancario di incasso elettronico che consente alle aziende di riscuotere le proprie fatture attraverso le banche.\r\nLe cambiali:\r\nSono 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.\r\n\r\nCredito significa: diritto ad esigere una somma di denaro.\r\n\r\nTitolo di credito significa: documento che incorpora (in cui \u00e8 scritto il diritto) il diritto ad esigere una somma di denaro. Possedere il titolo significa possedere il diritto.\r\n\r\nLa cambiale \u00e8 un titolo di credito:\r\nastratto: non \u00e8 indicato il motivo della sua emissione\r\nall'ordine: \u00e8 trasferibile con la girata (ordine scritto sul retro del titolo).\r\nformale: \u00e8 valido se possiede i requisiti previsti dall legge.\r\nesecutivo: in caso di mancato pagamento i possessore pu\u00f2 svolgere un'azione legale esecutiva nei confronti del debitore per recuperare l'importo spettante.\r\nautonomo: il possessore pu\u00f2 riscuotere l'importo indipendentemente dalle circostanze che hanno portatao alla sua emissione.\r\nletterale: il diritto \u00e8 definito da quanto scritto nella cambiale.\r\n\r\nPagher\u00f2:\r\n\r\nIl pagher\u00f2 \u00e8 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.\r\n\r\nI soggetti sono l'emittente e il beneficiario.\r\n\"\"\"\r\n\r\nmissed = \"\"\"\r\ncredito\r\nbeneficiario\r\nemittente\r\ndenominazione\r\npromessa\r\nluogo\r\nbanca\r\ntrasferibilit\u00e0\r\n\"\"\"\r\n\r\ndef print_test(text, missed):\r\n\t\"\"\"Returns a text without some words replaced by _ _ _\"\"\"\r\n\tmissed = missed.splitlines()\r\n\tfor w in missed[1:]:\r\n\t\ttext = text.replace(w, \"_ \"*len(w))\r\n\treturn text\r\n\r\ndef interactive_mode(text, missed):\r\n\t\"\"\"Returns a text without some words replaced by [__________] input text\"\"\"\r\n\tmissed = missed.splitlines()\r\n\tno_repeat = []\r\n\tcount_words = Counter(missed[1:])\r\n\tfor w in missed[1:]:\r\n\t\tif w not in no_repeat:\r\n\t\t\tno_repeat.append(w)\r\n\t\t\tno_repeat.append(w)\r\n\t\t\tlenght = str(len(w)+2)\r\n\t\t\tunderscores = \". \"*(len(w)-2)\r\n\t\t\ttext = text.replace(w, \"&lt;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'}\\\"&gt;\", count_words[w])\r\n\treturn text\r\n\r\n\r\ndef create_html(text, solution=0):\r\n\tif solution:\r\n\t\ttext += \"&lt;br&gt;-------&lt;br&gt;Solutions:&lt;b&gt;\"\r\n\t\ttext += missed + \"&lt;\/b&gt;\"\r\n\twith open(\"test.html\", 'w', encoding='utf-8') as file:\r\n\t\tfile.write(text)\r\n\tprint(text)\r\n\tos.system(\"test.html\")\r\n\treturn \"File has been written\"\r\n\r\nprint(create_html(interactive_mode(text, missed), solution=1))<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"Make a test with missing words with python easily with a module to create also easily files and open them launching the code.\n<a class=\"moretag\" href=\"https:\/\/pythonprogramming.altervista.org\/generate-a-test-with-missing-words\/\"> [...]<\/a>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-2045","post","type-post","status-publish","format-standard","hentry","category-examples"],"avopt_banners_inside_post":true,"avopt_banners_on_page":true,"av_copy_from":"","av_sharing_message":"","av_sharing_allowed":false,"av_sharing_on":{"fb":[],"tw":[]},"av_allow_affiliate_banner":false,"av_allow_affiliate_multi_banner":false,"av_show_affiliation_buy_button":false,"av_post_rating":true,"av_have_post_rating_value":false,"av_is_artificial_intelligence_content":false,"_links":{"self":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/2045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/comments?post=2045"}],"version-history":[{"count":10,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/2045\/revisions"}],"predecessor-version":[{"id":2059,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/2045\/revisions\/2059"}],"wp:attachment":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media?parent=2045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/categories?post=2045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/tags?post=2045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}