NukeX Giveaway — How I chose the winner with Python.

Categories Comp Newsletter, For Patreon Supporters, Python

Congratulations to Andriy Koval for winning the NukeX license giveaway! As a bonus for being a Patreon supporter, I wanted to show you the thought process & Python script I wrote to help me choose a winner.

To start, I was able to download a CSV report for newsletter subscribers who entered the giveaway, as well as another CSV report for current Patreon supporters. I then needed to find an easy way to get all the email addresses from both CSV’s into a Python-friendly list. I’d never had to use Python to navigate a CSV file before, so it was a fun learning experience!

As you know, subscribers of Ben’s Comp Newsletter could enter this draw simply by clicking the sign-up link in Issue 064, and since you’re a Patreon Supporter, you got two entries! However, there was no guarantee that all Patreon supporters would click the link in the newsletter for that second entry, so I also wanted to code up a solution to account for that.

Lastly, this draw had to be completely random. Rather than closing my eyes, scrolling through a list, and putting my finger on the screen to make my selection, I wanted the computer to choose for me to remove any human bias.

Check out the final code below, commented for clarity.

# Import the modules we need.
import csv
import random

# Create lists to hold email addresses.
newsletter = []
patreon = []

# Define filepaths for the CSV's on disk.
newsletter_csv_file = open("C:\\Users\\benmc\\Desktop\\newsletter.csv", "r")
patreon_csv_file = open("C:\\Users\\benmc\\Desktop\\patreon.csv", "r")

# Open the newsletter CSV, and add all the addresses from the "email address" column (column A).
for emails in csv.reader(newsletter_csv_file, delimiter=','):
	newsletter.append(emails[0])
# The first item in the row is the header, "email address", so we can remove it.
newsletter.pop(0)

# Same deal for the Patreon members CSV, except the email addresses are in column B in this instance.
for emails in csv.reader(patreon_csv_file, delimiter=','):
	patreon.append(emails[1])
patreon.pop(0)


# List to hold all email addresses.
email_list = []

# Remove Patreon subscribers from newsletter list.
print(str(len(set(patreon).intersection(newsletter)))+" Patreons were duplicates, and have been removed.")
for email in set(patreon).intersection(newsletter):
	newsletter.remove(email)

# Add Newsletter subscribers to the email list.
email_list.extend(newsletter)

# Add patreon subscribers into the same list, twice.
email_list.extend(patreon)
email_list.extend(patreon)


# Randomly pick a winner.
print("\nThe winner of the NukeX license is: "+str(random.choice(email_list))+"!")


"""
-----  RESULT  -----

24 Patreons were duplicates, and have been removed.

The winner of the NukeX license is: <email address hidden for privacy>
"""