验证 python 中的日期 mm/dd/yyyy 表单

Validating a Date mm/dd/yyyy form in python

我有两个问题 1_ 我无法使用此表格 05/04/2011 一直给我一个错误 2_ 我不能阻止用户使用负数。 这是代码:

def main():
    # ask the user for a date as a string in the form mm/dd/yyyy
    date = input("Please enter a date in form mm/dd/yyyy: ")
    months, days, years = date.split("/")

    # ask about the month 
    m = range(1,13)
    months = m[eval(months)-1]
    # april have only 30 days
    if months in range(4,5):
        D = range(1,31)
        Days = D[eval(days)-1]
    # june have only 30 days
    elif months in range(6,7):
        D = range(1,31)
        Days = D[eval(days)-1]
    # september have only 30 days
    elif months in range(9,10):
        D = range(1,31)
        Days = D[eval(days)-1]
    # november have only 30 days 
    elif months in range(11,12):
        D = range(1,31)
        Days = D[eval(days)-1]
    # ask about days 
    d = range(1,32)
    days = d[eval(days)-1]
    # ask about the years
    y = range(1,2017)
    years = y[eval(years)-1]
    if months <= 0:
        print("you can't use a nagatve number")
    if days <= 0:
        print("you can't use negaive numbers")
    if years <= 0:
        print("you can't use negaiive numbers")
    print(months,"/",days,"/",years,"is a valid date")
main()

你应该看看 Python datetime 库,特别是 datetime.strptime(date_string, format)

您可以使用:

而不是自己编写错误的日期解析器
datestring = input("Please enter a date in form mm/dd/yyyy: ")
try:
    date = datetime.strptime(datestring, '%m/%d/%Y')
except ValueError:
    print("Invalid date entered!")

您的代码包含一些非常糟糕的做法,例如,您永远不应该使用 eval 来简单地将字符串计算为整数,而您到处都在使用它。而不是:

m = range(1,13)
months = m[eval(months)-1]

你可以简单地写成:

months = int(months)

months in range(4,5) 等代码可以重写为 months == 4,但您也可以使用 if months in [4, 6, 9, 1]:。但是你完全忘记了二月,这还要看当年是不是闰年