Kategori Sistemi
Python ile bir iki gün önce başlamıştım yapımına ancak silme kısmında bir kaç düzenleme kalmıştı. O düzenlemelerle birlikte bazı düzenlemeler daha yapıp son şeklini verdim az önce. KategoriSistemi sınıfı ile ürün sistemi ya da ona benzer kategorilendirilecek içerikleri kontrol edebiliyorsunuz. Alt alta istediğiniz kadar kategori eklemek mümkün.
Sınıfı kendi hayal gücünüze göre şekillendirebilirsiniz. Belki vakit olursa veritabanı ile etkileşim özelliği eklenebilir. Kodlar ve kodların çalışması sonucu oluşan sonuç:
#-*- coding: utf-8 *-* from types import * class KategoriSistemi: def __init__(self): # Kategorileri tutan değişken hazırlanıyor. # Sözlükteki no anahtarı, kategori numaralarını tutuyor. # Bu numaralar benzersiz numaralardır. bilgi anahtarı ise # kategori bilgilerini tutuyor. self.kategoriler = {"no" : {},"bilgi" : {}} # Silinecek kategorileri tutan değişken self.silinecekler = [] # Konum değerinin altında bulunan kategori numaralarını tutar. self.mevcut_kategoriler = [] def ekle(self,*degiskenler): # Konum ve kategori bilgileri alınıyor. # İlk olarak degiskenler içeriğine bakılıyor. # Eğer sadece tek değişken varsa bunu kategori olarak # algılıyor. İki değişken varsa ilkini konum # ikincisini kategori olarak algılıyor. if len(locals()["degiskenler"])==1: konum = 0 kategori = locals()["degiskenler"][0] else: konum = locals()["degiskenler"][0] kategori = locals()["degiskenler"][1] # İşlem durumu durum = False # Kategori için bir numara tanımlanıyor. numara = self.kategoriler["bilgi"].__len__() + 1 if type(konum) is IntType: # Konum kontrol ediliyor. # Var ise içeriği alınıyor if self.kategoriler["no"].has_key(konum)==True: # Konuma ait kategori numaraları alınıyor. aktar = self.kategoriler["no"][konum] # Oluşturulan kategori numarası aktarıcıya ekleniyor. aktar.append(numara) # Aktarıcı içeriği konumdaki içeriğe aktarılıyor self.kategoriler["no"][konum] = aktar # Bilgi eklemesi için durum hazırlanıyor. durum = True else: # Konum yok ise ekleme yapılıyor self.kategoriler["no"][konum] = [numara] # Bilgi eklemesi için durum hazırlanıyor. durum = True if type(konum) is StringType: # Kategori bilgileri içerisinde konum var mı kontrol ediliyor. try: self.kategoriler["bilgi"].values().index(konum) # Yukarıdaki komut hatalı ise işlem sonlanacaktır. # Yani konum değeri bilgi taşıyıcısında yoksa. numara = self.kategoriler["bilgi"].keys()[self.kategoriler["bilgi"].values().index(konum)] # Numara ile ekleme için işlem tekrar başlatılıyor. self.ekle(numara,kategori) except: pass if durum==True: # Eklenecek bilgi kümesi oluşturuluyor. bilgi = { numara : kategori } # Bilgi kümesi ekleniyor. self.kategoriler["bilgi"].update(bilgi) def duzenle(self,ilk_deger,son_deger): # Kategori bilgileri içerisinde konum var mı kontrol ediliyor. try: self.kategoriler["bilgi"].values().index(ilk_deger) # Yukarıdaki komut hatalı ise işlem sonlanacaktır. # Yani konum değeri bilgi taşıyıcısında yoksa. numara = self.kategoriler["bilgi"].keys()[self.kategoriler["bilgi"].values().index(ilk_deger)] # Numara ile düzenleme işlemi yapılıyor. self.kategoriler["bilgi"][numara] = son_deger except: pass def sil(self,konum): # Konum değeri sayısal değer ise yapılacak olan işlemler. if type(konum) is IntType: self.kategori_al(konum) for i in self.mevcut_kategoriler: if self.kategoriler["bilgi"].has_key(i)==True: self.kategoriler["bilgi"].pop(i) if self.kategoriler["no"].has_key(i)==True: self.kategoriler["no"].pop(i) if self.kategoriler["bilgi"].has_key(konum)==True: self.kategoriler["bilgi"].pop(konum) if self.kategoriler["no"].has_key(konum)==True: self.kategoriler["no"].pop(konum) for i in self.kategoriler["no"]: try: self.kategoriler["no"][i].remove(konum) except: pass # Konum değeri karakter dizisi ise yapılacak olan işlemler. if type(konum) is StringType: # Kategori bilgileri içerisinde konum var mı kontrol ediliyor. try: self.kategoriler["bilgi"].values().index(konum) # Yukarıdaki komut hatalı ise işlem sonlanacaktır. # Yani konum değeri bilgi taşıyıcısında yoksa. numara = self.kategoriler["bilgi"].keys()[self.kategoriler["bilgi"].values().index(konum)] # Numara ile silme için işlem tekrar başlatılıyor. self.sil(numara) except: pass def kategori_al(self,konum=0): # Konum kontrol ediliyor. if self.kategoriler["no"].has_key(konum)==True: # Konum varsa döngü ile konumlar alınıyor. for x in self.kategoriler["no"][konum]: # Konum içerisindeki kategori numaraları # için alt kategori kontrolü yapılıyor. self.mevcut_kategoriler.append(x) self.kategori_al(x) def kategori_goster(self,konum=0,basamak=0,tasiyici=0): # Konum kontrol ediliyor. if self.kategoriler["no"].has_key(konum)==True: # Konum varsa döngü ile konumlar alınıyor. for x in self.kategoriler["no"][konum]: if tasiyici == konum: basamak = 0 if konum>0: basamak+=1 bosluk = "-"*basamak*2 tasiyici = konum else: basamak = 0 bosluk = "" if self.kategoriler["bilgi"].has_key(x)==True: print "%s%s" %(bosluk,self.kategoriler["bilgi"][x]) # Konum içerisindeki kategori numaraları # için alt kategori kontrolü yapılıyor. self.kategori_goster(x,basamak,tasiyici) # Sınıf kullanılmak için tanımlanıyor. islem = KategoriSistemi() # Ekleme yapılıyor. islem.ekle("a") islem.ekle("b") islem.ekle("c") islem.ekle("a","a-1") islem.ekle("a","a-2") islem.ekle("c","c-1") islem.ekle("a-1","a-1-1") islem.ekle("a-1-1","a-1-1-1") islem.ekle("a-2","a-2-1") islem.ekle("b","b-1") islem.ekle("b-1","b-1-1") islem.ekle("b","b-2") islem.ekle("b-2","b-2-1") islem.kategori_goster() print print # Silme yapılıyor. islem.sil("c") islem.kategori_goster() print print # Düzenleme yapılıyor. islem.duzenle("a","A") islem.kategori_goster()
omer@omer-laptop:~/gelistirme/hatirlat$ python2.5 test.py a --a-1 ----a-1-1 ------a-1-1-1 --a-2 ----a-2-1 b --b-1 ----b-1-1 --b-2 ----b-2-1 c --c-1 a --a-1 ----a-1-1 ------a-1-1-1 --a-2 ----a-2-1 b --b-1 ----b-1-1 --b-2 ----b-2-1 A --a-1 ----a-1-1 ------a-1-1-1 --a-2 ----a-2-1 b --b-1 ----b-1-1 --b-2 ----b-2-1