Pruebas de opción múltiple

Tu tarea es escribir un programa que permita a los profesores crear una prueba de opción múltiple en una clase llamada Testpaper y también poder asignar una calificación mínima para aprobar. También debe incluirse la asignatura de la prueba. Los atributos están en el siguiente orden:

  1. subject
  2. markscheme
  3. pass_mark

Además, ¡debemos crear objetos de estudiantes para realizar la prueba! Crea otra clase llamada Student y haz lo siguiente:

  • Crea un atributo llamado tests_taken y establece 'No tests taken' como valor predeterminado.
  • Crea un método llamado take_test(), que reciba el objeto testpaper que están completando y las respuestas del estudiante. Compara lo que escribieron con el esquema de respuestas y añádelo al/crea un diccionario asignado a tests_taken de la manera que se muestra en el punto siguiente.
  • Cada clave del diccionario debe ser la asignatura de la prueba y cada valor debe ser una cadena con el formato que se muestra en los ejemplos siguientes (si el estudiante ha reprobado o no, y su porcentaje entre paréntesis).

Ejemplos

paper1 = Testpaper("Maths", ["1A", "2C", "3D", "4A", "5A"], "60%")
paper2 = Testpaper("Chemistry", ["1C", "2C", "3D", "4A"], "75%")
paper3 = Testpaper("Computing", ["1D", "2C", "3C", "4B", "5D", "6C", "7A"], "75%")

student1 = Student()
student2 = Student()
student1.tests_taken ➞ "No tests taken"
student1.take_test(paper1, ["1A", "2D", "3D", "4A", "5A"])
student1.tests_taken ➞ {"Maths" : "Passed! (80%)"}

student2.take_test(paper2, ["1C", "2D", "3A", "4C"])
student2.take_test(paper3, ["1A", "2C", "3A", "4C", "5D", "6C", "7B"])
student2.tests_taken ➞ {"Chemistry" : "Failed! (25%)", "Computing" : "Failed! (43%)"}

Notas

  • Redondea los porcentajes al número entero más cercano.
  • Recuerda que el atributo tests_taken debe devolver 'No tests taken' cuando todavía no se haya realizado ninguna prueba.