Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Python Functional Python Functional Workhorses Map and Filter

neoty888
neoty888
23,973 Points

Functional Python, Challenge Task 3

Challenge Task 3 of 3

Finally, make a variable named birth_dates. Use map() and filter(), along with your two functions, to create date strings for every datetime in birthdays so long as the datetime is more than 13 years old.

Having problems with the last task. Not sure how to use map/filter. Any assistance would be great. Thanks.


import datetime

birthdays = [ datetime.datetime(2012, 4, 29), datetime.datetime(2006, 8, 9), datetime.datetime(1978, 5, 16), datetime.datetime(1981, 8, 15), datetime.datetime(2001, 7, 4), datetime.datetime(1999, 12, 30) ]

today = datetime.datetime.today()

def is_over_13(dt): # compare total days delta = today - dt return delta.days >= 4745

def date_string(dt): return dt.strftime("%B %d")

birth_days = list(map((date_string(dt)), birthdays).filter((is_over_13(dt)), birthdays))

birthdays.py
import datetime

birthdays = [
    datetime.datetime(2012, 4, 29),
    datetime.datetime(2006, 8, 9),
    datetime.datetime(1978, 5, 16),
    datetime.datetime(1981, 8, 15),
    datetime.datetime(2001, 7, 4),
    datetime.datetime(1999, 12, 30)
]

today = datetime.datetime.today()


def is_over_13(dt):
    # compare total days
    delta = today - dt
    return delta.days >= 4745

def date_string(dt):
    return dt.strftime("%B %d")

birth_days = list(map((date_string(dt)), birthdays).filter((is_over_13(dt)), birthdays))

1 Answer

You will need to change the variable name to birth_dates. Next we will put the filer function inside the map function since we only want to map birthdays that are over 14. You don't include the parameters in the function as the first argument. I probably butchered that sentence. Basically you don't need "(dt)". For both map and filer, you need to put just the name of the function as the first argument and then the iterable that you want to pass as an argument to the function as the second argument. In the code below, the filter function is used as the second argument to return only the birthdays that are over 13 to be used in the date_string function.

birth_dates = map(date_string, filter(is_over_13, birthdays))