Spooky fun with Python and Datetime
It appears that Halloween and all its fun accouterments will be downsized this year in my neighborhood. However, in the spirit of the season I tried out this challenge from edabit.com :
Given the month and year as numbers, return whether that month contains a Friday 13th.The return should be true or false, and here are the examples supplied:has_friday_13(3, 2020) ➞ Truehas_friday_13(10, 2017) ➞ Truehas_friday_13(1, 1985) ➞ False
Datetime and all its associated classes have been a sore spot of mine, so this felt like a perfect challenge to learn in a fun way. I decided to try solving the challenge in 2 different ways: strptime() and strftime(). What’s the difference? Strptime (or string parsed time) is used to convert a string to a datetime object. Strftime (or string from time) is used to convert a time to a string.
To solve using string parsed time, I started by importing datetime and calendar. The function parameters are the integer month and year, so I created a string using the month and year (the day is “13”). Then I used datetime.strptime() to convert the string to a datetime object, and used the weekday function to determine the day of the week. The 0 is Monday and 6 is Saturday. That integer is then used with the calendar module to convert the integer to the day, which is then compared to “Friday”. Here’s my code:
And I tried out the supplied examples:
To solve using string from time, I again needed to import datetime and from datetime date. In my first version I used a string date as the input parameter and used a format code (%A is the directives’ weekday as a full name) to compare to “Friday”:
Then I refactored the code to accept the month and year as integers:
After more refactoring, the function became a one-liner!
(And the same results as above — 2 Trues and 1 False.)