Advertisement
Guest User

Codigo para porras LPD

a guest
Mar 23rd, 2015
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.30 KB | None | 0 0
  1. #Codigo cutre-chungo de Otto von Bismarck(efectivamente es un seudonimo) para
  2. #lapaginadefinitiva.com. Version 23-Marzo-2015. Programado en python 2.7
  3. #
  4. #Este es un codigo que sirve para leer automaticamente los resultados de las
  5. #porras de LPD. Se copian las apuestas en un .txt que este codigo lee.
  6. #Para ello hay que hacer lo siguiente:
  7. #
  8. #Cosas previas:
  9. #--------------------------------------------------------------------------
  10. #1º Pedir a la fauna de LPD que escriba las apuestas segun el siguiente formato:
  11. '''
  12. ####inicio####
  13. apostante: paco
  14. psoe: 34
  15. pp: 20
  16. podemos: 10
  17. ciutadans: 22
  18. iu: 12
  19. mayoria_absoluta: si
  20. ####fin####        
  21. '''
  22. #Las apuestas tienen que ser identicas a las constantes en este txt.
  23. #Aparte del nombre, hay apuestas numericas (la respuesta es un numero) y
  24. #apuestas logicas (la respuesta es una palabra), van clasificadas en las
  25. #constantes de mas abajo (RESULTADOS_NUMERICOS y RESULTADOS_LOGICOS)
  26. #Ojo a respetar los espacios, escribir con minusculas, sin acentos y en caso
  27. #de contestar (o preguntar) mas de una palabra, unirlas con guiones, guiones
  28. # bajos o todo junto, siempre asi:
  29. #cosa_queSe-pregunta: respuesta_enUna-Palabra
  30. #
  31. #2º Copiar y pegar los comentarios de la pagina con las apuestas en un archivo
  32. #.txt (por ejemplo con el bloc de notas de windows, codificacion ANSI)
  33. #
  34. #Modificar en este codigo:
  35. #--------------------------------------------------------------------------
  36. #1º Introducir la ruta del archivo txt en la variable APUESTAS_LPD
  37. #2º Modificar las constantes RESULTADOS_NUMERICOS y RESULTADOS_LOGICOS con los
  38. #valores correctos que se van a comparar con las apuestas
  39. #3º Ejecutar este codigo en un interprete de python
  40. #4º En la consola se mostraran los resultados ordenados sin hacer nada mas
  41.  
  42.  
  43. import string
  44. from operator import itemgetter
  45.  
  46. # Nombre del archivo de texto desde el que se cargan datos, si estan en el mismo
  47. # directorio probar solo con nombre, si no va, usar ruta completa del archivo
  48. #APUESTAS_LPD ="apuestasLPD.txt"
  49. APUESTAS_LPD =r"C:\Users\Usuario1\Downloads\apuestasLPD.txt"
  50. #APUESTAS_LPD = "C:\Users\LeonDeLaRiva\corrupcion y otros\porno degenerado\videos morritos leire pain\apuestasLPD.txt"
  51.  
  52. # Resultados finales a comparar con las apuestas
  53. RESULTADOS_NUMERICOS =\
  54.     {
  55.     'psoe':47,
  56.     'pp':33,
  57.     'podemos':15,
  58.     'ciutadans':9,
  59.     'iu':5    
  60.     }
  61.    
  62. RESULTADOS_LOGICOS = \
  63.     {
  64.     'mayoria_absoluta':{'si':10, 'no':0}
  65.     }
  66.  
  67. #Copio ambos diccionarios en un unico diccionario
  68. RESULTADOS_TOTALES = RESULTADOS_NUMERICOS.copy()
  69. RESULTADOS_TOTALES.update(RESULTADOS_LOGICOS)
  70.  
  71. # Codigos usados para iniciar-finalizar apuesta y marcar al apostante
  72. INICIO = '####inicio####\n'
  73. INICIO2 = '####inicio####'
  74. FIN = '####fin####\n' #Ojo, tiene que haber punto y aparte al final de fin (\n)
  75. FIN2 = '####fin####'
  76. AUTOR = 'apostante'
  77.  
  78. def cargar_apuestas():
  79.     '''(funcion sin argumentos)->(lista de diccionarios)
  80.    Funcion que abre el archivo txt con las apuestas del personal, las procesa,
  81.    y devuelve una lista de diccionarios en la que cada diccionario son parejas
  82.    de valores (key-> lo que se pregunta: value-> respuesta del interfecto)
  83.    Tal que asi:
  84.    [{'iu': 22, 'pp': 20, 'apostante': 'paco'}, {'iu': 0, 'pp': 0, 'apostante': 'periquillo'}]
  85.    Nota: Los valores numericos (RESULTADOS_NUMERICOS)los pasa a ints y los
  86.    logicos (RESULTADOS_LOGICOS) son strings
  87.    '''
  88.     fileName = open(APUESTAS_LPD, 'r') #abrir como solo lectura
  89.    
  90.     lista = []
  91.     temporal = []
  92.    
  93.     flag = False
  94.    
  95.  
  96.     for line in fileName:
  97.        
  98.         newline = line.replace(':','') #quito los dos puntos
  99.         newline = newline.strip() #quito espacios al principio y final de linea
  100.         #ahora tengo solo strings separados por espacios
  101.        
  102.         if newline == INICIO or newline == INICIO2: #empieza una apuesta
  103.             flag = True
  104.        
  105.         elif newline == FIN or newline == FIN2: #he acabado una apuesta
  106.             flag = False
  107.            
  108.             # pasa parejas de valores en lista -> valores diccionario
  109.             diccionario = {}  
  110.             for element in temporal:
  111.                
  112.                 #los logicos se quedan como texto
  113.                 if element[0] in RESULTADOS_LOGICOS or element[0] == AUTOR:
  114.                     diccionario[element[0]]=element[1]
  115.                 #los numericos los paso a int
  116.                 elif element[0] in RESULTADOS_NUMERICOS:          
  117.                     diccionario[element[0]]=int(element[1])                  
  118.            
  119.             lista.append(diccionario)
  120.             temporal = []
  121.            
  122.         if flag and (newline != INICIO or newline != INICIO2) : #es una linea con un valor a guardar
  123.             temporal.append(newline.split())  #guardo las palabras entre espacios en una lista
  124.            
  125.     fileName.close()  
  126.     return lista  
  127.  
  128. def calcular_valores (lista):
  129.     '''(lista de diccionarios)->(lista de listas en formato [autor,puntos])
  130.    funcion que toma como argumento una lista de diccionarios en el que cada
  131.    diccionario es una apuesta completa, calcula el resultado final de su
  132.    apuesta, y devuelve una lista de nombres de apostantes con su resultado
  133.    '''
  134.     resultados = []
  135.     provisional = []
  136.     for diccionario in lista:
  137.         nombre = diccionario[AUTOR]
  138.         puntos = puntuacion(diccionario)
  139.         provisional=[nombre, puntos]
  140.         resultados.append(provisional)
  141.         provisional = []
  142.     return resultados
  143.        
  144.  
  145. #Funcion auxiliar, compara apuestas y resultados numericos/logicos y devuelve puntuacion
  146. def puntuacion(apuesta):
  147.     '''(diccionario con 1 apuesta completa) -> (numero)
  148.    '''
  149.     puntos = 0
  150.     for element in RESULTADOS_TOTALES:
  151.         if element in RESULTADOS_NUMERICOS:
  152.             puntos += abs(RESULTADOS_TOTALES[element] - apuesta[element])
  153.         elif element in RESULTADOS_LOGICOS:
  154.             a = RESULTADOS_LOGICOS[element]
  155.             b = a[apuesta[element]]
  156.             puntos += b  
  157.    
  158.     return puntos
  159.  
  160.    
  161. def muestra_resultados(lista):
  162.     '''(lista de listas)->(print)
  163.    Toma como argumento una lista de listas en las que cada lista anidada es
  164.    una pareja de valores [autor, puntos obtenidos].
  165.    Designa ganador al autor de la primera apuesta que obtenga la puntuacion
  166.    mas baja.
  167.    Designa farolillo rojo al ultimo clasificado
  168.    Muestra todas los resultados por orden.
  169.    Nota: todos los que tienen la puntuacion mas baja y los que la tienen mas
  170.    alta, aparecen como perdedores y ganadores respectivamente, pero se muestran
  171.    los resultados en orden de publicacion en comentarios. Por lo que el primero
  172.    y el ultimo son el primero que publico la mejor apuesta y el ultimo que
  173.    puplico la peor apuesta.
  174.    '''
  175.     puntuacion_ganadores = min(lista,key=itemgetter(1))[1]
  176.     puntuacion_perdedores = max(lista,key=itemgetter(1))[1]
  177.    
  178.     lista_ganadores = []
  179.     lista_mediocres = []
  180.     lista_perdedores = []
  181.    
  182.     for element in lista:
  183.         if element[1] == puntuacion_ganadores:
  184.             lista_ganadores.append(element)
  185.         elif element[1] == puntuacion_perdedores:
  186.             lista_perdedores.append(element)
  187.         else:
  188.             lista_mediocres.append(element)
  189.    
  190.     #pasamos a mostrar los resultados con gracia
  191.     count = 1
  192.     for element in lista_ganadores:
  193.         print '{0}. {1}: Este poderoso TITAN nos inspira en su victoria con {2} puntos'.format(count,element[0],element[1])
  194.         count +=1
  195.     for element in lista_mediocres:
  196.         print '{0}. {1}: obtuvo una puntuacion de {2} puntos'.format(count,element[0],element[1])
  197.         count +=1
  198.     for element in lista_perdedores:
  199.         print '{0}. {1}: Este lamentable PAQUETE nos abochorna en su ultima posicion con {2} puntos'.format(count,element[0],element[1])
  200.         count +=1
  201.        
  202.        
  203. def funcion_maestra():
  204.     '''()->(print)
  205.    1º cargo las apuestas desde un archivo txt
  206.    2º calculo las puntuaciones para cada apostante
  207.    3º ordeno por puntuaciones a los apostantes y muestro los resultados
  208.    destacando a los campeones y a los farolillos rojos
  209.    '''
  210.     #1º
  211.     a = cargar_apuestas()
  212.     #2º
  213.     b = calcular_valores(a)
  214.     #3º
  215.     muestra_resultados(b)    
  216.    
  217.  
  218. if __name__ == "__main__":
  219.     funcion_maestra()
  220.     #print cargar_apuestas()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement