Question
I keep running into the error : The call daytime(datetime.datetime(2015, 6, 5, 7, 0),daycycle) returns None, not True. Implement daytime Read the specification of the
I keep running into the error :
The call daytime(datetime.datetime(2015, 6, 5, 7, 0),daycycle) returns None, not True.
Implement daytime
Read the specification of the function daytime in the module funcs. Implement this function according to its specification.
This function is very similar to sunset from the previous exercise, except that it now asks you to determine whether a datetime object is between sunrise and sunset (e.g. happened during the day). That means you will need to extract both the sunrise and sunset this time and compare them to given time value.
Note that the time value may or may not have a time zone attached to it. If it has a time zone attached, you must give both sunrise and sunset a time zone in order to be able to compare them. The time zone is stored in the daycycle dictionary using the key timezone (that value is a string). If time does not have a time zone, you can assume it has the same time zone as sunrise and sunset.
def daytime(time,daycycle):
"""
Returns True if the time takes place during the day, False otherwise (and returns None if a key does not exist in the dictionary).
A time is during the day if it is after sunrise but before sunset, as indicated by the daycycle dictionary.
A daycycle dictionary has keys for several years (as strings). The value for each year is also a dictionary, taking strings of the form 'mm-dd'. The value for that key is a THIRD dictionary, with two keys "sunrise" and "sunset". The value for each of those two keys is a string in 24-hour time format.
For example, here is what part of a daycycle dictionary might look like:
"2015": {
"01-01": {
"sunrise": "07:35",
"sunset": "16:44"
},
"01-02": {
"sunrise": "07:36",
"sunset": "16:45"
},
...
}
In addition, the daycycle dictionary has a key 'timezone' that expresses the timezone as a string. This function uses that timezone when constructing datetime objects using data from the daycycle dictionary. Also, if the time parameter does not have a timezone, we assume that it is in the same timezone as the daycycle dictionary.
Parameter time: The time to check
Precondition: time is a datetime object
Parameter daycycle: The daycycle dictionary
Precondition: daycycle is a valid daycycle dictionary, as described above
"""
# HINT: Use the code from the previous exercise to get sunset AND sunrise
# Add a timezone to time if one is missing (the one from the daycycle)
try:
tz_cycle = daycycle['timezone']
if time.tzinfo is not None:
year1 = time.strftime('%Y')
date1 = time.strftime('%m-%d')
sunrisetime = daycycle[year1][date1]['sunrise']
sunsettime = daycycle[year1][date1]['sunset']
y = year1 + '-' + date1
y1 = datetime.datetime.strptime(y, '%Y-%m-%d')
y3 = datetime.datetime.strptime(sunrisetime, '%H:%M').time()
y2 = datetime.datetime.combine(y1, y3)
x = y2.isoformat()
y4 = datetime.datetime.strptime(sunsettime, '%H:%M').time()
y5 = datetime.datetime.combine(y1, y4)
x1 = y5.isoformat()
back_sunrise = str_to_time(x, tz_cycle)
back_sunset = str_to_time(x1, tz_cycle)
if back_sunrise < time < back_sunset:
return True
else:
return False
except KeyError:
return None
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started