Scripting the National Lottery: Part One
25 March 2008
I had a chat with an older lady about the British National Lottery. She buys six tickets for each draw, one for everyone in her family.
So the question is what she is getting in return for the ticket price?
My theory is that she and her family are getting the excitement of the draw which brings everyone around the TV and adds to the Saturday atmosphere, this is more important than the chance of winning, which on cold rational grounds, is not very high at all.
So according to this theory, their enjoyment from the lottery is not directly dependent on the quantity of tickets bought. It does not make a massive difference to the enjoyment whether her family buys six, three or just one ticket.
So one might argue that she might be better off to just buy one ticket and spend the other fiver on alcohol!
Of course I am a half-time student and half-time web developer, and she is a much richer person. So our preferences are different, she can afford to buy the tickets and the alcohol!
Moving on, using a little Python we can work out how many draws there have been since John Major introduced it.
def saturday_draws():
"""Approximate way to find out number of Saturday draws."""
import datetime
start = datetime.datetime(1994, 11, 19)
end = datetime.datetime.now()
return (end - start) / 7
def wednesday_draws():
"""Approximate way to find out number of Wednseday draws."""
import datetime
start = datetime.datetime(1997, 2, 5)
end = datetime.datetime.now()
return (end - start) / 7
It is actually a couple short, as they have had a few extra draws for special occasions.
Andrew pointed me to a .csv file provided by the National Lottery which contains all the results. So we can be far more exact.
So I created a little Python module that parses the file and tells you how many times you have won with a set of numbers. The assumption is that you have played £1 from the start on every draw using the same numbers.
If you want to play along at home, start by grabbing the files:
wget http://www.national-lottery.co.uk/player/files/Lotto.csv
wget http://www.zeth.me.uk/python/lotto.txt -O lotto.py
So imagine our lucky numbers are 3 5 14 22 30 10, then we can do the following:
python lotto.py 3 5 14 22 30 10
This will tell you what you have won in the last decade and a half.
That is the most basic approach, in a future post, we will try to use the module to do some more advanced calculations.




1 Dirk R. Gently says...
alcohol = no
Posted at 9:32 p.m. on March 25, 2008
2 Kolin says...
Why does the script ask us to choose a bonus ball? when picking lottery number you only pick six and the bonus ball can be matched to any.
Posted at 10:37 a.m. on March 26, 2008
3 Zeth says...
Thanks for that.
I have never played and I clearly I have no idea.
Hopefully I have it correct now?
Here are the winning possibilities:
Match 3 main numbers Match 4 main numbers Match 5 main numbers Match 5 main numbers plus the bonus number Jackpot - Match 6 main numbers
Which gives the following odds:
1 in 57 1 in 1,033 1 in 55,492 1 in 2,330,636 1 in 13,983,816
Posted at 1:42 p.m. on March 26, 2008