【发布时间】:2020-06-25 08:20:52
【问题描述】:
我是 python 和一般编码的新手,我开发了一个小程序来检查谷歌日历中的重复预订。我的问题是,如果我选择检查 6 月 26 日,它将检查 26 AND 27。
我想是因为我在 range(1) 中做了一个 for i (所以它循环了两次,(0,1))
如何更改它以使其仅运行一次?
这里是代码:
for i in range(1):
startStrip = datetime.datetime.strptime(event_start, "%Y-%m-%dT%H:%M:%S")
endStrip = datetime.datetime.strptime(event_end, "%Y-%m-%dT%H:%M:%S")
dayOfWeek = startStrip + datetime.timedelta(days=i)
# les bons formats
currentStart = str(startStrip + datetime.timedelta(days=i)).replace(" ", "T")
currentEnd = str(endStrip + datetime.timedelta(days=i)).replace(" ", "T")
calendarEnd = str(endStrip + datetime.timedelta(days=i + 1)).replace(" ", "T")
events_result = service.events().list(calendarId='primary', timeMin=currentStart + "-00:00",
maxResults=30, timeMax=calendarEnd + "-00:00",
singleEvents=True, orderBy='startTime').execute()
events = events_result.get('items', [])
currentEmployees = []
for event in events:
currentEmployees.append(event['summary'])
#for i in range(1):
#event_done = False
if employee in currentEmployees:
event_done = False
event['summary'] = employee
#if employee not in currentEmployees:
#event_done = True
#else:
for event in events:
# if employee == event['summary']:
if str2datetime(currentStart) <= str2datetime(event['end']['dateTime'].split('+')[0]) and str2datetime(currentEnd) >= str2datetime(event['start']['dateTime'].split('+')[0]):
event_done = False
print(employee + ' est occupé')
break
else:
event_done = True
break
if employee not in currentEmployees:
event_done = True
if event_done:
option = show_message_box(QMessageBox.Critical,
"Confirmation",
"Voulez-vous bloquer cette plage horraire?"\
"L'employé : \"" + employee + "\" sera marqué comme indisponible en raison de : " + reason, \
"Nom de l'employé: " + employee + "\n" \
"Raison: " + reason + "\n" \
"À partir du : " + currentStart + "\n" \
"À ce jour " + currentEnd + "\n"
)
if option == QMessageBox.Yes:
event_done = True
else:
print("Événement ignoré!")
event_done = False
break
if event_done:
event = {
'summary': employee,
'location': location,
'description': reason,
'start': {
'dateTime': currentStart,
'timeZone': 'America/New_York',
},
'end': {
'dateTime': currentEnd,
'timeZone': 'America/New_York',
#},
#'attendees': [
# {'email': event_email},
#],
#'reminders': {
# 'useDefault': True,
},
}
register_event(service, event)
else:
second_message_box(QMessageBox.Critical,
"ATTENTION!",
"L'inspecteur " + employee + " est déjà occupé à ce moment-là.""\n" \
"Veuillez essayer une autre plage horraire.", QMessageBox.Ok)
【问题讨论】:
-
摆脱循环?循环适用于您需要多次执行该部分代码时。
-
另外,
for i in range(1):将只有一次迭代(即 0)。 -
您能否尝试将您的代码简化为minimal reproducible example?
-
我不能。即使我可以,我也不知道怎么做。我的 GUI 打开,我选择开始日期和结束日期,然后运行代码,调用此函数并将日期格式化以符合谷歌标准,如果所选员工在所选时间忙,则检查所选日期,如果不是,将添加事件,如果没有会给我错误消息。我的问题是它也检查第二天。我不知道如何重现一个例子,对不起。 @丹尼尔沃克
-
所以如果你看我的代码,它只运行一次?我认为 range(1) 返回 [0,1],这只会使循环两次@DanielWalker
标签: python