Advertisement
Sax

PyZap 2

Sax
Apr 24th, 2013
335
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.75 KB | None | 0 0
  1. #PyZap
  2. # -*- coding: utf-8 -*-
  3.  
  4. #TODO
  5. #Cambiar MainWidget.send()
  6. #Poner los botones de las letras como toggle
  7. #Agregar validacion de palabras
  8.  
  9. import random
  10. import csv
  11. import sys
  12. from PySide import QtGui, QtCore
  13.  
  14. class MainWindow(QtGui.QMainWindow):
  15.  
  16.     def __init__(self, parent=None):
  17.         super(MainWindow, self).__init__(parent)
  18.  
  19.         self.initUI()
  20.  
  21.     def initUI(self):
  22.         """Inicia la Ventana del juego."""
  23.  
  24.         self.statusBar().showMessage('Listo.')
  25.  
  26.         self.widget = MainWidget()
  27.         self.setCentralWidget(self.widget)
  28.  
  29.         self.setGeometry(300, 300, 300, 300)
  30.         self.setWindowTitle('PyZap')
  31.         self.setWindowIcon(QtGui.QIcon('icon.png'))
  32.         self.show()
  33.  
  34. class MainWidget(QtGui.QWidget):
  35.    
  36.         def __init__(self, parent=None):
  37.             super(MainWidget, self).__init__(parent)
  38.             self.init_ui()
  39.  
  40.         def init_ui(self):
  41.             #Aqui van las weas graficas
  42.  
  43.             self.grid= QtGui.QGridLayout()
  44.             self.grid.setSpacing(10)
  45.  
  46.             self.letter_grid = QtGui.QGridLayout()
  47.             self.letter_grid.setSpacing(10)
  48.  
  49.             pos = [(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2)]
  50.             j = 0
  51.  
  52.             for i in pyzap.letras_escogidas:
  53.                 button = QtGui.QPushButton(i)
  54.                 button.clicked.connect(self.typea)
  55.                 self.letter_grid.addWidget(button, pos[j][0], pos[j][1])
  56.                 j = j + 1
  57.  
  58.             self.line_edit = QtGui.QTextEdit()
  59.             self.line_edit.setReadOnly(True)
  60.             self.line_edit.setMaximumHeight(25)
  61.  
  62.             self.grid.addLayout(self.letter_grid, 0, 0)
  63.  
  64.             self.clear_button = QtGui.QPushButton('Clear')
  65.             self.clear_button.clicked.connect(self.line_edit.clear)
  66.  
  67.             self.ok_button = QtGui.QPushButton("OK")
  68.             self.ok_button.clicked.connect(self.send)
  69.            
  70.             self.grid.addWidget(self.clear_button, 0, 1)
  71.             self.grid.addWidget(self.line_edit, 1, 0, 1, 1)
  72.             self.grid.addWidget(self.ok_button, 2, 1)
  73.            
  74.  
  75.             self.grid.addWidget(QtGui.QLabel("Tus Palabras"), 2,0)
  76.  
  77.             self.tus_palabras = QtGui.QTextEdit()
  78.             self.tus_palabras.setReadOnly(True)
  79.  
  80.             self.grid.addWidget(self.tus_palabras, 3, 0, 1, 1)
  81.  
  82.             self.setLayout(self.grid)
  83.             self.show()
  84.  
  85.  
  86.         def typea(self):
  87.             """Escribe el texto del boton"""
  88.  
  89.             source = self.sender()
  90.             self.line_edit.insertPlainText(source.text())
  91.  
  92.         def send(self):
  93.             """Envia word para ser validada. Regresa texto si succedea."""
  94.  
  95.             word = self.line_edit.toPlainText()
  96.             self.line_edit.clear()
  97.  
  98.             #valida word
  99.             valid = True #Hardcodeo MIENTRAS
  100.  
  101.             if valid:
  102.                 pyzap.your_words.append(word)
  103.                 self.tus_palabras.append(word)
  104.             else:
  105.                 self.line_edit.insertPlainText(
  106.                     "Esa palabra no se puede formar o no existe")
  107.  
  108.            
  109.  
  110. class PyZap(object):
  111.    
  112.     def __init__(self, parent=None):
  113.  
  114.         self.init_mind()
  115.         self.init_skeleton()
  116.  
  117.     def init_mind(self):
  118.         """Inicia procesos de la aplicacion."""
  119.  
  120.         self.alpha = self.create_alpha()
  121.         self.letras_escogidas = self.get_sample()
  122.  
  123.         self.palabras1 = self.first_search(
  124.             self.letras_escogidas)
  125.         self.palabras2 = self.second_search(
  126.             self.palabras1, self.letras_escogidas)
  127.  
  128.         self.your_words = []
  129.    
  130.     def init_skeleton(self):
  131.         """Inicia GUI de la aplicacion."""
  132.         pass
  133.  
  134.     def create_alpha(self):
  135.         """Regresa el alfabeto a utilizar en el PyZap."""
  136.         zipo= []
  137.         letters = list("abcdefghijklmnopqrstuvwxyz")
  138.  
  139.         for row in reader:
  140.             zipo.append(tuple(row))
  141.  
  142.         for (char,proba) in zipo:
  143.             for i in range(int(proba)):
  144.                 letters.append(char)
  145.  
  146.         return letters
  147.  
  148.  
  149.     def get_sample(self):
  150.         """Regresa una muestra de 9 letras entre el alfabeto disponible."""
  151.  
  152.         chosen = random.sample(self.alpha,9)
  153.         return chosen
  154.  
  155.  
  156.     def first_search(self, search_terms):
  157.         """Realiza la primera busqueda de palabras dentro de 'diccionario' que
  158.        contengan cualquier elemento de search_terms.
  159.  
  160.        Los search_terms son una sola lista de caracteres. Cada elemento de la
  161.        lista es una letra.
  162.  
  163.        Tras haber encontrado las palabras, las copia a un diccionario a RAM
  164.        en el siguiente formato:
  165.  
  166.        'palabra' : num_de_coincidencias, num_de_caracteres
  167.  
  168.        Regresa el diccionario antes mencionado.
  169.  
  170.        """
  171.        
  172.         diccionario.seek(0)
  173.         results = []
  174.  
  175.         for word in diccionario:
  176.             word = word.rstrip()
  177.             for term in search_terms:
  178.                 if word.find(term) != -1:
  179.                     results.append(word)
  180.  
  181.         #toRAM
  182.         first_search_words = {}
  183.  
  184.         for word in results:
  185.             if word not in first_search_words:
  186.                 first_search_words[word] = [results.count(word), len(word)]
  187.  
  188.         return first_search_words
  189.  
  190.  
  191.     def second_search(self, first_search_words, search_terms):
  192.         """Recibe el diccionario en ram con las first_search_words para refinar
  193.        la busqueda.
  194.  
  195.        Primero se eliminan los resultados que tengan menos coincidencias que
  196.        numero de caracteres. Posteriormente, cada palabra es separada en
  197.        caracteres, y se comparan uno a uno con las letras escogidas en el run.
  198.  
  199.        Regresa una lista de palabras.
  200.  
  201.        """
  202.  
  203.         flagged_for_deletion = []
  204.  
  205.         for word in first_search_words:
  206.             if first_search_words.get(word)[0] < first_search_words.get(word)[1]:
  207.                 flagged_for_deletion.append(word)
  208.  
  209.         for word in flagged_for_deletion:
  210.             del first_search_words[word]
  211.  
  212.         used_chars = []
  213.         final_words = []
  214.         keys = first_search_words.keys()
  215.  
  216.         for word in keys:
  217.  
  218.             available = list(search_terms)
  219.             used_chars[:] = []
  220.             actual_word = list(word)
  221.  
  222.             for current_char in actual_word:
  223.                 if current_char in available:
  224.                     used_chars.append(current_char)
  225.                     available.remove(current_char)
  226.  
  227.             sorted(actual_word)
  228.             sorted(used_chars)
  229.             available[:] = []
  230.  
  231.             if actual_word == used_chars:
  232.                 final_words.append(word)
  233.  
  234.         return final_words
  235.  
  236. def main():
  237.  
  238.     app = QtGui.QApplication(sys.argv)
  239.     global reader, diccionario, archivo, pyzap, window
  240.    
  241.     archivo = open('probas.csv', 'r+')
  242.     diccionario = open('pokemon', 'r+')
  243.     reader = csv.reader(archivo, delimiter=',')
  244.  
  245.     pyzap = PyZap()
  246.  
  247.     window = MainWindow()
  248.     sys.exit(app.exec_())
  249.    
  250. if __name__ == '__main__':
  251.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement