如何解决如何通过函数运行日期字符串列表,并将每个项目的结果作为一个字符串字符串返回?
我需要编写一个程序来验证给定日期的列表。验证列表中的每个日期都必须返回“-”(如果有效),或者返回年份的末尾数字(如果无效)。这些返回值需要作为一个字符串附加到“ Results =“”“后面,以解决问题。
所以我将日期验证的时间缩短了,但是现在我不得不尝试找出如何通过验证程序正确运行列表程序,以便返回每个项目以创建新的结果字符串
到目前为止,我有这个:
def listofDates (): #this is the program my teach gave us. The validation included seemed confusing to me.
DateList = []
for mon in range (1,13):
Yr,Feb = 2001,0
if (mon == 2):
Feb = 2
if Yr%400==0 or Yr%100!=0 and Yr%4==0: # if leap year,make Feb subtract one less day
Feb = 1
MonSt = "{0:0>2}".format(mon)
DateList = DateList + [MonSt +"/00/"+str(Yr)] + [MonSt +"/01/"+str(Yr)]
ShortMon = (mon-1)%7%2 # (teacher comment) Equals 1 or 30 (or less) day months and 0 for 31 day months
MaxDay = 31 - ShortMon - Feb
DateList = DateList + [MonSt +"/"+ str(MaxDay+1) +"/"+ str(Yr)] + [MonSt +"/"+ str(MaxDay) +"/"+str(Yr)]
DateList = DateList + ["02/29/1900"] + ["02/29/2000"]
DateList = DateList + ["00/29/2000"] + ["02/29/2400"]
DateList = DateList + ["13/29/2000"] + ["12/31/2500"]
DateList = DateList + ["01/01/2501"] + ["02/28/0001"]
DateList = DateList + ["02/28/0000"] + ["02/29/400"]
return (DateList)
def dayMonth_is_valid(month,day,year):
if month in [1,3,5,7,8,10,12]:
return 1 <= day <= 31
if month in [4,6,9,11]:
return 1 <= day <= 30
if month == 2:
if year % 400 == 0:
return 1<=day<=29
if year % 4 == 0:
if year % 100 == 0:
return 1 <= day <= 28
else:
return 1 <= day <= 29
else:
return 1<= day <=28
def year_is_valid(year):
return 1 <= year <=2500
def date_is_valid(date):
month,year = map(int,date.split("/"))
if dayMonth_is_valid(month,year) and year_is_valid(year)==True:
print ("-")
else:
print (str(year%10)) #is there a better way to do this?
def validate_date_list():
dates = listofDates()
Results = ""
for date in dates:
Results.append (date_is_valid(date))
validate_date_list()
我实际上并没有完成if的结果部分,因为我什至无法获得通过验证程序运行的日期。我也知道不能附加字符串。我当时在想将结果列表,然后将其添加然后加入列表(但这似乎需要很多步骤)
所以我的验证程序可以正常工作,但是我不知道如何通过它运行该列表。 这和格式有关吗? 是否将“日期”作为列表开头?
此外,对于返回的“-”或str(year%10):这是完成此步骤的最佳位置吗? 还是应该返回true / false,然后在主函数中生成字符串?
如何通过“ date_is_valid()”将“日期”列表中的每个项目作为适当的变量运行以完成该功能?
我研究了列表理解和陈述的不同方法,但无法弄清楚。
解决方法
您需要 return
而不是打印它们。另外,您可以使用str[-1]
而不是%10
返回年份的结束数字。
def date_is_valid(date):
month,day,year = map(int,date.split("/"))
if dayMonth_is_valid(month,year) and year_is_valid(year)==True:
return ("-")
else:
return (str(year)[-1])
def validate_date_list():
dates = ListofDates()
Results = ""
for date in dates:
Results += date_is_valid(date)
validate_date_list()
,
最好从date_is_valid
返回True或False,然后将join
方法与generator一起使用:
dates = ListofDates()
results = ''.join('-' if date_is_valid(date) else date[-1] for date in dates)
顺便说一句,表达式== True
绝对不必要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。