Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

ffunenga

Python e a Liga Zon Sagres

Mensagens Recomendadas

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()

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.