继续在日期时间 Python 中不起作用
Continue Does Not Work in Python with datetime
我正在尝试编写一个程序来打印两个给定日期之间的所有星期二,并排除劳动节和感恩节假期。然而,当我使用继续跳转时,它打破了循环。
import datetime
def getDates():
StartDate = datetime.datetime(2020, 1, 1)
EndDate = datetime.datetime(2020, 12, 31)
LaborDay = datetime.datetime(2020, 9, 7)
Thanksgiving_Start = datetime.datetime(2020, 11, 23)
Thanksgiving_End = datetime.datetime(2020, 11, 28)
CurrentDate = StartDate
days = int((EndDate - StartDate).days)
print(StartDate.strftime("%Y-%m-%d"))
for NextDate in range(days):
NextDate = CurrentDate + datetime.timedelta(days=7)
if NextDate == LaborDay:
continue
if Thanksgiving_Start <= NextDate <= Thanksgiving_End:
continue
if NextDate > EndDate:
break
print(NextDate.strftime("%Y-%m-%d"))
CurrentDate = NextDate
getDates()
如果您使用 print(),您会看到 continue 正在按预期工作。
def getDates():
StartDate = datetime.datetime(2020, 1, 1)
EndDate = datetime.datetime(2020, 12, 31)
LaborDay = datetime.datetime(2020, 9, 7)
Thanksgiving_Start = datetime.datetime(2020, 11, 23)
Thanksgiving_End = datetime.datetime(2020, 11, 28)
CurrentDate = StartDate
days = int((EndDate - StartDate).days)
print(StartDate.strftime("%Y-%m-%d"))
for NextDate in range(days):
NextDate = CurrentDate + datetime.timedelta(days=7)
if NextDate == LaborDay:
#labor day is in day 7 from septemeber, this day is not multiple of seven
#starting from StartDate, so it is impossible that is going to evaluate
# to true
print("Continue is working first statement")
continue
if Thanksgiving_Start <= NextDate <= Thanksgiving_End:
print("Continue is working second statment")
continue
if NextDate > EndDate:
break
print(NextDate.strftime("%Y-%m-%d"))
CurrentDate = NextDate
getDates()
问题是一旦遇到第二种情况,就没有设置CurrentDate
。
实际上,您正在混合两种不同的更改方式NextDate
。它由范围内的循环设置,但随后立即设置为与 CurrentDate
相关的值。选择一个并坚持下去;否则你一定会 运行 陷入混乱。
例如,在这里您可以将 for
的外观更改为 while True
循环(或更好:while NextData <= EndDate
);将 NextDate
增加 7 天;并从整个程序中删除 CurrentDate
。
这样应该更容易推理。
我正在尝试编写一个程序来打印两个给定日期之间的所有星期二,并排除劳动节和感恩节假期。然而,当我使用继续跳转时,它打破了循环。
import datetime
def getDates():
StartDate = datetime.datetime(2020, 1, 1)
EndDate = datetime.datetime(2020, 12, 31)
LaborDay = datetime.datetime(2020, 9, 7)
Thanksgiving_Start = datetime.datetime(2020, 11, 23)
Thanksgiving_End = datetime.datetime(2020, 11, 28)
CurrentDate = StartDate
days = int((EndDate - StartDate).days)
print(StartDate.strftime("%Y-%m-%d"))
for NextDate in range(days):
NextDate = CurrentDate + datetime.timedelta(days=7)
if NextDate == LaborDay:
continue
if Thanksgiving_Start <= NextDate <= Thanksgiving_End:
continue
if NextDate > EndDate:
break
print(NextDate.strftime("%Y-%m-%d"))
CurrentDate = NextDate
getDates()
如果您使用 print(),您会看到 continue 正在按预期工作。
def getDates():
StartDate = datetime.datetime(2020, 1, 1)
EndDate = datetime.datetime(2020, 12, 31)
LaborDay = datetime.datetime(2020, 9, 7)
Thanksgiving_Start = datetime.datetime(2020, 11, 23)
Thanksgiving_End = datetime.datetime(2020, 11, 28)
CurrentDate = StartDate
days = int((EndDate - StartDate).days)
print(StartDate.strftime("%Y-%m-%d"))
for NextDate in range(days):
NextDate = CurrentDate + datetime.timedelta(days=7)
if NextDate == LaborDay:
#labor day is in day 7 from septemeber, this day is not multiple of seven
#starting from StartDate, so it is impossible that is going to evaluate
# to true
print("Continue is working first statement")
continue
if Thanksgiving_Start <= NextDate <= Thanksgiving_End:
print("Continue is working second statment")
continue
if NextDate > EndDate:
break
print(NextDate.strftime("%Y-%m-%d"))
CurrentDate = NextDate
getDates()
问题是一旦遇到第二种情况,就没有设置CurrentDate
。
实际上,您正在混合两种不同的更改方式NextDate
。它由范围内的循环设置,但随后立即设置为与 CurrentDate
相关的值。选择一个并坚持下去;否则你一定会 运行 陷入混乱。
例如,在这里您可以将 for
的外观更改为 while True
循环(或更好:while NextData <= EndDate
);将 NextDate
增加 7 天;并从整个程序中删除 CurrentDate
。
这样应该更容易推理。