1. Pregunta d’opcions múltiples

Les preguntes d’opcions múltiples d’Atenea permeten associar un pes, positiu o negatiu, a cada opció. Volem calcular automàticament els pesos de cada opció en funció de si és correcta o no. Si \(c\) és el nombre d’opcions correctes, el pes de cada una d’elles serà \(\frac{1}{c}\). Aquesta és una manera senzilla de garantir que els pesos positius sumin 1. Calcularem els pesos negatius per les opcions incorrectes de manera anàloga per tal de garantir que sumin -1.

Dissenya la funció següent i desa-la al mòdul tests (fitxer tests.py).

tests.posa_pesos(opc)

Calcula el pes de cada opció.

Paràmetres:

opc (list(bool)) – llista d’opcions. El valor True indica que l’opció és correcta i False que és incorrecta.

Tipus de retorn:

list(float)

Retorna:

llista de pesos calculats com s’ha explicat més amunt.

Per exemple:


>>> preg1 = [True, False, True, False, False]
>>> pesos1 = posa_pesos(preg1)
>>> pesos1 == [1/2, -1/3, 1/2, -1/3, -1/3]
True

Arrodoneix a dos decimals els elements de la llista que retorna posa_pesos

>>> [round(p, 2) for p in pesos1]
[0.5, -0.33, 0.5, -0.33, -0.33]

Disposes de més tests al fitxer test-posa_pesos.txt.

Ara volem calcular la nota d’una pregunta d’opcions múltiples a partir de les opcions marcades en la resposta i del pes de cada opció. La nota de la pregunta no pot ser negativa.

Dissenya la funció següent i desa-la al mòdul tests (fitxer tests.py).

tests.calcula_nota(pesos, resp)

Calcula la nota de la pregunta a partir de les opcions marcades en la resposta i del pes de cada opció.

Paràmetres:
  • pesos (list(float)) – pes de cada opció.

  • resp (list(int)) – opcions marcades. Llista d’índexs vàlids de la llista de pesos.

Tipus de retorn:

float

Retorna:

nota calculada com la suma dels pesos de les opcions marcades. No pot ser negativa.

Per exemple:


>>> pesos1 = [1/2, -1/3, 1/2, -1/3, -1/3]

>>> resp1 = [4, 2]
>>> nota1 = calcula_nota(pesos1, resp1)
>>> nota1 == pesos1[4] + pesos1[2]
True

>>> resp2 = [2, 3, 4]
>>> nota2 = calcula_nota(pesos1, resp2)
>>> nota2
0

Disposes de més tests al fitxer test-calcula_nota.txt.