1. ¿En que año Cristobal Colón descubrió América? 1 - 1942 2 - 1492 3 - 1808 4 - 1914 Su respuesta:Debe definir una clase
Quiz
que soporte un pequeño lenguaje
en el que las preguntas puedan ser especificadas.
El constructor de Quiz
va seguido de un bloque al que pasa
como argumento el objeto e
que representa al examen:
quiz = Quiz.new("Cuestionario de PFS 10/12/2011") do |e| e.question '¿En que año Cristobal Colón descubrió América?', e.wrong =>'1942', e.right =>'1492', e.wrong =>'1808', e.wrong =>'1914' a = rand(10) b = rand(10) e.question "#{a}+#{b} = ", e.wrong =>"44", e.wrong =>"#{a + b + 2}", e.right =>"#{a + b}", e.wrong =>"#{a + b - 2}" end quiz.runEl programa anterior podría producir una salida parecida a esta:
MacBookdeCasiano:chapter8ReflectionandMetaprogramming casiano$ ruby Quiz.rb Cuestionario de PFS 10/12/2011 ¿En que año Cristobal Colón descubrió América? 1 - 1942 2 - 1492 3 - 1808 4 - 1914 Su respuesta: 3 0+8 = 1 - 44 2 - 10 3 - 8 4 - 6 Su respuesta: 1 0 respuestas correctas de un total de 2. MacBookdeCasiano:chapter8ReflectionandMetaprogramming casiano$
to_s
que devuelve una String
conteniendo el examen en texto plano.
Así al imprimir el objeto quiz
del ejemplo anterior:
puts quiz puts "************************"obtendríamos como salida:
Cuestionario de PFS 10/12/2011 ¿En que año Cristobal Colón descubrió América? 1 - 1942 2 - 1492 3 - 1808 4 - 1914 0+8 = 1 - 44 2 - 10 3 - 8 4 - 6 ************************
run
que formulará
cada una de las preguntas del cuestionario y mostrara el porcentaje de aciertos
Answer
),
otra para modelar las preguntas (Question
) y una tercera para el cuestionario (Quiz
)
question
recibe dos argumentos. El primero es el título del examen, el segundo es un hash:
e.question '¿En que año Cristobal Colón descubrió América?', e.wrong =>'1942', e.right =>'1492', e.wrong =>'1808', e.wrong =>'1914'de modo que la llamada, realmente es equivalente a:
e.question('¿En que año Cristobal Colón descubrió América?', {e.wrong =>'1942', e.right =>'1492', e.wrong =>'1808', e.wrong =>'1914'})si el segundo argumento de
question
es un hash y las claves son :wrong
y :right
se va a
producir una colisión y el último valor sobreescribirá a los anteriores. ¿Como resolverlo?
Una posible forma de hacerlo es que los métodos wrong
y right
diferencien las ocurrencias de las repsuestas
usando un contador @counter
:
def wrong @counter += 1 [@counter, WRONG] end
to_html
que genere una página describiendo el examen. Use ERB.
ull-etsii-aluXX-quiz
Casiano Rodriguez León 2015-01-07