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 Dates and Times in Python (2014) Let's Build a Timed Quiz App Harder Time Machine

Harder Time Machine Code Problem

I am having trouble figuring out what is wrong with my code. I looked at a previous solution posted on the forums, and their solution worked; however, I can't figure out what their code is doing differently. They are pretty similar. When I call time_machine(5, 'years'), I get the an answer that is a couple of days off (I'm assuming for leap years?). Here is the code to the solution that worked:

import datetime

starter = datetime.datetime(2015, 10, 21, 16, 29)

def time_machine(n, string):
  if string == 'minutes': return starter + datetime.timedelta(minutes = n) 
  if string == 'hours': return starter + datetime.timedelta(hours = n) 
  if string == 'days': return starter + datetime.timedelta(days = n) 
  if string == 'years': return starter + datetime.timedelta(days = n*365)

  return starter + datetime.timedelta(string = n)
time_machine.py
import datetime

starter = datetime.datetime(2015, 10, 21, 16, 29)

# Remember, you can't set "years" on a timedelta!
# Consider a year to be 365 days.

## Example
# time_machine(5, "minutes") => datetime(2015, 10, 21, 16, 34)

def time_machine(integer, string):
  if string == 'years':
    return starter + datetime.timedelta(days = 365*integer)
  if string == 'days':
    return starter + datetime.timedelta(days = integer)
  if string == 'minutes':
    return starter + datetime.timedelta(minutes = integer)
  if string == 'seconds':
    return starter + datetime.timedelta(seconds = integer)

1 Answer

Jeff Wilton
Jeff Wilton
16,646 Points

The big difference with your code is that you are evaluating 'seconds' instead of 'hours'. If you switch that, then it should pass. You are correct that there is a critical flaw in this code because it is not accounting for leap years, but hey - its just a practice assignment! :)

Thank you! For some reason my mind completely blanked there.