微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过函数运行日期字符串列表,并将每个项目的结果作为一个字符串字符串返回?

如何解决如何通过函数运行日期字符串列表,并将每个项目的结果作为一个字符串字符串返回?

我需要编写一个程序来验证给定日期的列表。验证列表中的每个日期都必须返回“-”(如果有效),或者返回年份的末尾数字(如果无效)。这些返回值需要作为一个字符串附加到“ 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 举报,一经查实,本站将立刻删除。