JavaScript - Mostrar porcentaje de cuestionario en javascript

 
Vista:
sin imagen de perfil

Mostrar porcentaje de cuestionario en javascript

Publicado por Luciano (1 intervención) el 16/11/2020 21:45:05
¡Hola! Soy estudiante de javascript hace muy poco tiempo y estoy aprendiendo a usar Javascript. En mi trabajo me pidieron que entregue un cuestionario que debe mostrar el porcentaje de respuestas correctas, y ayudandome un poco entre los cursos que aquí encontré y otro poco con youtube pude lograr resolver el problema hasta aquí:

ESTE ES MI HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<htmllang="en">
<head>
    <metacharset="UTF-8">
    <metaname="viewport"content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <divid="test"></div>
    <buttonid="boton">Mostrar resultado</button>
    <divid="resultado"></div>
    <scriptsrc="script.js"></script>
 
</body>
</html>

ESTE ES MI SCRIPT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
const contenedor = document.getElementById("test");
const botonRes = document.getElementById("boton");
const resultadoTest = document.getElementById ("resultad");
const preguntas = [
    {
        pregunta : "1.Te quedas sin luz en el marco de un apagón general en la cuadra:",
        respuestas: {
            a: "Llamás varias veces a la empresa y registrar cada número de reclamo para ir a Defensa del consumidor",
            b: "Te encerrás en tu casa bajo llave y llamas a la policía local para que patrulle la zona, sobre todo la esquina donde se suele juntar gente",
            c: "Salís de tu casa, caminas ida y vuelta la calle charlando con los vecinos para contenerlos o bien para juntar firmas del petitorio 'EDENOR, BASURA, VOS SOS LA DICTADURA' con quema de neumáticos y olla popular. Una u otra opción se dependen de las circunstancias"
        },
        respuestacorrecta: "c"
    },
 
    {
        pregunta : "2.Tenés que cortarte el pelo:",
        respuestas: {
            a: "Vas al que cobra caro porque no entendes nada de cortes pero debe ser bueno",
            b: "Miras atento los carteles y entras al que dice “coiffeur” por seguridad",
            c: "Vas a la academia de peluquería y te vale verga que se llame la “Tijera sangrante”. Hay que motivar y dar oportunidades"
        },
        respuestacorrecta: "c"
    },
 
    {
        pregunta : "3.Hacés un viaje con amigos/as y uno/a se fractura una pierna a mitad de la estadía. Tu propuesta es:",
        respuestas: {
            a: "Acompañar al amigo/a en la operación, llamar a un familiar a que venga a cuidarlo/a y seguir el viaje",
            b: "Cancelar el viaje y que todos/as vuelvan",
            c: "Llamar a la familia del accidentado y que se hagan cargo rápido para no perder días de viaje"
        },
        respuestacorrecta: "a"
    },
 
    {
        pregunta : "4.Almuerzo de reencuentro con ex compañeros de la primaria:",
        respuestas: {
            a: "Guardo silencio, identifico al gorila y le discuto todo. Cuando se levanta para ir al baño comparto con la mesa anécdotas denigrantes",
            b: "Entro con los tapones de punta si hay gorilas nos cagaremos la comida todos juntos.",
            c: "Salís de tu casa, caminas ida y vuelta la calle charlando con los vecinos para contPido que de política y religión mejor no hablemos y propongo un brindis 'VIVA LA SANTA FEDERACIÓN, MUERAN LOS SALVAJES UNITARIOS!'",
            d: "Todas la anteriores incluyendo la opción de irse a las manos"
        },
        respuestacorrecta: "d"
    },
 
    {
        pregunta : "5.Hacés un asado. Sobre la parrilla pones:",
        respuestas: {
            a: "Mollejas, entraña y vacío",
            b: "Chorizo y asado de costilla",
            c: "Mix de verduras y pollo sin piel"
        },
        respuestacorrecta: "b"
    },
                  ];
 
        function mostrartest () {
            const preguntasYrespuestas = [];
            preguntas.forEach((preguntaActual, numeroDePregunta) => {
                const respuestas = [];
                for(letraRespuesta in preguntaActual.respuestas){
                    respuestas.push(
                        `<label>
                        <input type ="radio" name="${numeroDePregunta}" value="${letraRespuesta}">
                        ${letraRespuesta} : ${preguntaActual.respuestas [letraRespuesta]}
                         </label>`
                    );
                }
                preguntasYrespuestas.push(
                    `<div class="cuestion"> ${preguntaActual.pregunta} </div>
                    <div class="respuestas"> ${respuestas.join('')}</div>
                    `
                );
            });
 
            contenedor.innerHTML = preguntasYrespuestas.join('');
 
        }
 
  mostrartest();
 
  function mostrarResultado() {
        const respuestas = contenedor.querySelectorAll(".respuestas");
        let respuestasCorrectas = 0;
        preguntas.forEach((preguntaActual, numeroDePregunta) => {
            const todasLasRespuestas = respuestas[numeroDePregunta];
            const checkboxRespuestas = `input [name='${numeroDePregunta}']:checkend`;
            const respuestaElegida = (todasLasRespuestas.querySelector(checkboxRespuestas) || {}).value;
 
            if(respuestaElegida === preguntaActual.respuestaCorrecta){
                respuestasCorrectas++;
            }
        } );
 
  }

Sé como hacer para que al usuario le muestre las respuestas correctas, pero lo que yo quiero hacer es mostrarle el PORCENTAJE de respuestas acertadas y no el NUMERO. Además segun el porcentaje debe imprimir en pantalla un mensaje diferente: si es menos de 40% es un mensaje, si es de 40% a 60% es otro mensaje y si es de 60% a 100% es otro.

GRACIAS! AYUDAAA
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.506
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Mostrar porcentaje de cuestionario en javascript

Publicado por joel (895 intervenciones) el 17/11/2020 08:01:25
Hola Luciano, te he modificado un poco el código haber si te sirve... ahora te muestra un alert con las coincidencias y el porcentaje de aciertos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<htmllang="en">
<head>
    <metacharset="UTF-8">
    <metaname="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="test"></div>
    <button id="boton">Mostrar resultado</button>
    <div id="resultado"></div>
    <script src="script.js"></script>
 
</body>
</html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
const contenedor = document.getElementById("test");
const botonRes = document.getElementById("boton");
botonRes.addEventListener("click", mostrarResultado);
const resultadoTest = document.getElementById ("resultad");
const preguntas = [
    {
        pregunta : "1.Te quedas sin luz en el marco de un apagón general en la cuadra:",
        respuestas: {
            a: "Llamás varias veces a la empresa y registrar cada número de reclamo para ir a Defensa del consumidor",
            b: "Te encerrás en tu casa bajo llave y llamas a la policía local para que patrulle la zona, sobre todo la esquina donde se suele juntar gente",
            c: "Salís de tu casa, caminas ida y vuelta la calle charlando con los vecinos para contenerlos o bien para juntar firmas del petitorio 'EDENOR, BASURA, VOS SOS LA DICTADURA' con quema de neumáticos y olla popular. Una u otra opción se dependen de las circunstancias"
        },
        respuestacorrecta: "c"
    },
 
    {
        pregunta : "2.Tenés que cortarte el pelo:",
        respuestas: {
            a: "Vas al que cobra caro porque no entendes nada de cortes pero debe ser bueno",
            b: "Miras atento los carteles y entras al que dice “coiffeur” por seguridad",
            c: "Vas a la academia de peluquería y te vale verga que se llame la “Tijera sangrante”. Hay que motivar y dar oportunidades"
        },
        respuestacorrecta: "c"
    },
 
    {
        pregunta : "3.Hacés un viaje con amigos/as y uno/a se fractura una pierna a mitad de la estadía. Tu propuesta es:",
        respuestas: {
            a: "Acompañar al amigo/a en la operación, llamar a un familiar a que venga a cuidarlo/a y seguir el viaje",
            b: "Cancelar el viaje y que todos/as vuelvan",
            c: "Llamar a la familia del accidentado y que se hagan cargo rápido para no perder días de viaje"
        },
        respuestacorrecta: "a"
    },
 
    {
        pregunta : "4.Almuerzo de reencuentro con ex compañeros de la primaria:",
        respuestas: {
            a: "Guardo silencio, identifico al gorila y le discuto todo. Cuando se levanta para ir al baño comparto con la mesa anécdotas denigrantes",
            b: "Entro con los tapones de punta si hay gorilas nos cagaremos la comida todos juntos.",
            c: "Salís de tu casa, caminas ida y vuelta la calle charlando con los vecinos para contPido que de política y religión mejor no hablemos y propongo un brindis 'VIVA LA SANTA FEDERACIÓN, MUERAN LOS SALVAJES UNITARIOS!'",
            d: "Todas la anteriores incluyendo la opción de irse a las manos"
        },
        respuestacorrecta: "d"
    },
 
    {
        pregunta : "5.Hacés un asado. Sobre la parrilla pones:",
        respuestas: {
            a: "Mollejas, entraña y vacío",
            b: "Chorizo y asado de costilla",
            c: "Mix de verduras y pollo sin piel"
        },
        respuestacorrecta: "b"
    },
];
 
        function mostrartest () {
            const preguntasYrespuestas = [];
            preguntas.forEach((preguntaActual, numeroDePregunta) => {
                const respuestas = [];
                for(letraRespuesta in preguntaActual.respuestas){
                    respuestas.push(
                        `<label>
                        <input type ="radio" name="${numeroDePregunta}" value="${letraRespuesta}">
                        ${letraRespuesta} : ${preguntaActual.respuestas [letraRespuesta]}
                         </label>`
                    );
                }
                preguntasYrespuestas.push(
                    `<div class="cuestion"> ${preguntaActual.pregunta} </div>
                    <div class="respuestas"> ${respuestas.join('')}</div>
                    `
                );
            });
 
            contenedor.innerHTML = preguntasYrespuestas.join('');
 
        }
 
  mostrartest();
 
function mostrarResultado() {
    const respuestas = contenedor.querySelectorAll(".respuestas");
    let respuestasCorrectas = 0;
    preguntas.forEach((preguntaActual, numeroDePregunta) => {
        const todasLasRespuestas = respuestas[numeroDePregunta];
        const respuestaDada = (document.querySelector("input[name='"+numeroDePregunta+"']:checked") || {}).value;
        const respuestaCorrecta = preguntas[0].respuestacorrecta;
        if (respuestaDada && respuestaDada==respuestaCorrecta) {
            respuestasCorrectas++;
        }
    });
    alert("respuestas correctas: "+respuestasCorrectas+"\nPorcentaje: "+((respuestasCorrectas*100)/preguntas.length)+"%");
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar