"""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
#"""