Last active
March 28, 2019 02:41
-
-
Save buraste/10a6f2bbb069deaada50170436b59858 to your computer and use it in GitHub Desktop.
Hastane Randevu Sistemi
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Hastanenin randevular için belirlediği saat ve hasta planı: | |
saatler = [ | |
{'kota': 3, 'saat': '09:00'}, | |
{'kota': 3, 'saat': '09:20'}, | |
{'kota': 3, 'saat': '09:40'}, | |
{'kota': 3, 'saat': '10:00'}, | |
{'kota': 3, 'saat': '10:20'}, | |
{'kota': 3, 'saat': '10:40'}, | |
{'kota': 2, 'saat': '11:00'}, | |
{'kota': 2, 'saat': '11:20'}, | |
{'kota': 2, 'saat': '11:40'}, | |
] | |
# Belirlenen saat ve kotalara göre mevcutta randevu alınmış saatler ve hasta sayıları: | |
randevular = [ | |
{'kisi_sayisi': 2, 'saat': '10:40'}, | |
{'kisi_sayisi': 3, 'saat': '09:00'}, | |
{'kisi_sayisi': 1, 'saat': '11:40'}, | |
{'kisi_sayisi': 2, 'saat': '11:20'}, | |
{'kisi_sayisi': 1, 'saat': '09:40'}, | |
{'kisi_sayisi': 3, 'saat': '09:00'}, | |
{'kisi_sayisi': 4, 'saat': '10:00'} | |
] | |
def musait_saatler(saatler, randevular, kisi_sayisi): | |
""" | |
:param saatler: Hastanenin randevular için belirlediği saat ve hasta planı. | |
:param randevular: Belirlenen saat ve kotalara göre mevcutta randevu alınmış saatler ve hasta sayıları. | |
:param kisi_sayisi: Tek seferde randevu almak isteyen kişi sayısı. | |
:return: Hastane tarafından belirlenmiş saat/hasta planı dahilinde alınmış randevuları kontrol ederek hasta kabul edilebilecek | |
en uygun saatleri listeler. Eğer aynı anda birden fazla kişi randevu almak isterse sonraki saatleri de | |
kontrol eder. | |
""" | |
for randevu in randevular: # Alınmış randevu listesinin içine girdik. | |
randevu_kisi_sayisi = randevu.get('kisi_sayisi') # Liste içindeki kişi sayılarını get metoduyla ayırdık. | |
randevu_saati = randevu.get('saat') # Liste içindeki saatleri get metoduyla ayırdık. | |
for plan in saatler: # Hastanenin belirlediği plan listesinin içine girdik. | |
kabul_saati = plan.get('saat') # Liste içindeki saatleri get metoduyla ayırdık. | |
if randevu_saati == kabul_saati: | |
a = saatler.index(plan) # Kotada değişiklikler yapabilmek için randevu saatinin saat/hasta planı içerisinde hangi index'e denk geldiğini bulduk. | |
for i in range(0, randevu_kisi_sayisi): | |
guncellenecek_plan = saatler[a + i] # Saat/hasta planı içerisinde randevu almış hasta kadar ilerledik ve kotası güncellenecek plan_indexı bulduk. | |
guncellenecek_plan_saati = guncellenecek_plan.get('saat') | |
guncellenecek_plan_kotasi = guncellenecek_plan.get('kota') | |
guncellenecek_plan_kotasi = guncellenecek_plan_kotasi - 1 # Bulduğumuz plan_indexın kotasını 1 azalttık. Yani o planı o hastalara rezerve ettik. | |
rezervasyon = {'kota': guncellenecek_plan_kotasi, | |
'saat': guncellenecek_plan_saati} # Alınmış randevuları güncellemek için rezervasyon değerine atadık. | |
saatler[a + i].update(rezervasyon) # Planı alınmış randevular ile kapattık. Artık alacağımız paremetreye göre uygun saatleri söyleyebiliriz. | |
for saat_kontrol in saatler: # Tekrar hasta/saat planı içine girdik. Şimdi planın dışına çıkmadan randevu kabul edeceğiz. | |
randevu_durumu = True # Mesai bitene kadar randevu kabul edebiliriz. Buradaki mesai aslında planın başlangıç ve bitişidir. | |
plan_index = saatler.index(saat_kontrol) # Mesai saatlerimizi ölçtük. | |
if saat_kontrol.get('kota') == 0: # İki farklı olumsuz durum var: | |
# 1) Randevular dolmuş olabilir. | |
# 2) Aynı anda birden fazla kişi için (ardışık) uygun yer olmayabilir. Mesainin yetmemesi de buna dahil. | |
randevu_durumu = False # İlgili saatler için randevular doldu. | |
elif kisi_sayisi > plan_index +2: | |
print("Şuan aynı anda hizmet verebileceğimiz kapasitenin üzerinde başvuru yaptınız.") | |
break | |
elif plan_index >= plan_index - kisi_sayisi: | |
for i in range(1, kisi_sayisi): | |
guncellenecek_plan = saatler[plan_index + i] | |
if guncellenecek_plan.get('kota') == 0: | |
randevu_durumu = False # Plan içerisinde kotası dolmuş planların randevu durumunu gösterir. | |
if randevu_durumu == True: | |
a = saat_kontrol.get("saat") # From dicionary | |
print(a) | |
musait_saatler(saatler, randevular, 2) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment