Listede elemanlara erişme-Ders Çizelgeleme

Merhaba,
Ben ders programı çizelgeme üzerine bir kod yazmaya çalışıyorum. Takıldığım kısmı aşağıda yazmış olduğum kod üzerinden daha rahat görebilirsiniz.

R1=[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]
R2=[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]
R3=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
rrr=[R1,R2,R3]

Dersliklerin müsait olduğu zamanları gösteren R1,R2,R3 şekilde 3 tane liste oluşturdum ve bunları “rrr” adlı bir listeye attım.
Bundan önce de hangi dersin hangi derslikte işlenebileceğini gösteren bir fonksiyon yazdım ve değerleri bir sözlüğe attım. Sözlük anahtar kelimesi ders, değeri de derslik olacak şekilde.Aşağıda görebilirsiniz. “roomuygunluk” sözlüğüne dersin adı ve işlenebilecek dersliklerin adı gidiyor. Örn. Math101, R1 gibi.

def roomavaibility():
for i in courses:
for j in rooms:
if i.roomType == j.roomType:
if i.max_student <= j.capacity:
print(i.name, “için”, j.name, “uygun”)
roomuygunluk.setdefault(i.name, []).append(j.name)

            else:
                print(i.name,j.name, "için uygun değil")

print(roomavaibility())
print(“roomuygunluk”, roomuygunluk)

Ben burada sözlüğe dersin atanabileceği dersliğin(sözlük değeri) müsait olduğu zamanı bulabilmek.

Bu konuda yardımcı olabilirseniz sevinirim.

Teşekkür ederim.

Kodlarınızı bu linke göre tekrar yollayın lütfen. Kodlarınızdaki girintilemelerin de doğru olduğuna emin olun.

R1=[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]
R2=[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]
R3=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
rrr=[R1,R2,R3]
def roomavaibility():
for i in courses:
for j in rooms:
if i.roomType == j.roomType:
if i.max_student <= j.capacity:
print(i.name, “için”, j.name, “uygun”)
roomuygunluk.setdefault(i.name, []).append(j.name)

Girintilemeye izin vermiyor nedenini de anlayamadım. Yukarıda açıklamaları yaptığım için tekrar yazmıyorum. Teşekkür ederim.

Normalde girintili bir kod yapıştırıldığında sıkıntı olmuyor, belki IDE’niz ile alakalıdır.

roomuygunluk = {}
def roomavaibility():
    for i in courses:
        for j in rooms:
            if i.roomType == j.roomType:
                if i.max_student <= j.capacity:
                    #                    print(i.name, "için", j.name, "uygun")
                    roomuygunluk.setdefault(i.name, []).append(j.name)


#                else:
#                    print(i.name,j.name, "için uygun değil")

print(roomavaibility())
print("roomuygunluk", roomuygunluk)
``
Şimdi yapabildim sanırım.

courses değişkeni tanımlanmadığı için kodunuzu deneyemiyorum.

class course():
    def __init__(self, name, instructor, course_hour, sep, max_student, department, classes, c_e, roomType):
        self.name = name
        self.instructor = instructor
        self.course_hour = course_hour
        self.sep = sep
        self.max_student = max_student
        self.department = department
        self.classes = classes
        self.c_e = c_e
        self.roomType = roomType


c1 = course("MATH 101", "I1", 4, 1, 80, {1, 2}, 1, "C", 1)
c2 = course("MATH 101R", "I12", 2, 0, 80, {1, 2}, 1, "C", 1)
c3 = course("PHYS 101", "I2", 3, 1, 75, {1, 2}, 1, "C", 1)
c4 = course("PHYS 101L1", "I13", 3, 0, 25, 1, 1, "C", 2)
c5 = course("CS 101", "I3", 3, 1, 80, {1, 2}, 1, "C", 1)
c6 = course("CS 101L", "I14", 2, 0, 35, 1, 1, "C", 3)
courses=[c1,c2,c3,c4,c5,c6]

class room():
    def __init__(self, name, roomType, capacity):
        self.name = name
        self.roomType = roomType
        self.capacity = capacity


r1 = room("R1", 1, 144)
r2 = room("R2", 3, 44)
r3 = room("R3", 2, 28)
rooms = [r1, r2, r3]

R1=[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1,
    0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1]
R2=[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
    1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]
R3=[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
rrr=[R1,R2,R3]
roomuygunluk = {}


def roomavaibility():
    for i in courses:
        for j in rooms:
            if i.roomType == j.roomType:
                if i.max_student <= j.capacity:
                    #                    print(i.name, "için", j.name, "uygun")
                    roomuygunluk.setdefault(i.name, []).append(j.name)


#                else:
#                    print(i.name,j.name, "için uygun değil")

print(roomavaibility())
print("roomuygunluk", roomuygunluk)
``
Burada yazan kısımlar çalışıyor hocam. Benim yapmak istediğim dersin işlenebileceği   dersliğin "0" olduğu zamanlarda derslik müsait olduğunu bir fonksiyonla tanımlamak. Bu fonksiyonu uzun zamandır oluşturamadığım malesef. Mantıksal bir hatam da olabilir bilmiyorum. Yardımlarınız için teşekkür ederim.

Ana sorun bu galiba ama anlamaya Turkcem yetmedi.

Dert oda uygunlugunu sadece odaya degil odaya ve saate gore belirlemekse, key olarak oda ismi yerine oda ismi + saat kullanmak lazim.

Bu arada for loop icinde degisken isimleri olarak i ve j disinda seyler (c veya course mesela) kullanilmasini siddetle tavsiye ediyorum, kod bu halde okunabilir degil.

1 Beğeni

Kusura bakmayın aceleyle kafam dolu bir şekilde yazdığım için anlaşılır bir şekilde sorunu yazmamışım.Asıl sorunum sözlüğe atanmış key=ders, value=derslik değerlerinden ders için uygun olan bu dersliğin müsait olduğu zamanı belirleyebilmekti. Örneğin sözlük değeri Math 101, R1 ise R1 listesindeki “0” değeri olanları bulmasıydı.Sonuç olarak mesela “R1 dersliği 5. zamanda müsait” gibi. Önerileriz için teşekkür ederim. Deneyeceğim.

Peki basit bir for loop ile R#'nin uzerinden gecip ilk 0’in pozisyonunu bulmak (ve sonra herhalde 1’e degistirmek) yetmiyor mu?

Hmm, room objelerinin musaitlik bilgilerine erisimleri yok. Constructor parametre olarak R# array’i alsin veya hepsi 0 olan bi musaitlik array’i yaratsin, disaridan 1’e cevirip dolduralim.

Veya ayrica r# <-> R# haritasi da tutulabilir de gerek yok.