-
Notifications
You must be signed in to change notification settings - Fork 1
/
nhlPicker.py
75 lines (62 loc) · 2.28 KB
/
nhlPicker.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import urllib2
import json
# Top 16 Teams Make the playoffs
# Odds - 31st, 30th, 29th, 28th, 27th, 26th, 25th, 24th, 23rd, 22nd, 21st, 20th, 19th, 18th, 17th
odds = [0.185, 0.135, 0.115, 0.095, 0.085, 0.075, 0.065, 0.06, 0.05, 0.035, 0.03, 0.025, 0.02, 0.015, 0.01]
class Team():
def __init__(self, name, points, gamesPlayed, leagueRank):
self.name = name
self.points = points
self.gamesPlayed = gamesPlayed
self.pointPercentage = float(points)/float(gamesPlayed)
self.leagueRank = int(leagueRank)
self.index = -1
self.pick1 = 0
self.pick2 = 0
self.pick3 = 0
self.notTop3 = -1
#Calculate the odds of winning the 2nd overall pick
def calculate2(self):
for team in teams:
if team.index != self.index:
self.pick2 += team.pick1 * (self.pick1/(1-team.pick1))
#Calculate the odds of winning the 3rd overall pick
def calculate3(self):
for team1 in teams:
for team2 in teams:
if team1.index != self.index and team1.index != team2.index and team2.index != self.index:
self.pick3 += team1.pick1 * team2.pick2 * (self.pick1/(1-team1.pick1-team2.pick2))
#Calculate the odds of not ending up with the 1st, 2nd or 3rd overall pick
def calculateNotTop3(self):
self.notTop3 = 1 - (self.pick1 + self.pick2 + self.pick3)
def display(self):
print(str(self.index+1) + '. ' + self.name + ' - ' + str(self.points))
print("1st - " + str(self.pick1))
print("2nd - " + str(self.pick2))
print("3rd - " + str(self.pick3))
print("Not Top 3 - " + str(self.notTop3))
webUrl = urllib2.urlopen('https://statsapi.web.nhl.com/api/v1/standings')
if (webUrl.getcode() == 200):
data = json.loads(webUrl.read())
teams = []
for record in data['records']:
for teamRecord in record['teamRecords']:
if int(teamRecord['wildCardRank']) > 2:
teams.append(Team(teamRecord['team']['name'], teamRecord['points'], teamRecord['gamesPlayed'], teamRecord['leagueRank']))
teams = sorted(teams, key=lambda team: (team.pointPercentage, -team.leagueRank))
if (len(teams) != len(odds)):
print('Mismatch this script must be out of date')
else:
i = 0
for team in teams:
team.index = i
team.pick1 = odds[i]
i += 1
for team in teams:
team.calculate2()
for team in teams:
team.calculate3()
team.calculateNotTop3()
team.display()
else:
print('Could not get data.')