Python输入起止日期,如:input=[20200120,20200519]如何输出期间内所有文本?如下图所示:思考五秒~54321我们看代码fromdatetimeimportdatetime,timedeltadefcreate_date_range(inp):result_list=[]sta_day=datetime.strptime(str(inp[0]),'%Y%m%d')end_day=datetime.strptime(str(inp[1]),'%Y%m%d')dlt_day=(end_day-sta_day).days+1foriinrange(dlt_day):tmp_day=sta_day+timedelta(days=i)tmp_day_txt=tmp_day.strftime('%Y%m%d')result_list.append(tmp_day_txt)returnresult_listinput=[20200120,20200519]print(create_date_range(input))我们来看看思路和将输入的开始和结束日期数字输出为文本,分三步:创建一个空列表;计算答案并将其放入空列表中;输出列表。但是这个在回答howtoputanelephantintherefrigerator的时候好像怎么回答,分三步:打开冰箱门;把大象放进去;关上冰箱门。好像不说,关键是第二步怎么执行。>这道题的本质很简单:从开始日期开始,一个一个记下日期,直到结束日期。遇到“一个接一个”,你应该想到一个循环。输入循环开始日期[0]循环结束日期输入[1]循环次数为:两个日期之间的天数=结束日期-开始日期+1但是我们不能直接把开始日期和结束日期直接相减,因为它们还不是日期,而是数字。20200519-20200120的结果是399,但是两天实际间隔120天。对于初学者来说,跨月是一件很烦人的事情,不过不用担心,datetime模块可以让你每个月都离得很近。fromdatetimeimportdatetime,timedelta导入datetime模块时,导入timedelta计算时间间隔。Python写函数很简单,def:defcreate_date_range(inp):def是定义函数的关键字,相当于哈利波特的咒语,可以直接从你的电脑机箱里召唤出飞天扫帚,create_date_range是函数名,有点像扫帚的名字。好东西一定要有名字,否则不能用。用下划线分隔的目的是为了一眼就能认出来,降低我们的识别成本。毕竟人写的代码可以喂给机器吃,还要给人看。函数是输入和输出之间的桥梁,在这里,输入是inp,输出是什么?是result_list,所以用:returnresult_list来表示输出结果。为了计算输出的result_list,我们必须先在函数中设置一个空列表:result_list=[]那么我们怎么知道函数已经结束了呢?缩进告诉你,所以我们有这样一个结构:defcreate_date_range(inp):result_list=[]returnresult_list当你看到def下面的语句不再缩进时,那么def定义的函数就结束了。如果你是Python的初学者,请仔细看看这个架构,它几乎是Python的全部生命力。终于到了把大象塞进冰箱的时候了,也就是把日期一个一个记下来。分为两步:第一步是计算第一个日期和最后一个日期之间的天数,用于确定从开始日期开始输出的周期数;thenumberofdaysbetween=enddate-startdate+1我们必须将开始日期和结束日期都转换为日期才能减去它们,所以我们先计算开始日期:sta_day=datetime.strptime(str(inp[0]),'%Y%m%d')在我们的函数中,输入是inp,inp[0]代表列表的第一个元素,也就是20200120。你可能会问,我们的输入不就是输入吗,为什么它会变成inp吗?是的,但是inp和input不同,input是函数外的东西,函数内部只认inp。inp是函数的参数,接收外部输入,在函数内部进行处理。至于外部输入是输入还是输出,对函数本身来说并不重要,函数中的一切都是通过参数inp传递的。str()也是一个函数,小巧玲珑,可以将数字之类的对象转换成文本:如果你要问为什么要把好的数字转换成文本,那就怪datetime这个特性:它只把文本转换成日期,毕竟,如果转换成日期,只能计算日期间隔。实现是通过datetime.strptimesta_day=datetime.strptime(str(inp[0]),'%Y%m%d')这里'%Y%m%d'是告诉datetime要转换成什么样的文本adate,'%Y%m%d'表示要转换的日期格式为yyyymmdd格式,即文本'20200120'要转换成日期格式。同理,结束日期计算如下:end_day=datetime.strptime(str(inp[1]),'%Y%m%d')然后,一一重复的次数,即循环步骤dlt_day很简单:dlt_day=(end_day-sta_day).days+1你只需要记住这里.days计算的是datetime格式的天数,减去end_day和sta_day这两个datetime类型的字段,.days计算的是intervals之间的天数,+1计算循环步长,Simpleandelegant,Simplebutelegant。第二步是循环。和函数一样,Python的循环只有一行代码,像这样:foriinrange(dlt_day):for和def一样,是一个关键字,告诉Python我要重复这个工作,重复多少次我应该重复吗?上面的语句告诉你它从0到dlt_day结束一个一个重复。它是简单而优雅的,简单而优雅。什么样的劳动是重复的?缩进告诉您当您看到for下面的语句不再缩进时循环结束。这里的循环分为三步:第一步是逐条计算出要写入的日期tmp_day,可以理解为临时日期,写完就放一边,不用操心.tmp_day=sta_day+timedelta(days=i)通过开始日期+间隔天数实现,第一次循环标记i=0,即开始日期+0天(2020年1月20日),第二次i=1,也就是开始日期+1天(2020年1月21日)...最后写到2020年5月19日。实现方法是通过datetime中的strftime方法tmp_day_txt=tmp_day.strftime('%Y%m%d')同样,这里的'%Y%m%d'是告诉datetime的strftime方法用什么样的字符convert,参考上面的,'%Y%m%d'代表了一个像"20200120"这样的格式。第三步,通过.append方法记下临时日期tmp_day,通过循环,将它们一个一个地累加到result_list中,最后stud输出结果。实用代码和运行结果
