Python (5. Bölüm)
Pardus-Linux.org | Wiki sitesinden
Forum'da bu konunun tartışma adresi: http://forum.pardus-linux.org/viewtopic.php?t=10478&highlight=
Konu başlıkları |
Python'da Listeler, Demetler, Sözlükler
Bu bölümde Python'da nasıl liste (list), demet (tuple) ve sözlük (dictionary) hazırlanacağını öğreneceğiz. Burada göstereceğimiz küçük kod parçalarını metin dosyası yerine doğrudan Python komut satırında deneyebilirsiniz. Böylesi hem daha hızlı, hem daha kolay, hem de daha etkili olacaktır.
İlk konumuz listeler:
Listeler
Python'da herhangi bir liste oluşturmak için önce listemize bir ad vermemiz, ardından da köşeli parantez kullanarak bu listenin öğelerini belirlememiz gerekiyor. Yani liste oluştururken dikkat etmemiz gereken iki temel nokta var. Birincisi tıpkı değişkenlere isim veriyormuşuz gibi listelerimize de isim vermemiz gerekiyor... Tabii listelerimizi isimlendirirken Türkçe karakterler kullanmayacağız... İkincisi, listemizi oluşturan öğeleri köşeli parantezler içinde yazacağız.
Yukarıda da belirttiğimiz gibi, hızlılık açısından burada öğreneceğimiz kodları Python komut satırına yazıp deneyeceğiz. Python komut satırını, hatırlarsanız, şöyle açıyorduk: ALT+F2 tuşlarına basıp çıkan pencerede "konsole" yazıyoruz ve konsol ekranında "python" komutu vererek Python komut satırını başlatıyoruz. Şimdi hemen ilk listemizi tanımlayalım :
liste = ["Hale", "Jale", "Lale", 12, 23]
Daha önce de söylediğimiz gibi, burada dikkat etmemiz gereken nokta, liste öğelerini tanımlarken köşeli parantezler kullanıyor olmamız... Ayrıca liste içindeki karakter dizilerini (strings) her zamanki gibi tırnak içinde belirtmeyi unutmuyoruz... Tabii ki sayıları (integers) yazarken bu tırnak işaretlerini kullanmayacağız. Eğer sayılarda tırnak işareti kullanırsanız Python'un bu öğeleri nasıl algılayacağını biliyorsunuz... Bakalım bunları Python nasıl algılıyormuş?
Python komut satırında şu ifadeyi yazın:
type("Hale")
Bu komutun çıktısı:
<type 'str'>
olacaktır. Yani "Hale" ifadesinin tipi "str" imiş. "Str", İngilizce'deki "string" kelimesinin kısaltması. Türkçe anlamı ise "karakter dizisi".
Şimdi aynı komutu şu şekilde deniyoruz:
type(123)
Bu komut bize şu çıktıyı verecektir:
<type 'int'>
Demek ki 123 ifadesinin tipi "int" imiş. Bu "int" de İngilizce'deki "integer" kelimesinin kısaltması oluyor... Türkçe anlamı, "tamsayı".
Şimdi bu 123 ifadesini tırnak içinde yazalım:
type("123")
Sonuç:
<type 'str'>
Gördüğünüz gibi yazdığınız şey sayı da olsa, siz bunu tırnak içinde belirtirseniz, Python gözünüzün yaşına bakmıyor...
Neyse biz konumuza dönelim...
Olması gerektiği şekilde listemizi tanımladık:
liste = ["Hale", "Jale", "Lale", 12, 23]
Şimdi komut satırında
liste
yazdığımızda tanımladığımız "liste" adlı listenin öğeleri ekrana yazdırılacaktır.
Tanımladığımız bu listenin öğe sayısını len() fonksiyonu yardımıyla öğrenebiliriz:
len(liste) 5
Şimdi listeleri yönetmeyi; yani listeye öğe ekleme, listeden öğe çıkarma gibi işlemleri yapmayı öğreneceğiz. Bu işi Python'da bazı parçacıklar yardımıyla yapıyoruz. İsterseniz gelin şimdi bu parçacıkların neler olduğuna ve nasıl kullanıldıklarına bakalım.
append parçacığı
İlk parçacığımız "append". Bu kelime Türkçe'de "eklemek, iliştirmek" anlamına geliyor...
Oluşturduğumuz listeye yeni bir öğe eklemek için "append" parçacığından faydalanıyoruz:
liste.append("Mehmet")
Dikkat edin, liste tanımlarken köşeli parantez kullanıyorduk... Listeleri yönetirken ise (yani parçacıkları kullanarak ekleme, çıkarma, vb. yaparken) normal parantezleri kullanıyoruz. Ayrıca gördüğünüz gibi, bu "append" parçacığını, liste isminin yanına koyduğumuz bir noktadan sonra yazıyoruz.
"append" parçacığı yardımıyla, öğeyi oluşturduğumuz bir listenin en sonuna ekleyebiliyoruz. Peki bu parçacık yardımıyla birden fazla öğe ekleyebilir miyiz? Ne yazık ki, append parçacığı bize listeye yalnızca tek bir öğe ekleme olanağı sunar...
Eğer biz ekleyeceğimiz bir öğeyi en sona değil de listenin belirli bir noktasına yerleştirmek istiyorsak, başka bir parçacıktan faydalanıyoruz. Ama bu parçacığı kullanmaya başlamadan önce Python'un liste öğelerini sıralama yönteminden bahsetmemiz gerekir. Python'un "sıralama yöntemi" ile ilgili olarak bilinmesi gereken en önemli kural şudur:
"Python, liste içindeki öğeleri sıralarken, listenin ilk öğesini 0'dan başlatır. Yani:
liste = ["Hale", "Jale", "Lale", 12, 23, "Mehmet"]
biçiminde gördüğümüz listenin ilk öğesine "0'ıncı öğe" denir. Bu listedeki birinci öğe ise "Jale"dir. Bunu şu şekilde teyit edelim:
liste[0]
Bu komutu yazdığımızda Python bize 0'ıncı öğenin "Hale" olduğunu söyleyecektir. Aynı şekilde;
liste[2]
komutu ise bize 2. öğenin "Lale" olduğunu söyleyecektir. Ancak burada şuna dikkat etmemiz lazım: Python liste öğelerini numaralarken 0'dan başlasa da liste öğelerini sayarken 1'den başlar... Yani;
len(liste)
komutunu verdiğimizde elde edeceğimiz sayı 6 olacaktır. Çünkü listemizde 6 adet öğe bulunuyor.
Python'un öğe sıralama mantığını öğrendiğimize göre, şimdi listenin en sonuna değil de kendi belirleyeceğimiz başka bir noktasına öğe eklememizi sağlayacak parçacığı görebiliriz:
insert parçacığı
İşte bu "insert" parçacığı yardımıyla listenin herhangi bir noktasına öğe ekleyebiliyoruz. Bu kelime Türkçe'de "yerleştirmek, sokmak" anlamına geliyor... insert parçacığı yardımıyla listenin 1. sırasına (Dikkat edin, 0'ıncı sıraya demiyoruz) "Ahmet"i yerleştirebiliriz:
liste.insert(1, "Ahmet")
Burada parantez içindeki ilk sayı, "Ahmet" öğesinin liste içinde yerleştirileceği sırayı gösteriyor. Bu komutun çıktısı şöyle olur:
["Hale", "Ahmet", "Jale", "Lale", 12, 23, "Mehmet"]
Gördüğünüz gibi, "1" sayısı Python için "ilk" anlamına gelmiyor. Eğer listemizin en başına bir öğe eklemek istiyorsak şu komutu kullanacağız:
liste.insert(0, "Veli")
Bu parçacık da tıpkı append parçacığında olduğu gibi listeye yalnızca bir adet öğe eklememize izin verir...
extend parçacığı
Bu kelime "genişletmek, uzatmak" anlamına geliyor. extend parçacığı, oluşturduğumuz listeleri "genişletmemizi" veya "uzatmamızı" sağlar. Bu parçacığın işlevini anlatabilmenin en iyi yolu tabii ki örnekler üzerinde çalışmak. Şimdi yeni bir liste oluşturalım:
yeni_liste = ["Simovic", "Prekazi", "Jardel", "Nouma"]
Şimdi de şu komutu verip ne elde ettiğimize bir bakalım:
liste.extend(yeni_liste)
Bu komutun çıktısı şöyle olacaktır:
['Veli', 'Hale', 'Ahmet', 'Jale', 'Lale', 12, 23, 'Mehmet', 'Simovic', 'Prekazi', 'Jardel', 'Nouma']
Gördüğünüz gibi, extend parçacığı iki listenin öğelerini tek bir liste içinde birleştirmeye yarıyor. Ya da başka bir ifadeyle, bir listeyi genişletiyor, uzatıyor...
extend parçacığıyla yaptığımız işlemin aynısını "+" işlecini kullanarak şu şekilde de yapabiliriz:
liste + yeni_liste
remove parçacığı
Liste oluşturmayı, append ve insert parçacıkları yardımıyla listeye öğeler eklemeyi öğrendik... Peki ya listemizden bazı öğeleri nasıl çıkaracağız? Python'da bu işi yapmamızı sağlayan iki tane parçacık var. Biz önce bunlardan ilki olan remove parçacığına bakacağız. Bu kelime "çıkarmak, kaldırmak, silmek" anlamına geliyor.
Diyelim ki listemizden "Nouma" öğesini çıkarmak/kaldırmak istiyoruz. O zaman şu komutu vermemiz gerekir:
liste.remove("Nouma")
Eğer listede "Nouma" adlı birden fazla öğe varsa, Python listede bulduğu ilk "Nouma"yı çıkaracaktır...
pop parçacığı
İngilizce'de "pop" kelimesi, "fırlamak, pırtlamak, aniden açılmak" gibi anlamlar taşıyor. Biz bu kelimeyi internette bir adrese tıkladığımızda pırt diye önümüze çıkan "pop up"lardan yani "açılır pencereler"den hatırlıyoruz... Python'da listeler ile birlikte kullandığımız "pop" parçacığı ise listeden bir öğe silerken, bu sildiğimiz öğenin pırt diye ekrana yazdırılmasını sağlıyor...
Şu komutu deneyelim:
liste.pop()
Gördüğünüz gibi, Python bu pop parçacığı yardımıyla listenin son öğesini çıkaracak, üstelik çıkardığı öğeyi ekrana yazdıracaktır. Eğer bu komutu şöyle verirsek ne olur?
liste.pop(0)
Bu komut ise listedeki "ilk" yani "0'ıncı" öğeyi çıkarır ve çıkardığı öğeyi ekrana yazdırır. Anladığınız gibi pop parçacığı ile remove parçacığı arasındaki en temel fark pop parçacığının silinen öğeyi ekrana yazdırması, remove parçacığının ise yazdırmamasıdır... Ayrıca pop parçacığında isim belirterek listeden silme işlemi yapamazsınız. Mutlaka silinecek öğenin liste içindeki sırasını vermelisiniz. remove parçacığında da bu durumun tam tersi söz konusudur. Yani remove parçacığında da sıra belirtemezsiniz; isim vermeniz gerekir...
Şimdiye kadar bir listenin en sonuna nasıl öğe ekleyeceğimizi (append parçacığı), listenin herhangi bir yerine nasıl öğe ekleyeceğimizi (insert parçacığı), listeden isim vererek nasıl öğe çıkaracağımızı (remove parçacığı), listeden sayı vererek nasıl öğe çıkaracağımızı (pop parçacığı) öğrendik.
Buraya kadar öğrendiğimiz parçacıklar listenin boyutunda değişiklikler yapmamızı sağlıyordu. Şimdi öğreneceğimiz parçacıklar ise listelerin boyutlarında herhangi bir değişiklik yapmıyor, yalnızca öğelerin yerlerini değiştiriyor veya bize liste hakkında ufak tefek bazı bilgiler veriyorlar.
index parçacığı
Diyelim ki listedeki "Jardel" öğesinin listenin kaçıncı sırasında olduğunu merak ediyorsunuz. İşte bu index parçacığı sizin aradığınız şey! Bu parçacığı şöyle kullanıyoruz:
liste.index("Jardel")
Bu komut, "Jardel" öğesinin liste içinde kaçıncı sırada olduğunu gösterecektir bize...
sort parçacığı
Bazen listemizdeki öğeleri alfabe sırasına dizmek isteriz. (isteriz, değil mi?) İşte yüreğimizde böyle bir istek hasıl olduğunda kullanacağımız parçacığın adı "sort":
liste.sort()
reverse parçacığı
Bu parçacık listedeki öğelerin sırasını ters yüz eder. Şöyle ki:
liste.reverse()
Bu komutu üst üste iki kez verirseniz listeniz ilk haline dönecektir. Yani bu komut aslında sort parçacığının yaptığı gibi alfabe sırasını kaale almaz... Listenizdeki öğelerin sırasını ters çevirmekle yetinir.
count parçacığı
Listelerle birlikte kullanabileceğimiz başka bir parçacık da budur. Görevi ise liste içinde bir öğenin kaç kez geçtiğini söylemektir:
liste.count("Prekazi")
Buraya kadar listeleri nasıl yöneteceğimizi; yani:
Nasıl liste oluşturacağımızı - - liste = [] bu listeye nasıl yeni öğeler ekleyeceğimizi - - liste.append(), liste.insert() listemizi nasıl genişleteceğimizi - - liste.extend() eklediğimiz öğeleri nasıl çıkaracağımızı - - liste.remove(), liste.pop() liste içindeki öğelerin sırasını bulmayı - - liste.index() öğeleri abc sırasına dizmeyi - - liste.sort() öğelerin sırasını ters çevirmeyi - - liste.reverse() listedeki öğelerin liste içinde kaç kez geçtiğini bulmayı - - liste.count()
öğrendik...
Bunların yanısıra Python'un liste öğelerini kendi içinde sıralama mantığını da öğrendik... Buna göre unutmamamız gereken şey; Python'un liste öğelerini saymaya 0'dan başladığı... İsterseniz bu mantık üzerine bazı çalışmalar yapalım. Örneğin şunlara bir bakalım:
liste[0]
Bu komut listenin "ilk" yani "0'ıncı" öğesini ekrana yazdıracaktır. Dikkat edin, yine köşeli parantez kullandık.
Peki listedeki son öğeyi çağırmak istersek ne yapacağız? Eğer listemizde kaç tane öğe olduğunu bilmiyorsak ve len() komutuyla bunu öğrenmeyecek kadar tembelsek şu komutu kullanacağız:
liste[-1]
Tabii ki siz len(liste) komutu verip önce listenin uzunluğunu da öğrenebilirsiniz. Buna göre, Python saymaya 0'dan başladığı için, çıkan sayının bir düşüğü listenin son öğesinin sırasını verecektir. Yani eğer len(liste) komutunun çıktısı 5 ise, listedeki son öğeyi:
liste[4]
komutuyla da çağırabilirsiniz...
Olur ya, eğer kulağınızı tersten göstermek isterseniz len(liste) komutuyla bulduğunuz sayıyı eksiye dönüştürüp listenin ilk öğesini çağırabilirsiniz. Yani, eğer len(liste) komutunun çıktısı 5 ise:
liste[-5]
komutu size ilk öğeyi verecektir, tıpkı liste[0] komutunun yaptığı gibi...
Python bize bu mantık üzerinden başka olanaklar da tanıyor. Mesela tanımladığımız bir listedeki öğelerin tamamını değil de yalnızca 2. ve 3. öğeleri görmek istersek şu komuttan faydalanıyoruz (Saymaya 0'dan başlıyoruz):
liste[2:4]
Gördüğünüz gibi, yukarıdaki komutta birinci sayı dahil ikinci sayı hariç olacak şekilde bu ikisi arasındaki öğeler listelenecektir... Yani "liste[2:4]" komutu listedeki 2. ve 3. öğeleri yazdıracaktır.
Eğer ":" işaretinden önce veya sonra herhangi bir sayı belirlemezseniz Python varsayılan olarak oraya ilk veya son öğeyi koyacaktır:
liste[:3]
komutu şu komutla aynıdır:
liste[0:3]
Aynı şekilde;
liste[0:]
komutu da şu komutla aynıdır (Listenin 5 öğeli olduğunu varsayarsak):
liste[0:5]
Bu yöntemlerle listeye yeni öğe yerleştirmek, listeden öğe silmek, vb. de mümkündür. Yani yukarıda "parçacıklar" yardımıyla yaptığımız işlemleri başka bir şekilde de yapabilmiş oluyoruz... Önce temiz bir liste oluşturalım:
liste = ["elma", "armut", "kiraz", "karpuz", "kavun"]
Bu listenin en sonuna bir veya birden fazla öğe eklemek için (append parçacığına benzer...):
liste[5:5] = ["domates", "salata"] ['elma', 'armut', 'kiraz', 'karpuz', 'kavun', 'domates', 'salata']
Hatırlarsanız, append parçacığıyla listeye yalnızca bir adet öğe ekleyebiliyorduk.. Yukarıdaki yöntem yardımıyla birden fazla öğe de ekleyebiliyoruz listeye.
Bu listenin 3. sırasına bir veya birden fazla öğe yerleştirmek için (insert parçacığına benzer...):
liste[3:3] = ["kebap", "lahmacun"] ['elma', 'armut', 'kiraz', 'kebap', 'lahmacun', 'karpuz', 'kavun', 'domates', 'salata']
Bu listenin 2. sırasındaki öğeyi silmek için (remove parçacığına benzer...):
liste[2:3] = [] ['elma', 'armut', 'kebap', 'lahmacun', 'karpuz', 'kavun', 'domates', 'salata']
Bu listenin 2. sırasındaki öğeyi silip yerine bir veya birden fazla öğe eklemek için:
liste[2:3] = ["nane", "limon"] ['elma', 'armut', 'nane', 'limon', 'kebap', 'lahmacun', 'karpuz', 'kavun', 'domates', 'salata']
Bu listenin 2. sırasındaki öğeyi silip yerine bir veya birden fazla öğeye sahip bir liste yerleştirmek için:
liste[2] = ["ruj", "maskara", "rimel"] ['elma', 'armut', ['ruj', 'maskara', 'rimel'], 'nane', 'limon', 'kebap', 'lahmacun', 'karpuz', 'kavun', 'domates', 'salata']
Hangi işlemi yapmak için nasıl bir sayı dizilimi kullandığımıza dikkat edin... Bu komutlar başlangıçta biraz karışık gelebilir... Ama eğer yeterince örnek yaparsanız bu komutları karıştırmadan uygulamayı öğrenebilirsiniz.
Artık listeler konusunu burada noktalayıp "demetler" (tuples) konusuna geçebiliriz...
Demetler
Demetler (tuples) listelere benzer. Ama listeler ile aralarında çok temel bir fark vardır. Listeler üzerinde oynamalar yapabiliriz. Yani öğe ekleyebilir, öğe çıkarabiliriz. Demetlerde ise böyle bir şey yoktur...
Demeti şu şekilde tanımlıyoruz:
demet = "Ali", "Veli", 49, 50
Gördüğünüz gibi, yaptığımız bu iş değişken tanımlamaya çok benziyor. İstersek demetin öğelerini parantez içinde de gösterebiliriz.
demet2 = ("Ali", "Veli", 49, 50)
Parantezli de olsa parantezsiz de olsa yukarıda tanımladıklarımızın ikisi de "demet" sınıfına giriyor. İsterseniz bu durumu teyit edelim:
type(demet) <type 'tuple'>
type(demet2) <type 'tuple'>
Peki boş bir demet nasıl oluşturulur? Çok basit:
demet = ()
Peki tek öğeli bir demet nasıl oluşturulur? O kadar basit değil. Aslında basit ama biraz tuhaf:
hede = ("inek",)
Gördüğünüz gibi, tek öğeli bir demet oluşturabilmek için öğenin yanına bir virgül koyuyoruz! Hemen teyit edelim:
type(hede) <type 'tuple'>
O virgülü koymazsak ne olur?
hede2 = ("inek")
hede2'nin tipini kontrol edelim:
type(hede2) <type 'str'>
Demek ki, virgülü koymazsak demet değil, alelade bir karakter dizisi oluşturmuş oluyoruz...
Yukarıda anlattığımız şekilde bir demet oluşturma işine "demetleme" (tuple packing) adı veriliyor. Bunun tersini de yapabiliriz. Buna da "demet açma" deniyor (sequence unpacking):
Önce demetleyelim:
aile = "Anne", "Baba", "Kardesler"
Şimdi demeti açalım:
a, b, c = aile
Bu şekilde komut satırına "a" yazarsak, "Anne" öğesi; "b" yazarsak "Baba" öğesi; c yazarsak "Kardesler" öğesi ekrana yazdırılacaktır. "Demet açma" işleminde dikkat etmemiz gereken nokta, eşittir işaretinin sol tarafında demetteki öğe sayısı kadar değişken adı belirlememiz gerektiğidir...
Peki bu demetler ne işe yarar? Bir defa, demetler listelerin aksine değişiklik yapmaya müsait olmadıklarından listelere göre daha güvenlidirler. Yani yanlışlıkla değiştirmek istemediğiniz veriler içeren bir liste hazırlamak istiyorsanız demetleri kullanabilirsiniz...
Sözlükler
Sözlüğün ne demek olduğunu tanımlamadan önce gelin isterseniz işe bir örnekle başlayalım:
sozluk = {"elma" : "meyve", "domates" : "sebze", 1 : "sayi"}
Burada örneğin, "elma" bir "anahtar", "meyve" ise bu anahtarın "değeri"dir. Aynı şekilde "sebze" değerinin anahtarı "domates"tir.
Dolayısıyla Python'da sözlük; "anahtar" ve "değer" arasındaki ilişkiyi gösteren bir veri tipidir! Mesela bir adres veya telefon defteri yaratmak istediğimizde bu sözlüklerden faydalanabiliriz. Yani "sözlük" denince aklımıza sadece bildiğimiz sözlükler gelmemeli... Şu örneğe bir bakalım:
telefon_defteri = {"Ahmet" : "0533 123 45 67", "Kezban": "0532 321 54 76", "Feristah": "0533 333 33 33"}
Sözlük tanımlarken dikkat etmemiz gereken birkaç nokta var. Bunlardan birincisi öğeleri belirlerken küme parantezlerini kullanıyor olmamız. İkincisi karakter dizilerinin yanısıra sayıları da tırnak içinde gösteriyor olmamız... İsterseniz sayıları tırnaksız kullanırsanız ne olacağını deneyerek görebilirsiniz... Ancak eğer gireceğiniz sayı çok uzun değil ve 0 ile başlamıyorsa bu sayıyı tırnaksız da yazabilirsiniz... Üçüncüsü iki nokta üst üste ve virgüllerin nerede, nasıl kullanıldığına da dikkat etmeliyiz.
Şimdi gelelim sözlüklerle neler yapabileceğimize... Şu komuta bir bakalım:
telefon_defteri["Ahmet"]
veya
telefon_defteri["Kezban"]
Bu komutlar "Ahmet" ve "Kezban" adlı "anahtar"ların karşısında hangi "veri" varsa onu ekrana yazdıracaktır... Dikkat edin, sözlükten öğe çağırırken küme parantezlerini değil, köşeli parantezleri kullanıyoruz. Bu arada aklınızda bulunsun, sözlük içindeki öğeleri "anahtar"a göre çağırıyoruz, "veri"ye göre değil. Yani iki nokta üst üste işaretinin solundaki ifadeleri kullanıyoruz öğeleri çağırırken, sağındakileri değil...
Şimdi gelelim bu sözlükleri nasıl yöneteceğimize... Diyelim ki sözlüğümüze yeni bir öğe eklemek istiyoruz:
telefon_defteri["Zekiye"] = "0544 444 01 00"
Peki sözlüğümüzdeki bir öğenin değerini değiştirmek istersek ne yapacağız?
telefon_defteri["Kezban"] = "0555 555 55 55"
Buradan anladığımız şu: Bir sözlüğe yeni bir öğe eklerken de, varolan bir öğeyi değiştirirken de aynı komutu kullanıyoruz... Demek ki bir öğeyi değiştirirken aslında öğeyi değiştirmiyor, silip yerine yenisini koyuyoruz...
Eğer bir öğeyi listeden silmek istersek şu komutu kullanıyoruz:
del telefon_defteri["Kezban"]
Eğer biz sözlükteki bütün öğeleri silmek istersek şu komut kullanılıyor:
telefon_defteri.clear()
if-elif-else Yerine Sözlük Kullanmak
Şimdi isterseniz, Python sözlüklerinin pratikliğini bir örnek yardımıyla görmeye çalışalım:
Diyelim ki bir havadurumu programı yazmak istiyoruz. Tasarımıza göre kullanıcı bir şehir adı girecek. Program da girilen şehre özgü havadurumu bilgilerini ekrana yazdıracak. Bunu yapabilmek için, daha önceki bilgilerimizi de kullanarak şöyle bir şey yazabiliriz:
#!/usr/bin/env python
#-*-coding:utf8-*-
soru = raw_input("Bulunduğunuz şehrin adını tamamı küçük harf olacak şekilde yazınız: ")
if soru == "istanbul":
print "gök gürültülü ve sağanak yağışlı"
elif soru == "ankara":
print "açık ve güneşli"
elif soru == "izmir":
print "bulutlu"
else:
print "Bu şehre ilişkin havadurumu bilgisi bulunmamaktadır."
Ama yukarıdaki yöntemin, biraz meşakkatli olacağı açık. Sadece üç şehir için havadurumu bilgilerini sorgulayacak olsak mesele değil, ancak onlarca şehri kapsayacak bir program üretmekse amacımız, yukarıdaki yöntem yerine daha pratik bir yöntem uygulamak akıl sağlığımız için de gayet yerinde bir tercih olacaktır.
İşte bu noktada programcının imdadına Python'daki sözlük veritipi yetişecektir. Yukarıdaki kodların yerine getirdiği işlevi, şu kodlarla da gerçekleştirebiliriz:
#!/usr/bin/env python
#-*-coding:utf8-*-
soru = raw_input("Bulunduğunuz şehrin adını tamamı küçük harf olacak şekilde yazınız: ")
cevap = {"istanbul":"gök gürültülü ve sağanak yağışlı", "ankara":"açık ve güneşli", "izmir":"bulutlu"}
print cevap.get(soru,"Bu şehre ilişkin havadurumu bilgisi bulunmamaktadır.")
Gördüğünüz gibi, ilk önce, normal biçimde, kullanıcıya sorumuzu soruyoruz. Ardından da "anahtar-değer" çiftleri şeklinde şehir adlarını ve bunlara karşılık gelen havadurumu bilgilerini bir sözlük içinde depoluyoruz.
Daha sonra, sözlük metotlarından biri olan "get" metodunu seçiyoruz. Bu metot bize sözlük içinde bir değerin varolup olmadığını denetleme imkanının yanısıra, adı geçen değerin sözlük içinde varolmaması durumunda kullanıcıya gösterilecek bir mesaj seçme olanağı da sunar. Python sözlüklerinde bulunan bu "get" metodu bizi bir "else" veya sonraki derslerimizde işleyeceğimiz "try-except" bloğu kullanarak hata yakalamaya uğraşma zahmetinden de kurtarır.
Burada;
print cevap.get(soru,"Bu şehre ilişkin havadurumu bilgisi bulunmamaktadır.")
satırı yardımıyla "soru" adlı değişkenin değerinin sözlük içinde varolup varolmadığını sorguluyoruz. Eğer kullanıcının girdiği şehir adı sözlüğümüz içinde bir "anahtar" olarak tanımlanmışsa, bu anahtarın değeri ekrana yazdırılacaktır. Eğer kullanıcının girdiği şehir adı sözlüğümüz içinde bulunmuyorsa, bu defa kullanıcıya "Bu şehre ilişkin havadurumu bilgisi bulunmamaktadır." biçiminde bir mesaj gösterilecektir.
"if" deyimleri yerine sözlüklerden yararlanmanın, yukarıda bahsedilen faydalarının dışında bir de şu yararları vardır:
1. Öncelikle sözü geçen senaryo için sözlükleri kullanmak programcıya daha az kodla daha çok iş yapma olanağı sağlar.
2. Sözlük programcının elle oluşturacağı if-elif-else bloklarından daha performanslıdır ve bize çok hızlı bir şekilde veri sorgulama imkanı sağlar.
3. Kodların daha az yer kaplaması sayesinde programın bakımı da kolaylaşacaktır.
4. Tek tek "if-elif-else" blokları içinde şehir adı ve buna ilişkin havadurumu bilgileri tanımlamaya kıyasla sözlük içinde yeni "anahtar-değer" çiftleri oluşturmak daha pratiktir.
Böylelikle Python'da Listeler, Demetler ve Sözlükler konusunu bitirmiş olduk... Bu konuyu sık sık tekrar etmek, hiç olmazsa arada sırada göz gezdirmek bazı şeylerin zihnimizde yer etmesi açısından oldukça önemlidir...
Böylelikle Python'da Listeler, Demetler ve Sözlükler konusunu bitirmiş olduk... Bu konuyu sık sık tekrar etmek, hiç olmazsa arada sırada göz gezdirmek bazı şeylerin zihnimizde yer etmesi açısından oldukça önemlidir...
Önceki Bölüm: Döngüler
Sonraki Bölüm Fonksiyonlar
Bu yazı Programlama bölümünün bir parçasıdır.
