Last active
September 9, 2021 17:33
-
-
Save ecounysis/bc0d8591196cf8e8682f0e9d2603c7da to your computer and use it in GitHub Desktop.
a simple simulation of a baseball game using on-base average as an input
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import random | |
def at_bat(hitter): | |
if (random.random() < hitter['avg']): | |
return 'ON' | |
else: | |
return 'OUT' | |
def inning(): | |
global hitters, runs, next_batter | |
outs = 0 | |
ob = 0 | |
while (outs < 3): | |
if (at_bat(hitters[next_batter])=='ON'): | |
ob+=1 | |
if (ob>=4): | |
ob=3 | |
runs+=1 | |
else: | |
outs+=1 | |
next_batter+=1 | |
next_batter=next_batter%9 | |
hitters = {} | |
runs = 0 | |
next_batter = 0 | |
def game(): | |
for i in range(9): | |
inning() | |
r = runs | |
reset() | |
return r | |
def reset(): | |
global runs, next_batter | |
runs = 0 | |
next_batter = 0 | |
def simulate(games): | |
return sum([game() for i in range(games)])/games | |
hitters = [dict(avg=0.3) for i in range(9)] | |
# good batter at cleanup | |
hitters[3]['avg'] = 0.6 | |
simulate(10000) | |
# good batter at top of order | |
hitters[0]['avg'] = 0.6 | |
hitters[3]['avg'] = 0.3 | |
simulate(10000) | |
# good batter last | |
hitters[8]['avg'] = 0.6 | |
hitters[0]['avg'] = 0.3 | |
simulate(10000) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment