• Zeth will be attending PyCon UK on the 12th to 14th September 2008.

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.

Discuss this post - Leave a comment

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


What do you have to say?

Show Editing Help


PyCon UK

About

Hello, my name is Zeth, I'll be your host here.

Command Line Warriors is about taking control of your own technology, it looks at our experiences of computing; especially using GNU/Linux, the Python programming language, the command-line and issues such as techno-ethics, best practices and whatever is cool now. If you take control of your technology then you are a Warrior too!

This site is your site too which means that you can contribute and get involved. You can leave comments using the facility provided. For me, the comments and discussions are by far the best part of the site. So please do have your say!

Latest Discussions

deesha

September 8, 2008
hey all, i just wanted to check the other stuf if nay1 can help me what i want is i have to convert the line starting with my function name ...
Email Syntax Check in Python

Daniel Black

September 3, 2008
Hey, sounds good already. There's another Python script for command-line 140-character-messaging (won't call it "tweeting" for obvious reasons), Tweety Py, that's currently languishing. Not, I think, because the developer's disinterested, ...
Using new social networking service Identi.ca from the command line

Antonio Araujo

September 2, 2008
Dear friends, has anyone built debian packages of db xml 2.4.13? Best regards Antonio
Native XML storage with Berkeley DB XML - part one

Zeth

September 1, 2008
Thanks everyone for your different solutions, absolutely fantastic. I have tried them all. The one from Ciaran McCreesh was the one I was subconsciously groping for.
Sisu and typing unicode in GNOME

andylockran

September 1, 2008
In ubuntu, I do ctrl, and the functions to the right of my keyboard for extra characters. Such as: alt gr + ; + e for é I'll post more ...
Sisu and typing unicode in GNOME

Jinks

September 1, 2008
I am from Germany but i use an US-layout keyboard since that's a lot easier for most my programming needs. Now, having to also write the occassional german letter or ...
Sisu and typing unicode in GNOME

Toni

September 1, 2008
Hi, You might want to add an xkb keymap. Make backups before you begin ;) And sorry about formatting. in /usr/share/X11/xkb/symbols/gb, after "intl", add this: partial alphanumeric_keys xkb_symbols "intl_fi" { ...
Sisu and typing unicode in GNOME

Ciaran McCreesh

September 1, 2008
On a UK keyboard you do alt-gr+[ followed by a to get ä. You don't need the control key at all.
Sisu and typing unicode in GNOME

name

September 1, 2008
Hi!,
List files recursively by modified time

name

September 1, 2008
Hello!,
List files recursively by modified time

Leif

September 1, 2008
On my Norwegian keyboard, the diaeresis is easily accessible, like on Jani's Finnish one. It's one of the few keys that doesn't advance the cursor, along with the tilde, circumflex ...
Sisu and typing unicode in GNOME

Lornix

September 1, 2008
ä <= compose, ", a ö <= compose, ", o å <= compose, o, a Ä <= compose, ", A Ö <= compose, ", O Å <= compose, o, A ...
Sisu and typing unicode in GNOME

name

September 1, 2008
Good day!,
List files recursively by modified time