Un test con 10 domande…

Esame di Stato 2011 – Quesito 7


Un test d’esame consta dieci domande, per ciascuna delle quali si deve scegliere l’unica risposta corretta fra quattro alternative.
Qual è la probabilità che, rispondendo a caso alle dieci domande, almeno due risultino corrette?

Esame di Stato 2016 – Quesito 4


Un test è costituito da 10 domande a risposta multipla, con 4 possibili risposte di cui solo una è esatta.
Per superare il test occorre rispondere esattamente almeno a 8 domande.
Qual è la probabilità di superare il test rispondendo a caso alle domande?

Vedi le discussioni: 2011-7, 2016-4.

  1. Almeno 2 esatte: 0,7559… %
  2. Almeno 8 esatte: 0,04 %

Si può calcolare approssimativamente il risultato simulando la compilazione casuale delle risposte

import random               # randint() 

NUM_TENTATIVI  =100000 
NUM_DOMANDE    =10          # 1...10
NUM_ALTERNATIVE=4           # 1...4
SOGLIA1=2                   # Quesito 2011
SOGLIA2=8                   # Quesito 2016

SCHEDA=NUM_DOMANDE*[0]      # Scheda con risposte esatte
scheda=NUM_DOMANDE*[0]      # Scheda compilata a caso

soglia1=0                   # Quante volte almeno 2?
soglia2=0                   # Quante volte almeno 8?
esatte =(NUM_DOMANDE+1)*[0] # Quante volte 0,1,...,10?

def compila(s):             # Compilazione di una scheda
    for nd in range(NUM_DOMANDE):
        s[nd]=random.randint(1,NUM_ALTERNATIVE)

def controlla(s1,s2):       # Quante risposte esatte?
    conta=0 
    for nd in range(NUM_DOMANDE): 
        if(s1[nd] == s2[nd]):
            conta+=1
    return conta

compila(SCHEDA)
print("Risposte esatte:",SCHEDA)    # optional
print()
for nt in range(NUM_TENTATIVI):
    compila(scheda) 
    ne=controlla(scheda,SCHEDA)
    esatte[ne]+=1
    if(ne >= SOGLIA1):
        soglia1+=1
        print(nt, '\t', scheda, ne) # optional
    if(ne >= SOGLIA2):
        soglia2+=1
        print(nt, '\t', scheda, ne) # optional
print()

print("Almeno %d: %6d (%10f %%)" %(SOGLIA1, soglia1, 100*soglia1/NUM_TENTATIVI))
print("Almeno %d: %6d (%10f %%)" %(SOGLIA2, soglia2, 100*soglia2/NUM_TENTATIVI))
print()
for ne in range(NUM_DOMANDE+1):
    print("%2d %10d %10.7f %%" %(ne, esatte[ne], 100*esatte[ne]/NUM_TENTATIVI))