2017-09-14 29 views
0

我正在寫一個小型Python腳本來查找基於日曆約會的時間可用插槽。我能夠在這裏重新使用這個帖子上的代碼:(Python - Algorithm find time slots)。Python - 查找時間槽

它似乎適用於預約約一個小時或更長時間,但對於那些不到一個小時,它似乎並沒有趕上他們。換句話說,即使約會預約(不到一個月),它也顯示時間段可用。

下面的示例代碼來自後面提到的,用我自己的「小時」和「約會」值。

#get_timeslots.py 

from datetime import datetime, timedelta 

appointments = [(datetime.datetime(2017, 9, 7, 9, 30), 
       datetime.datetime(2017, 9, 7, 12, 30), 
       datetime.datetime(2017, 9, 7, 13, 30), 
       datetime.datetime(2017, 9, 7, 14, 0))] 

hours = (datetime.datetime(2017, 9, 7, 6, 0), datetime.datetime(2017, 9, 7, 23, 0)) 


def get_slots(hours, appointments, duration=timedelta(hours=1)): 
    slots = sorted([(hours[0], hours[0])] + appointments + [(hours[1], hours[1])]) 
    for start, end in ((slots[i][1], slots[i+1][0]) for i in range(len(slots)-1)): 
     assert start <= end, "Cannot attend all appointments" 
     while start + duration <= end: 
      print "{:%H:%M} - {:%H:%M}".format(start, start + duration) 
      start += duration 

if __name__ == "__main__": 
    get_slots(hours, appointments) 

當我運行該腳本,我得到:

06:00 - 07:00 
07:00 - 08:00 
08:00 - 09:00 
12:30 - 13:30 
13:30 - 14:30 
14:30 - 15:30 
15:30 - 16:30 
16:30 - 17:30 
17:30 - 18:30 
18:30 - 19:30 
19:30 - 20:30 
20:30 - 21:30 
21:30 - 22:30 

的問題是,雖然從9第一次約會:30-12:30被封出,並沒有出現在可用插槽,後面的13:30-2:00約會沒有被阻止,因此在時隙輸出中顯示爲可用。 (見「13:30 - 14:30」)。

我是一個Python新手,並承認我沒有完全理解它就回收了代碼。有人能指出我要改變什麼來使它適當地阻止約會不到一小時?

TIA,

克里斯

回答

1

你錯過了約會的支架。試試這個:

#from datetime import datetime, timedelta 
import datetime 

#notice the additional brackets to keep the 2 slots as two separate lists. So, 930-1230 is one slot, 1330-1400 is an another. 

appointments = [(datetime.datetime(2017, 9, 7, 9, 30), 
      datetime.datetime(2017, 9, 7, 12, 30)), 
      (datetime.datetime(2017, 9, 7, 13, 30), 
      datetime.datetime(2017, 9, 7, 14, 0))]