有趣的问题,这里有一个完整的解决方案。我将从我的函数定义开始,我把它放在一个名为payday.py的文件中:def nexypayday(fromdate=None):
"""
@param fromdate: An instance of datetime.date that is the day to go from. If
not specified, todays date is used.
@return: The first payday on or after the date specified.
"""
接下来我们需要一些测试。这是为了清楚地定义我们方法的行为。因为您是python的新手,所以我将全力以赴地给您举一个使用unittests的示例。在
^{pr2}$
这是一个可运行的python模块。您可以继续将其命名为test_payday.py,并用python test_payday.py运行它。这将立即失败,并显示各种错误消息,因为我们还没有编写正确的代码。在
在玩弄了一番之后日期时间.日期工作,我已经计算出:mydatetime.day是一个月的一天,mydatetime + datetime.timedelta(days=1)将在一年中的某一天创建一个新的datetime。因此,我可以把这个放在payday.py中。在import datetime
def nextpayday(fromdate=None):
"""
@param fromdate: An instance of datetime.date that is the day to go from. If
not specified, todays date is used.
@return: The first payday on or after the date specified.
"""
if fromdate is None:
fromdate = datetime.date.today()
# while the day of the month isn't 1 or 15, increase the day by 1
while fromdate.day not in (1, 15):
fromdate = fromdate + datetime.timedelta(days=1)
return fromdate
运行单元测试,它应该是黄金。请注意,在我的测试中,我做了这样一个测试:如果我检查“下一个”发薪日是什么,它会返回自己的发薪日。将其改为返回“下一个”发薪日是留给读者的练习。在