标题中的问题。我正在编写一个程序,要求用户输入mm / dd / yy格式的日期,如果仅在2013年验证该日期,然后以此格式打印日期:2013年7月1日。我我只是得到一个逻辑错误,因为即使年份不是2013年,该程序仍会打印日期。这是我的代码:
import datetime
def main():
def date_method(user_date):
date_list = user_date.split('/')
month = int(date_list[0])
day = int(date_list[1])
year = 2000 + int(date_list[2])
try:
datetime.datetime.min = 1/1/2013
datetime.datetime.max = 12/31/2013
the_date = datetime.date(month, day, year)
correct_date = "True"
return the_date, correct_date
except ValueError as err:
print(err)
the_date = 1/1/1
correct_date = "False"
return the_date, correct_date
correct_date = "False"
while correct_date == "False":
user_date = str(input("Please enter a date in the month/day/year format: mm/dd/yy. "))
the_date, correct_date = date_method(user_date)
if correct_date == "True":
print("Date: ", datetime.date.strftime(the_date, "%B %d, %y"))
main()
我认为我关闭的是我的datetime.datetime.min和datetime.datetime.max变量。
答案 0 :(得分:0)
设置datetime.datetime.min
和datetime.datetime.max
对我来说就像全局变量一样。更好的解决方案是简单地检查它是否在一个范围内。
import datetime
def date_method(user_date):
date_list = user_date.split('/')
month = int(date_list[0])
day = int(date_list[1])
year = 2000 + int(date_list[2])
the_date = datetime.date(year, month, day)
if datetime.date(2013, 1, 1) <= the_date <= datetime.date(2013, 12, 31):
return the_date, True
else:
print("Date entered is not in the year 2013.")
return datetime.date(1, 1, 1), False
def main():
correct_date = False
while correct_date == False:
user_date = input("Please enter a date in the month/day/year format: mm/dd/yy. ")
the_date, correct_date = date_method(user_date)
if correct_date:
print("Date: ", datetime.date.strftime(the_date, "%B %d, %y"))
main()
代码中还有一些错误:
"True"
和"False"
而不只是True
和False
。datetime.date(year, month, day)
而不是datetime.date(month, day, year)
date_method
内定义main()
?/
无法用于示例中的日期。你真正在做的只是划分一个数字,Python将该数字解析为日期。 (这与你的日期完全不同)答案 1 :(得分:0)
Python 内置类型是不可变,因此如果要验证年份只是转换为datetime对象并检查{{1},则无法设置任何属性}}属性为.year
。
>= 13
即使你if mn_year <= dt.year <= mx_year
可以是一个方程而不是约会。
如下所示:
1/1/2013
如果您想要min和max,请使用上面的mn_year和mx_year。您不需要转换为整数,您可以使用字符串使用datetime.strptime。您也不需要将输入转换为str,这正是它的本质。当用户输入不正确的数据时,也会在try中拆分和解包user_date = input("Please enter a date in the month/day/year format: mm/dd/yy. ")
def date_method(user_date):
try:
mn, dy, year = user_date.split('/')
the_date = datetime.datetime.strptime("{} {} {}".format(mn, dy, year), "%d %m %y")
if the_date.year >= 2013:
correct_date = "True"
return the_date.year, correct_date
except ValueError as err:
print(err)
....
字符串。