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