验证 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]:
。但是你完全忘记了二月,这还要看当年是不是闰年
我有两个问题 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]:
。但是你完全忘记了二月,这还要看当年是不是闰年