Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Codigo cutre-chungo de Otto von Bismarck(efectivamente es un seudonimo) para
- #lapaginadefinitiva.com. Version 23-Marzo-2015. Programado en python 2.7
- #
- #Este es un codigo que sirve para leer automaticamente los resultados de las
- #porras de LPD. Se copian las apuestas en un .txt que este codigo lee.
- #Para ello hay que hacer lo siguiente:
- #
- #Cosas previas:
- #--------------------------------------------------------------------------
- #1º Pedir a la fauna de LPD que escriba las apuestas segun el siguiente formato:
- '''
- ####inicio####
- apostante: paco
- psoe: 34
- pp: 20
- podemos: 10
- ciutadans: 22
- iu: 12
- mayoria_absoluta: si
- ####fin####
- '''
- #Las apuestas tienen que ser identicas a las constantes en este txt.
- #Aparte del nombre, hay apuestas numericas (la respuesta es un numero) y
- #apuestas logicas (la respuesta es una palabra), van clasificadas en las
- #constantes de mas abajo (RESULTADOS_NUMERICOS y RESULTADOS_LOGICOS)
- #Ojo a respetar los espacios, escribir con minusculas, sin acentos y en caso
- #de contestar (o preguntar) mas de una palabra, unirlas con guiones, guiones
- # bajos o todo junto, siempre asi:
- #cosa_queSe-pregunta: respuesta_enUna-Palabra
- #
- #2º Copiar y pegar los comentarios de la pagina con las apuestas en un archivo
- #.txt (por ejemplo con el bloc de notas de windows, codificacion ANSI)
- #
- #Modificar en este codigo:
- #--------------------------------------------------------------------------
- #1º Introducir la ruta del archivo txt en la variable APUESTAS_LPD
- #2º Modificar las constantes RESULTADOS_NUMERICOS y RESULTADOS_LOGICOS con los
- #valores correctos que se van a comparar con las apuestas
- #3º Ejecutar este codigo en un interprete de python
- #4º En la consola se mostraran los resultados ordenados sin hacer nada mas
- import string
- from operator import itemgetter
- # Nombre del archivo de texto desde el que se cargan datos, si estan en el mismo
- # directorio probar solo con nombre, si no va, usar ruta completa del archivo
- #APUESTAS_LPD ="apuestasLPD.txt"
- APUESTAS_LPD =r"C:\Users\Usuario1\Downloads\apuestasLPD.txt"
- #APUESTAS_LPD = "C:\Users\LeonDeLaRiva\corrupcion y otros\porno degenerado\videos morritos leire pain\apuestasLPD.txt"
- # Resultados finales a comparar con las apuestas
- RESULTADOS_NUMERICOS =\
- {
- 'psoe':47,
- 'pp':33,
- 'podemos':15,
- 'ciutadans':9,
- 'iu':5
- }
- RESULTADOS_LOGICOS = \
- {
- 'mayoria_absoluta':{'si':10, 'no':0}
- }
- #Copio ambos diccionarios en un unico diccionario
- RESULTADOS_TOTALES = RESULTADOS_NUMERICOS.copy()
- RESULTADOS_TOTALES.update(RESULTADOS_LOGICOS)
- # Codigos usados para iniciar-finalizar apuesta y marcar al apostante
- INICIO = '####inicio####\n'
- INICIO2 = '####inicio####'
- FIN = '####fin####\n' #Ojo, tiene que haber punto y aparte al final de fin (\n)
- FIN2 = '####fin####'
- AUTOR = 'apostante'
- def cargar_apuestas():
- '''(funcion sin argumentos)->(lista de diccionarios)
- Funcion que abre el archivo txt con las apuestas del personal, las procesa,
- y devuelve una lista de diccionarios en la que cada diccionario son parejas
- de valores (key-> lo que se pregunta: value-> respuesta del interfecto)
- Tal que asi:
- [{'iu': 22, 'pp': 20, 'apostante': 'paco'}, {'iu': 0, 'pp': 0, 'apostante': 'periquillo'}]
- Nota: Los valores numericos (RESULTADOS_NUMERICOS)los pasa a ints y los
- logicos (RESULTADOS_LOGICOS) son strings
- '''
- fileName = open(APUESTAS_LPD, 'r') #abrir como solo lectura
- lista = []
- temporal = []
- flag = False
- for line in fileName:
- newline = line.replace(':','') #quito los dos puntos
- newline = newline.strip() #quito espacios al principio y final de linea
- #ahora tengo solo strings separados por espacios
- if newline == INICIO or newline == INICIO2: #empieza una apuesta
- flag = True
- elif newline == FIN or newline == FIN2: #he acabado una apuesta
- flag = False
- # pasa parejas de valores en lista -> valores diccionario
- diccionario = {}
- for element in temporal:
- #los logicos se quedan como texto
- if element[0] in RESULTADOS_LOGICOS or element[0] == AUTOR:
- diccionario[element[0]]=element[1]
- #los numericos los paso a int
- elif element[0] in RESULTADOS_NUMERICOS:
- diccionario[element[0]]=int(element[1])
- lista.append(diccionario)
- temporal = []
- if flag and (newline != INICIO or newline != INICIO2) : #es una linea con un valor a guardar
- temporal.append(newline.split()) #guardo las palabras entre espacios en una lista
- fileName.close()
- return lista
- def calcular_valores (lista):
- '''(lista de diccionarios)->(lista de listas en formato [autor,puntos])
- funcion que toma como argumento una lista de diccionarios en el que cada
- diccionario es una apuesta completa, calcula el resultado final de su
- apuesta, y devuelve una lista de nombres de apostantes con su resultado
- '''
- resultados = []
- provisional = []
- for diccionario in lista:
- nombre = diccionario[AUTOR]
- puntos = puntuacion(diccionario)
- provisional=[nombre, puntos]
- resultados.append(provisional)
- provisional = []
- return resultados
- #Funcion auxiliar, compara apuestas y resultados numericos/logicos y devuelve puntuacion
- def puntuacion(apuesta):
- '''(diccionario con 1 apuesta completa) -> (numero)
- '''
- puntos = 0
- for element in RESULTADOS_TOTALES:
- if element in RESULTADOS_NUMERICOS:
- puntos += abs(RESULTADOS_TOTALES[element] - apuesta[element])
- elif element in RESULTADOS_LOGICOS:
- a = RESULTADOS_LOGICOS[element]
- b = a[apuesta[element]]
- puntos += b
- return puntos
- def muestra_resultados(lista):
- '''(lista de listas)->(print)
- Toma como argumento una lista de listas en las que cada lista anidada es
- una pareja de valores [autor, puntos obtenidos].
- Designa ganador al autor de la primera apuesta que obtenga la puntuacion
- mas baja.
- Designa farolillo rojo al ultimo clasificado
- Muestra todas los resultados por orden.
- Nota: todos los que tienen la puntuacion mas baja y los que la tienen mas
- alta, aparecen como perdedores y ganadores respectivamente, pero se muestran
- los resultados en orden de publicacion en comentarios. Por lo que el primero
- y el ultimo son el primero que publico la mejor apuesta y el ultimo que
- puplico la peor apuesta.
- '''
- puntuacion_ganadores = min(lista,key=itemgetter(1))[1]
- puntuacion_perdedores = max(lista,key=itemgetter(1))[1]
- lista_ganadores = []
- lista_mediocres = []
- lista_perdedores = []
- for element in lista:
- if element[1] == puntuacion_ganadores:
- lista_ganadores.append(element)
- elif element[1] == puntuacion_perdedores:
- lista_perdedores.append(element)
- else:
- lista_mediocres.append(element)
- #pasamos a mostrar los resultados con gracia
- count = 1
- for element in lista_ganadores:
- print '{0}. {1}: Este poderoso TITAN nos inspira en su victoria con {2} puntos'.format(count,element[0],element[1])
- count +=1
- for element in lista_mediocres:
- print '{0}. {1}: obtuvo una puntuacion de {2} puntos'.format(count,element[0],element[1])
- count +=1
- for element in lista_perdedores:
- print '{0}. {1}: Este lamentable PAQUETE nos abochorna en su ultima posicion con {2} puntos'.format(count,element[0],element[1])
- count +=1
- def funcion_maestra():
- '''()->(print)
- 1º cargo las apuestas desde un archivo txt
- 2º calculo las puntuaciones para cada apostante
- 3º ordeno por puntuaciones a los apostantes y muestro los resultados
- destacando a los campeones y a los farolillos rojos
- '''
- #1º
- a = cargar_apuestas()
- #2º
- b = calcular_valores(a)
- #3º
- muestra_resultados(b)
- if __name__ == "__main__":
- funcion_maestra()
- #print cargar_apuestas()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement