A closed-form answer like "0.9^17 is about 16.7%" is easy to get wrong, so it is worth checking it against a brute-force simulation. Here is a tiny Monte Carlo check you can run yourself.
import random
random.seed(17)
def perfect_season(p, games=17):
return all(random.random() < p for _ in range(games))
for p in (0.80, 0.90):
n = 200_000
rate = sum(perfect_season(p) for _ in range(n)) / n
print(f"p={p:.2f} simulated={rate:.2%} exact={p**17:.2%}")
With that seed I get roughly 2.27% for p = 0.80 (exact 2.25%) and 16.6% for p = 0.90 (exact 16.7%). The simulation agrees with the formula to within sampling noise, which at 200,000 trials is about +/-0.03 percentage points for the 2% case and +/-0.08 for the 17% case.
Why bother simulating?
The formula assumes every game is independent with the same win probability. Real seasons are not: opponents vary, injuries accumulate, and strength changes over the year. Once you drop those assumptions the closed form stops being exact, but the same few lines of simulation keep working. You can give each game its own probability and run the loop again:
def perfect_season_varied(probs):
return all(random.random() < p for p in probs)
That is the core idea behind season simulators: draw each game, tally the record, and repeat thousands of times. If you want to play with a roster-building version in the browser, 17-0 Game is a free sim where you draft a team from random NFL teams and eras and see whether it can go 17-0.
Top comments (0)