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 trialchen liu
3,188 PointsWrite a function named time_machine that takes an integer and a string of "minutes", "hours", "days", or "years". This d
Is that OK to write datetime.timedelta(string = integer)?
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":
duration = datetime.timedelta(days = integer* 365)
else:
duration = datetime.timedelta(string = integer)
return starter + duration
2 Answers
Chris Freeman
Treehouse Moderator 68,427 PointsThe left-side of a keyword argument is not interpreted which causes the error string is not a valid keyword argument
. If it were interpreted, then days
, in the previous statement, would also need defining.
There are two ways to use a variable as a keyword argument:
- use an
if/elif/else
statement to have a uniqueduration
assignment for each timedelta argument type - create a dict with the key
string
and valueinteger
, then use**
to expand this dict in the argument list
Post back if you need more help. Good luck!!!
Anupam Kumar
3,795 PointsWhat could be wrong with this Code
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(strin,integer):
return starter+datetime.timedelta(strin=integer)
time_machine("minutes",5)
thanks in advance
[MOD: added ```python formatting -cf]
Chris Freeman
Treehouse Moderator 68,427 PointsThere are two issues:
- the code does not account for the βyearsβ option that is not a valid argument to
timedelta
. You will need to check for this case and convert to βdaysβ - the left-side of a keyword argument assignment is always interpreted as the string **name* of a keyword argument*. It is never evaluated directly as a variable.
You can use the form
# create dict with value of strin used as key
kwargs = {strin: integer}
datetime.timedelta(**kwargs)
Post back if you need more help. Good luck!!!