我正在創建一個預訂系統,我希望我的函式is_reserved回傳一個已安排的新預訂或一條訊息說“已經有預訂”
from datetime import datetime
def is_reserved(request):
start_request = to_date(request['start'])
stop_request = to_date(request['end'])
flag = False
for reservation in range(len(reservations)):
start = to_date(reservations[reservation]['start'])
stop = to_date(reservations[reservation]['end'])
if start_request > start and stop_request < stop:
print("There's already a reservation!")
flag = True
break
if flag == False:
reservations.append(request)
print("There wasn't a reservation, new reservation made")
def to_date(request):
return datetime.strptime(request, '%Y-%m-%dT%H:%M:%S' "Z")
def see(list):
for reservation in range(len(reservations)):
print(reservations[reservation])
reservations = []
res1 = {
'id' :1,
'start':datetime(2022,2,23,hour=14, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z",
'end':datetime(2022,2,23,hour=15, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z"
}
reservations.append(res1)
res2 = {
'id' :2,
'start':datetime(2022,2,23,hour=16, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z",
'end':datetime(2022,2,23,hour=18, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z"
}
res3 = {
'id' : 3,
'start' : datetime(2022,2,23,hour=18, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z",
'end': datetime(2022,2,23,hour=19, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z"
}
res4 = {
'id' : 4,
'start' : datetime(2022,2,23,hour=15, minute=30).strftime('%Y-%m-%dT%H:%M:%S') "Z",
'end': datetime(2022,2,23,hour=17, minute=50).strftime('%Y-%m-%dT%H:%M:%S') "Z"
}
see(reservations)
is_reserved(res2)
see(reservations)
is_reserved(res3)
see(reservations)
is_reserved(res4)
see(reservations)
我得到這些結果:
{'id': 1, 'start': '2022-02-23T14:00:00Z', 'end': '2022-02-23T15:00:00Z'}
There wasn't a reservation, new reservation made
{'id': 1, 'start': '2022-02-23T14:00:00Z', 'end': '2022-02-23T15:00:00Z'}
{'id': 2, 'start': '2022-02-23T16:00:00Z', 'end': '2022-02-23T18:00:00Z'}
There wasn't a reservation, new reservation made
{'id': 1, 'start': '2022-02-23T14:00:00Z', 'end': '2022-02-23T15:00:00Z'}
{'id': 2, 'start': '2022-02-23T16:00:00Z', 'end': '2022-02-23T18:00:00Z'}
{'id': 3, 'start': '2022-02-23T18:00:00Z', 'end': '2022-02-23T19:00:00Z'}
There wasn't a reservation, new reservation made
{'id': 1, 'start': '2022-02-23T14:00:00Z', 'end': '2022-02-23T15:00:00Z'}
{'id': 2, 'start': '2022-02-23T16:00:00Z', 'end': '2022-02-23T18:00:00Z'}
{'id': 3, 'start': '2022-02-23T18:00:00Z', 'end': '2022-02-23T19:00:00Z'}
{'id': 4, 'start': '2022-02-23T15:30:00Z', 'end': '2022-02-23T17:50:00Z'}
問題是第四次預訂通常無法完成,因為已經有第二次預訂了。在我的 for 回圈中,我將預訂請求與已經進行的所有其他預訂進行比較,但是一對一比較并不能讓函式查看之后或之前是否有預訂,這就是我要阻止的地方。
如果您對我如何解決這個問題有任何想法,請。
uj5u.com熱心網友回復:
例如,實作這一目標的最佳方法是使用多個“房間”。在這種情況下,房間用常數 CONN 表示,在您的情況下它等于 1。
from datetime import datetime
arrivals = []
departures = []
CONN = 1
def to_date(request):
return datetime.strptime(request, '%Y-%m-%dT%H:%M:%S' "Z")
def reserve(request):
start_request = to_date(request['start'])
stop_request = to_date(request['end'])
arrivals.append(start_request)
departures.append(stop_request)
arrivals.sort()
departures.sort()
for i in range(len(arrivals)):
if i CONN < len(arrivals) and arrivals[CONN i] < departures[i]:
arrivals.pop(len(arrivals)-1)
departures.pop(len(arrivals)-1)
print("We can't make the reservation")
return False
print("Reservation made!")
reservations.append(request)
see(reservations)
return True
def see(list):
print("Reservations: ")
for reservation in range(len(reservations)):
print(reservations[reservation])
reservations = []
res1 = {
'id' :1,
'start':datetime(2022,2,23,hour=14, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z",
'end':datetime(2022,2,23,hour=15, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z"
}
res2 = {
'id' :2,
'start':datetime(2022,2,23,hour=16, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z",
'end':datetime(2022,2,23,hour=18, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z"
}
res3 = {
'id' : 3,
'start' : datetime(2022,2,23,hour=18, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z",
'end': datetime(2022,2,23,hour=19, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z"
}
res4 = {
'id' : 4,
'start' : datetime(2022,2,23,hour=18, minute=30).strftime('%Y-%m-%dT%H:%M:%S') "Z",
'end': datetime(2022,2,23,hour=19, minute=0).strftime('%Y-%m-%dT%H:%M:%S') "Z"
}
reserve(res1)
reserve(res2)
reserve(res3)
reserve(res4)
see(reservations)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435946.html
