0

このようにPythonでアプリケーションのスロット予約アルゴリズムを書いています

from datetime import datetime, timedelta

appointments = [(datetime(2012, 5, 22, 10), datetime(2012, 5, 22, 10, 30)),
                (datetime(2012, 5, 22, 12), datetime(2012, 5, 22, 13)),
                (datetime(2012, 5, 22, 15, 30), datetime(2012, 5, 22, 17, 10))]

hours = (datetime(2012, 5, 22, 9), datetime(2012, 5, 22, 18))

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

特定の日付のスロットを 9 時間から 18 時間以内にチェックしている場合、これは問題なく機能しますが、週または月の可用性の要件を満たしていません。

コードを改善して、9 時間から 18 時間までの利用可能なスロットを週および月でもチェックできるようにしてください。

4

1 に答える 1

0

hoursあなたはそれが毎日、または毎月のすべての曜日に適用されることを意図していると思います(おそらくいくつかの休日を除く?) ので、timeオブジェクトを使用するように変更できます。次に、各日について、datetime.combine前日の終わりから今日の開始までの間隔を作成できます。最終日の終わりから始まる間隔をもう 1 つ作成することを忘れないでください。

于 2012-08-15T07:30:41.323 に答える