martes, 10 de noviembre de 2015

Juego de memorizar palabras

"""Intenta manipular un archivo de datos
Creado en Python 2.7 el 13 de septiembre de 2014

Modificado el 10 de noviembre de 2015, para agregarle un promedio general
que se despliega al final.

Derivado de Diccio3.py. Se evita usar la funcion encoge y las palabras se
agregan sin espacios en blanco al final, algo que se hace al momento del
despliegue. Esto ultimo sigue dando problemas de algoritmo. Las tildes y enies
cuentan por dos caracteres, de ahi sale el mal calculo de espacios.

La idea es tener un archivo de sustantivos y otras palabras (Diccio.txt), sacarle algunas
palabras de modo aleatorio y desplegarlas.

Lo que busco es hacer un ejercicio cognitivo que despliegue listas de palabras
para que uno intente recordarlas.

Esto era parte de un software de entrenamiento cognitivo, pero lo descontinuaron.
El programa era interesante, asi que lo implemento por mi cuenta.

Es mi primer juego. Siempre quise desarrollar algo asi. Desde 1998 hasta ahora
lo unico que desarrolle fue el factorizador, que parece que sirvio para
desoxidarme. Ahora va este programita. Algo mas?
"""

from random import random
from math import trunc
from time import time
import sys

def aleatorio(archivo):
   
    tamanio=len(archivo)
   
    while True:
        temp = random()*10**len(str(tamanio))
       
        if temp<=len(archivo): break
       
    return trunc(temp)

def clear():
    sys.stdout.write('\033[2J')
    sys.stdout.write('\033[H')
    sys.stdout.flush()

def trim(palabra):
         
    contador=0
    contador2=len(palabra)-1
    vacio=True
   
    for i in range(contador2+1):
        if palabra[i] <> " ": vacio=False
   
    if vacio: return ""
   
    palab2 =""
   
    while palabra[contador]==" ":
        contador+=1
   
    while palabra[contador2]==" ": contador2-=1
       
    for i in range(contador,contador2+1):
        palab2+=palabra[i]
  
    return palab2

def encoge(archivo):
    """Elimina las palabras repetidas de la matriz
    """
   
    listita=[]
   
    for palabra in archivo:

        if palabra not in listita and trim(palabra)<> "": listita.append(palabra)
   
    return listita

def chekea(file,cuanto):
    """Para revisar si hay palabras repetidas en un arreglo o desplegarlo
    poniendo cuanto a cero.
    """
   
    file2= file
   
    for palabra in file2:
        conteo=0
       
        for palabra2 in file:
            if palabra2== palabra: conteo+=1
       
        if conteo>cuanto: print palabra

def despliega(inicio,final): #Funcion de despliegue
   
    segundos = 18
   
    for i in range(inicio,final,2):
        print lista[i]+" "*(20-len(lista[i]))+lista[i+1]
    timi = time()
   
    #respuesta=(raw_input("apriete boton"))

    while True:
        if time()-timi>=segundos:break
   
    clear()

f=open('/home/cesardiaz/proyectos/python/Diccio.txt')

#Variables section
evaluables = 30.0
temp    =0

todos     = []
lista     = []
descarte  = []
listacheck= []

cadena    = ""
line      = ""

limite    = 0

conteo    = 0
descarte  = []

cuentaf   = 0
promediof = 0

for line in f.readlines(): #Copiar el archivo a una matriz en memoria
     
    cadena=""
   
    for n in range(len(line)-1):
        cadena+=line[n]
     
    if cadena not in todos and trim(cadena)<>"": todos.append(cadena)  

f.close

while True:
    cuentaf+=1
     
    clear()
    lista     = []
    listacheck= []

  
    while True: #Generar la lista de palabras
       
        temp=aleatorio(todos)
       
        if todos[temp] not in lista:
            lista.append(todos[temp])
           
        if len(lista)==48: break

    #tamanio=len(lista)

    if random()>0.5:
        limite=15
    else:
        limite=19

    while len(listacheck)<limite: #Cargamos lista de comprobacion con datos ya desplegados
       
        temp=aleatorio(lista)
       
        if lista[temp] not in listacheck: listacheck.append(lista[temp])

    while len(listacheck)<evaluables: #Ahora se agregan otros no desplegados
       
        temp=aleatorio(todos)
            
        if todos[temp] not in lista and todos[temp] not in listacheck:
            listacheck.append(todos[temp])

    #Desplegar listas de palabras para memorizar
    despliega(0,15)
    despliega(16,31)
    despliega(32,47)

    conteo=0
    descarte = []

    while len(descarte)<evaluables:
        temp=aleatorio(listacheck)
       
        if temp not in descarte:
            descarte.append(temp)
    
            while True:
                respuesta=""
               
                respuesta=(raw_input("Estaba "+(listacheck[temp])+" en la lista?"))
           
                if respuesta in "SsnN" and respuesta<> "": break
               
                print "Vuelva a intentar"
           
            if respuesta in "Ss" and listacheck[temp] in lista: conteo+=1
           
            if respuesta in "Nn" and listacheck[temp] not in lista: conteo+=1
           
    print "***************************************************"
    print "Numero de aciertos: ",conteo
    print "Precision.........: ",str(round((conteo/evaluables*100),2))+"%"
   
    while True:
        respuesta=""
       
        respuesta=(raw_input("Otra jugada?"))
   
        if respuesta in "SsnN" and respuesta<> "": break
       
        print "Vuelva a intentar"
   
    promediof=promediof+conteo/evaluables
   
    if respuesta in "Nn":
        print "promedio general:",str(round((promediof/cuentaf*100),2))+"%"
        break
   
   
   

#"""