Sistema para hacer test

Hoy estando en sugus, Virako ha preguntado por algo para hacer test en linux, para el stand de mañana de la asociación, y ha encontrado algo para hacerlo. Pero entonces a mí se me ha ocurrido implementar un script sencillo que haría más o menos la misma función.

La idea es simple, parsear un fichero con las preguntas y las respuestas, y mostrar con zenity una lista para seleccionar. Por supuesto para hacerlo más divertido, el orden de las respuestas es aleatorio.

El fichero a parsear sería de la forma:

El resultado de multiplicar 25*25 # 2500 # @625 # 825
¿Cuál es la mejor tira cómica de todas? # @la de linuxhispano # la tira ecol # bit & byte

Donde por cada linea se introducirían la pregunta y el conjunto de respuestas, separando cada una por una #. La pregunta siempre será la primera cadena, las respuestas se ordenarán de manera aleatoría. La respuesta correcta está marcada por una arroba al principio, entre # pueden existir tantos espacios como se quieran, ya que hago un strip de la cadena.

Aquí está el código:


#!/usr/bin/python
# -*- coding: utf-8 -*-

import os, sys
import random
from datetime import datetime

acertadas = 0

comando = 'zenity --text "¿Cual es tu nombre?" --entry'
entrada, salida = os.popen2(comando)
nombre = salida.read()
nombre = nombre.strip()

n = 0
for line in open(sys.argv[1]):
    n += 1
    opts = line.split('#');
    pregunta = opts[0]
    opts = opts[1:]
    opts = map(str.strip ,opts)

    columnas = []
    correcta = ''
    while len(opts) > 0:
        opt = random.choice(opts)
        opts.remove(opt)
        if opt[0] == '@':
            correcta = opt[1:]
            opt = opt[1:]
        opt = 'FALSE "' + opt + '"'
        columnas.append(opt)

    comando = 'zenity --text "' + pregunta + '" --list --radiolist --width=500 --height=500 --column X --column "Respuestas" ' + ' '.join(columnas)
    entrada, salida = os.popen2(comando)
    respuesta = salida.read()
    if respuesta.strip() == correcta:
        acertadas += 1

comando = 'zenity --scale --value=%(acertadas)d --max-value=%(n)d --print-partial --text "tu puntación %(nombre)s %(acertadas)d/%(n)d"' % dict(acertadas=acertadas, n=n, nombre=nombre)
entrada, salida = os.popen2(comando)
salida.read()

print "%s | %s | %d" % (datetime.now().ctime(), nombre, acertadas)

Se ejecutaría el programa de la siguiente forma:
python test.py fichero_de_test1 >> estadisticas_de_test1

Al principio pedirá un nombre para las estadísticas, y al final mostrará una barra, indicando la puntuación que has sacado.

Anuncios

1 Response to “Sistema para hacer test”


  1. 1 nerea octubre 27, 2008 en 5:25 pm

    me gustaria consegir a un chico es guapo se llama dani y lo quiero mucho un monton pero una niña me lo quiere quitar y no me gustaria nada de nada te quiero dani eres el mejor


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s





A %d blogueros les gusta esto: