Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #encoding:utf-8
- import random
- import os
- def ler_ficheiro():
- while True:
- nome = input("Introduza o ficheiro: ")
- if ".csv" not in nome:
- nome = nome + ".csv"
- if os.path.exists(nome):
- file = open(nome, "r")
- break
- print()
- return file
- def ler_apostas(ficheiro):
- list_apostas = []
- for line in ficheiro:
- line = line.split(",")
- numeros = line[2].split()
- aposta = [line[0], line[1],numeros] # Cada aposta vai ser da forma ["Alberto Alfredo Alexandre Andrade", "Coimbra", ["01","02","03","04"]]
- list_apostas.append(aposta)
- return list_apostas
- def sorteio():
- lista_num = []
- while True:
- rand = str(random.randint(1, 20))
- if len(rand) < 2:
- rand = "0" + rand
- if not rand in lista_num:
- lista_num.append(rand)
- if len(lista_num) == 4:
- break
- return lista_num
- def certos(aposta,sorteado):
- cont = 0
- corretos = []
- for num in aposta[2]:
- if num in sorteado:
- cont += 1
- corretos.append(num)
- aposta = aposta_limpa(aposta, corretos)
- return cont, aposta
- def aposta_limpa(aposta,certos):
- # função formatar os certos
- aposta_suja = aposta[2]
- aposta_clean = []
- for i in aposta_suja:
- # if else por questões de leitura
- if i in certos:
- i = "(" + i + ")"
- aposta_clean.append(i)
- else:
- aposta_clean.append(i)
- aposta[2] = aposta_clean
- return aposta
- def processar_apostas(apostas,chave):
- primeiro = []
- segundo = []
- terceiro = []
- quarto = []
- for aposta in apostas:
- num_certos,aposta = certos(aposta, chave)
- if num_certos == 4:
- primeiro.append(aposta)
- elif num_certos == 3:
- segundo.append(aposta)
- elif num_certos == 2:
- terceiro.append(aposta)
- elif num_certos == 1:
- quarto.append(aposta)
- return primeiro, segundo, terceiro, quarto
- def ordenar_apostas(apostas):
- # Quicksort
- if len(apostas) <=1:
- return apostas
- pivot = apostas[0]
- prv, nxt = [], []
- for i in apostas[1:]:
- # Exemplo para clareza:
- # pivot = ["Alberto Alfredo Alexandre Andrade", "Coimbra", ["01","02","03","04"]]
- # i = ["Zefania Zacarias Zack Zuriel Zac", "Lisboa", ["(05)","(13)","12","08"]]
- # if "Zefania Zacarias Zack Zuriel Zac" < "Alberto Alfredo Alexandre Andrade" : etc...
- # Nota: Não vai comparar tamanhos! Vai comparar lexicograficamente
- if i[0] < pivot[0]:
- prv.append(i)
- else:
- nxt.append(i)
- return ordenar_apostas(prv) + [pivot] + ordenar_apostas(nxt)
- def print_apostas(apostas):
- print("{:<30} {:<20} {:<20}".format("Nome", "Distrito", "Aposta"))
- for apostador in apostas:
- print("{:<30} {:<20} {:<20}".format(apostador[0],apostador[1], " ".join(apostador[2])))
- print()
- def receita(total_apostas):
- total_receita = len(total_apostas)
- return total_receita
- def distribuicao_receita(dinheiro_receita,premiados,montantes):
- print()
- print("{:<12} {:>10} {:>12} {:>10}".format("Premio", "Montante", "Premiados", "Valor"))
- for index,val in enumerate(premiados):
- mont = float(dinheiro_receita * montantes[index])
- if len(val) >0:
- valor = float(mont/len(val))
- else:
- valor = 0.00
- print("{:<12} {:>10.2f} {:>12} {:>10.2f}€".format(str(index+1) + "º premio", mont, len(val), valor))
- print()
- def tabela_distrito(lista_apostas_premio):
- dict_tabela = {}
- for index, apostas_premio in enumerate(lista_apostas_premio):
- for aposta in apostas_premio:
- if aposta[1] in dict_tabela.keys():
- dict_tabela[aposta[1]][index].append(aposta[2])
- else:
- lista_temp = [[],[],[],[]]
- lista_temp[index].append(aposta[2])
- dict_tabela[aposta[1]] = lista_temp
- print("{:<30} {} {} {} {}".format("Distrito", "4 Acertos", "3 Acertos", "2 Acertos", "1 Acertos"))
- for distrito in dict_tabela:
- print("{:<30} {:>9} {:>9} {:>9} {:>9}".format(distrito, len(dict_tabela[distrito][0]), len(dict_tabela[distrito][1]), len(dict_tabela[distrito][2]), len(dict_tabela[distrito][3])))
- def main():
- sorteada = sorteio()
- print("Chave Sorteada: {} ".format(" ".join(sorteada)))
- fich = ler_ficheiro()
- lista_apostas = ler_apostas(fich)
- first_prize,second_prize, third_prize,fourth_prize = processar_apostas(lista_apostas, sorteada)
- first_prize,second_prize = ordenar_apostas(first_prize), ordenar_apostas(second_prize)
- print("1ºs Prémios: ")
- print_apostas(first_prize)
- print("2ºs Prémios: ")
- print_apostas(second_prize)
- dinheiro = receita(lista_apostas)
- print("Receita: {:.2f}€".format(dinheiro))
- prems = [first_prize,second_prize,third_prize,fourth_prize]
- montes = [0.30,0.20,0.10,0.10]
- distribuicao_receita(dinheiro,prems,montes)
- tabela_distrito(prems)
- print("{:<30} {:>9} {:>9} {:>9} {:>9}".format("Total", len(first_prize), len(second_prize), len(third_prize), len(fourth_prize)))
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement