Jump to content
ffunenga

Python e a Liga Zon Sagres

Recommended Posts

ffunenga

Olá a todos,

deixo aqui uma contas que andei a fazer por curiosidade e que talvez possam interessar a mais adeptos benfiquistas/portistas aqui no p@p. Fiz o código em 15 minutos e sem pensar muito... Acabou por ficar um bocado comprido, provavelmente consegue-se simplificar numa data de sítios.

Restam três jornadas para o final da liga Zon Sagres e o titulo de campeão pode ir tanto para o Benfica (73 pontos) como para o Porto (69 pontos). A minha curiosidade foi calcular o número de permutações possíveis entre Vitórias(+3)/Derrotas(+0)/Empates(+1) dos cinco jogos restantes:

  • (jornada 28) slb - estoril
  • (jornada 28) nacional - fcp
  • (jornada 29) fcp - slb
  • (jornada 30) slb - moreirense
  • (jornada 30) paços de ferreira - slb

Em primeiro lugar conclui-se desde já que existem 243 permutações possíveis (3^5).

A questão a ser respondida é a seguinte: qual a percentagem de casos possíveis em que cada clube ganha o campeonato? Para uma análise mais exagerada/aprofundada podemos também avaliar a distribuição de ocorrências pontuais de cada clube, mas essa ideia fica em cima da mesa para quem quiser explorar o assunto.

Resultados obtidos:

Existem 243 permutações possiveis
SLB vence campeonato: 225 (92.59 %)
FCP vence campeonato: 9 (3.70 %)
Empate técnico: 9 (3.70 %)

Atenção que estes valores só refletem o número de casos possíveis e não têm em conta a função de distribuição de probabilidades de cada jogo.

Codigo utilizado:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

class Team:
def __init__(self, points):
	self.__pts = points
	self.__reset = points
	self.__translate = {0:self.win, 1:self.draw, 2:self.loss}
def win(self):
	self.__pts += 3
def draw(self):
	self.__pts += 1
def loss(self):
	pass
def add_score(self, idx):
	self.__translate[idx]()
def get_points(self):
	return self.__pts
def reset(self):
	self.__pts = self.__reset

def main():
slb = Team(73)
fcp = Team(69)
permutations = [(i0,i1,i2,i3,i4) for i0 in range(3) for i1 in range(3)
	for i2 in range(3) for i3 in range(3)
	for i4 in range(3)]
results = []
for slb_est, nac_fcp, fcp_slb, slb_mor, pfer_slb in permutations:
	slb.add_score(slb_est)
	fcp.add_score(nac_fcp)
	slb.add_score(fcp_slb)
	fcp.add_score(fcp_slb)
	slb.add_score(slb_mor)
	fcp.add_score(pfer_slb)
	results.append((slb.get_points(), fcp.get_points()))
	slb.reset()
	fcp.reset()
counters = [0,0,0]
for slb_pts, fcp_pts in results:
	if slb_pts > fcp_pts:
		counters[0] += 1
	elif slb_pts < fcp_pts:
		counters[1] += 1
	else:
		counters[2] += 1
n = float(len(results))
print "Existem", int(n), "permutações possiveis"
print "  SLB vence campeonato:", counters[0],
print "(%.2f %%)" % (100. * float(counters[0]) / n)
print "  FCP vence campeonato:", counters[1],
print "(%.2f %%)" % (100. * float(counters[1]) / n)
print "  Empate técnico:", counters[2],
print "(%.2f %%)" % (100. * float(counters[2]) / n)

if __name__ == "__main__":
main()

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.