Advertisement
Guest User

Untitled

a guest
Dec 9th, 2016
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.10 KB | None | 0 0
  1. #encoding:utf-8
  2. import random
  3. import os
  4. def ler_ficheiro():
  5. while True:
  6. nome = input("Introduza o ficheiro: ")
  7. if ".csv" not in nome:
  8. nome = nome + ".csv"
  9. if os.path.exists(nome):
  10. file = open(nome, "r")
  11. break
  12. print()
  13. return file
  14.  
  15. def ler_apostas(ficheiro):
  16. list_apostas = []
  17. for line in ficheiro:
  18. line = line.split(",")
  19. numeros = line[2].split()
  20. aposta = [line[0], line[1],numeros] # Cada aposta vai ser da forma ["Alberto Alfredo Alexandre Andrade", "Coimbra", ["01","02","03","04"]]
  21. list_apostas.append(aposta)
  22. return list_apostas
  23.  
  24. def sorteio():
  25. lista_num = []
  26. while True:
  27. rand = str(random.randint(1, 20))
  28. if len(rand) < 2:
  29. rand = "0" + rand
  30. if not rand in lista_num:
  31. lista_num.append(rand)
  32. if len(lista_num) == 4:
  33. break
  34. return lista_num
  35. def certos(aposta,sorteado):
  36. cont = 0
  37. corretos = []
  38. for num in aposta[2]:
  39. if num in sorteado:
  40. cont += 1
  41. corretos.append(num)
  42. aposta = aposta_limpa(aposta, corretos)
  43. return cont, aposta
  44.  
  45. def aposta_limpa(aposta,certos):
  46. # função formatar os certos
  47. aposta_suja = aposta[2]
  48. aposta_clean = []
  49. for i in aposta_suja:
  50. # if else por questões de leitura
  51. if i in certos:
  52. i = "(" + i + ")"
  53. aposta_clean.append(i)
  54. else:
  55. aposta_clean.append(i)
  56. aposta[2] = aposta_clean
  57. return aposta
  58.  
  59. def processar_apostas(apostas,chave):
  60. primeiro = []
  61. segundo = []
  62. terceiro = []
  63. quarto = []
  64. for aposta in apostas:
  65. num_certos,aposta = certos(aposta, chave)
  66. if num_certos == 4:
  67. primeiro.append(aposta)
  68. elif num_certos == 3:
  69. segundo.append(aposta)
  70. elif num_certos == 2:
  71. terceiro.append(aposta)
  72. elif num_certos == 1:
  73. quarto.append(aposta)
  74. return primeiro, segundo, terceiro, quarto
  75.  
  76. def ordenar_apostas(apostas):
  77. # Quicksort
  78. if len(apostas) <=1:
  79. return apostas
  80. pivot = apostas[0]
  81. prv, nxt = [], []
  82. for i in apostas[1:]:
  83. # Exemplo para clareza:
  84. # pivot = ["Alberto Alfredo Alexandre Andrade", "Coimbra", ["01","02","03","04"]]
  85. # i = ["Zefania Zacarias Zack Zuriel Zac", "Lisboa", ["(05)","(13)","12","08"]]
  86. # if "Zefania Zacarias Zack Zuriel Zac" < "Alberto Alfredo Alexandre Andrade" : etc...
  87. # Nota: Não vai comparar tamanhos! Vai comparar lexicograficamente
  88. if i[0] < pivot[0]:
  89. prv.append(i)
  90. else:
  91. nxt.append(i)
  92. return ordenar_apostas(prv) + [pivot] + ordenar_apostas(nxt)
  93.  
  94. def print_apostas(apostas):
  95. print("{:<30} {:<20} {:<20}".format("Nome", "Distrito", "Aposta"))
  96. for apostador in apostas:
  97. print("{:<30} {:<20} {:<20}".format(apostador[0],apostador[1], " ".join(apostador[2])))
  98. print()
  99.  
  100. def receita(total_apostas):
  101. total_receita = len(total_apostas)
  102. return total_receita
  103.  
  104. def distribuicao_receita(dinheiro_receita,premiados,montantes):
  105. print()
  106. print("{:<12} {:>10} {:>12} {:>10}".format("Premio", "Montante", "Premiados", "Valor"))
  107. for index,val in enumerate(premiados):
  108. mont = float(dinheiro_receita * montantes[index])
  109. if len(val) >0:
  110. valor = float(mont/len(val))
  111. else:
  112. valor = 0.00
  113. print("{:<12} {:>10.2f} {:>12} {:>10.2f}€".format(str(index+1) + "º premio", mont, len(val), valor))
  114. print()
  115. def tabela_distrito(lista_apostas_premio):
  116. dict_tabela = {}
  117. for index, apostas_premio in enumerate(lista_apostas_premio):
  118. for aposta in apostas_premio:
  119. if aposta[1] in dict_tabela.keys():
  120. dict_tabela[aposta[1]][index].append(aposta[2])
  121. else:
  122. lista_temp = [[],[],[],[]]
  123. lista_temp[index].append(aposta[2])
  124. dict_tabela[aposta[1]] = lista_temp
  125. print("{:<30} {} {} {} {}".format("Distrito", "4 Acertos", "3 Acertos", "2 Acertos", "1 Acertos"))
  126. for distrito in dict_tabela:
  127. 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])))
  128. def main():
  129. sorteada = sorteio()
  130. print("Chave Sorteada: {} ".format(" ".join(sorteada)))
  131. fich = ler_ficheiro()
  132. lista_apostas = ler_apostas(fich)
  133. first_prize,second_prize, third_prize,fourth_prize = processar_apostas(lista_apostas, sorteada)
  134. first_prize,second_prize = ordenar_apostas(first_prize), ordenar_apostas(second_prize)
  135. print("1ºs Prémios: ")
  136. print_apostas(first_prize)
  137. print("2ºs Prémios: ")
  138. print_apostas(second_prize)
  139. dinheiro = receita(lista_apostas)
  140. print("Receita: {:.2f}€".format(dinheiro))
  141. prems = [first_prize,second_prize,third_prize,fourth_prize]
  142. montes = [0.30,0.20,0.10,0.10]
  143. distribuicao_receita(dinheiro,prems,montes)
  144. tabela_distrito(prems)
  145. print("{:<30} {:>9} {:>9} {:>9} {:>9}".format("Total", len(first_prize), len(second_prize), len(third_prize), len(fourth_prize)))
  146. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement