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>
"""