• Sonuç bulunamadı

4.6 “in” Parçacı ˘ gı ile Aitlik Kontrolü

4.7 Listelerin Metotları

4.7.1 append Metodu

Bir önceki bölümde append() metoduna de˘ginmi¸stik. Orada söyledi˘gimize göre bu metodun görevi bir listeye ö˘ge eklemek idi. Zaten “append” kelimesi ˙Ingilizce’de “eklemek, ili¸stirmek”

gibi anlamlara gelir. Hemen bu metodu nasıl kullanabilece˘gimizi gösteren bir örnek yapalım.

Önce bir liste tanımlayalım. ˙Isterseniz bo¸s bir liste olsun bu:

>>> liste = []

Listemizi kontrol edelim:

>>> print(liste)

[]

Hakikaten listemiz bo¸s!

¸

Simdi bu bo¸s listeye bir ö˘ge ekleyelim:

>>> liste.append("Ubuntu")

¸

Simdi listemizi tekrar kontrol edelim:

>>> print(liste)

[’Ubuntu’]

Bu listeye ¸simdi ba¸ska bir ö˘ge daha ekleyelim:

>>> liste.append("Debian")

Listemize bakalım tekrar:

>>> print(liste)

[’Ubuntu’, ’Debian’]

Listemizin ö˘gelerine tek tek eri¸sebilece˘gimizi biliyorsunuz:

>>> print(liste[0])

Ubuntu

...veya..

>>> print(liste[1])

Debian

Hatta liste ö˘gelerini ters de çevirebiliriz:

>>> print(liste[::-1])

[’Debian’, ’Ubuntu’]

Peki ya bir ö˘geyi de˘gi¸stirmek istersek...

>>> liste[1] = "Gentoo"

>>> print(liste)

[’Debian’, ’Gentoo’]

append() metodunu kullanarak bir listeye sadece tek bir ö˘ge ekleyebiliriz. Yani ¸söyle bir ¸sey mümkün de˘gildir:

>>> liste.append("SuSe", "RedHat")

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: append() takes exactly one argument (2 given)

Bu hata çıktısına göreappend() metodu yalnızca tek bir ö˘ge alabiliyor. Biz ise 2 tane vermi¸siz...

Ama ¸söyle bir ¸sey yapmak mümkündür:

>>> liste.append(["SuSe", "RedHat"])

Gördü˘günüz gibi, “SuSe” ve “RedHat” ö˘gelerini bir liste olarak ekledik. Yalnız, ö˘geleri bu ¸ sek-ilde ekledi˘gimizde listenin durumu pek bekledi˘giniz gibi olmayabilir:

>>> print(liste)

[’Debian’, ’Gentoo’, [’SuSe’, ’RedHat’]]

Gördü˘günüz gibi, “SuSe” ve “RedHat” ö˘geleri listeye ayrı bir liste olarak eklendi. Yani aslında yine listeye tek bir ö˘ge eklenmi¸s oldu:

>>> print(liste[2])

[’SuSe’, ’RedHat’]

Demek ki listemizin üçüncü ö˘gesi buymu¸s... Burada sadece “SuSe” ö˘gesini almak isterseniz

¸

söyle bir ¸sey yazmanız gerekti˘gini biliyorsunuz:

>>> print(liste[2][0])

’SuSe’

“RedHat”i almak için ise:

>>> print(liste[2][1])

’RedHat’

E˘ger append() metodunu kullanarak bir listeye birden fazla ö˘ge eklemek isterseniz elbette çaresiz de˘gilsiniz. for döngüsü ne güne duruyor?

>>> for s in ["Fedora", "Knoppix"]:

... liste.append(s)

[’Debian’, ’Gentoo’, [’SuSe’, ’RedHat’], ’Fedora’, ’Knoppix’]

Dedi˘gimiz gibi,for döngüsünü kullanarak bu ¸sekilde birden fazla ö˘geyi listeye ekleyebilirsiniz.

Ama isterseniz, bu i¸slem için üretilmi¸s ayrı bir metottan da yararlanabilirsiniz. Bu yeni metodun adı extend(). Bunu bir sonraki bölümde görece˘giz... Ama append() metodu ile ilgili olarak söylememiz gerekenler henüz bitmedi.

append() metodu liste metotları içinde en çok kullanılan metottur. Dolayısıyla listelerin ba¸ska hiçbir metodunu bilmeseniz de append() metodunu bilmeniz gerekir. Bu metodu kullanarak bazı örnekler vermeye devam edelim. Mesela ¸su programa bakalım:

tek_sayılar = []

çift_sayılar = []

ba¸sla = 1

bilgi = """Rastgele sayılar giriniz.

Her sayı giri¸ste enter tu¸suna basınız.

˙I¸slemi bitirmek için "ç" tu¸suna basınız:"""

print("Girdi˘giniz ¸su sayılar çifttir: ", çift_sayılar) print("Girdi˘giniz ¸su sayılar ise tektir: ", tek_sayılar)

Burada öncelikle “tek_sayılar” ve “çift_sayılar” adlı iki farklı liste olu¸sturduk. Kullanıcıdan gele-cek tek ve çift sayıları ayrı ayrı listelerde depolayaca˘gız.

Ardından “ba¸sla = 1” ¸seklinde bir kod yazarak “ba¸sla” de˘gi¸skenini “1” olarak ayarlıyoruz. Bu de˘gi¸sken, programın biti¸sini kontrol etmemizi sa˘glayacak.

Daha sonra “bilgi” adlı ba¸ska bir de˘gi¸sken daha tanımlıyoruz. Burada kullanıcıyı pro-gramın nasıl çalı¸stırılaca˘gı hakkında bilgilendiriyoruz. Buna göre kullanıcıdan rastgele sayılar girmesini, her sayıdan sonra da enter tu¸suna basmasını istiyoruz. E˘ger kullanıcı programdan çıkmak isterse “ç” tu¸suna basacak.

Bir sonraki satırda bilgi adlı de˘gi¸skeni ekrana yazdırıyoruz.

Daha sonra, programımızın sürekli olarak çalı¸smasını temin etmek için birwhile döngüsü ku-ruyoruz. Programımızın sürekli olarak çalı¸sması “ba¸sla” adlı de˘gi¸skenin de˘gerinin “1” olmasına ba˘glı. En ba¸sta, bu “ba¸sla” adlı de˘gi¸skenin de˘gerini “1” olarak ayarladı˘gımız için programımız sürekli olarak çalı¸smaya devam edecektir.

Bir alttaki satırda kullanıcıdan veri almamızı sa˘glayacak olaninput() fonksiyonunu yazıyoruz.

Dikkat edersenizinput() fonksiyonunu bo¸s bıraktık. Neden? Çünkü zaten kullanıcıya göstere-ce˘gimiz bilgiyi en ba¸sta “bilgi” adlı bir de˘gi¸sken tanımlayarak gösterdik. Elbette isteseydik bu input() fonksiyonuyla da kullanıcıya bilgi verebilirdik. Ama burada input() fonksiyonunu bo¸s bırakmamızın nedeni biraz da estetik kaygılar.. Çünkü programımız içinde birwhile döngüsü oldu˘gu için, e˘ger buradainput() fonksiyonunu bo¸s bırakmazsak, kullanıcı her sayı giri¸sinde bu input() fonksiyonu içinde tanımladı˘gımız karakter dizisini de görecektir. ˙Isterseniz, input() fonksiyonunu bo¸s bırakmadan bir deneme yapın. Görece˘giniz gibi, kullanıcının her sayı gir-i¸sinde tekrar tekrar aynı karakter dizisini görmesi pek ho¸s olmuyor...

Bir sonraki adımda programdan çıkı¸s ko¸sulumuzu belirliyoruz. E˘ger kullanıcı “ç” harfine basarsa “ba¸sla” de˘gi¸skeninin de˘geri “0” olarak ayarlanacaktır. Daha önce tanımladı˘gımız while döngüsüne göre, programımızın sürekli olarak çalı¸sması “ba¸sla” de˘gi¸skeninin de˘gerinin

“1” olmasına ba˘glıydı. Kullanıcı “ç” tu¸suna bastı˘gında “ba¸sla” de˘gi¸skeninin de˘geri “0” olaca˘gı için programımız duracaktır.

Hemen ardından kullanıcıdan gelen sayıların çift olup olmadı˘gına bakıyoruz. Burada “soru”

de˘gi¸skenini int() fonksiyonu yardımıyla sayıya çevirdi˘gimize dikkat edin. Bildi˘giniz gibi, input() fonksiyonunun verdi˘gi de˘gerin tipi karakter dizisidir. Kullanıcıdan gelen bilgiyle ar-itmetik bir i¸slem yapabilmek için bu bilgiyi öncelikle sayıya dönü¸stürmemiz gerekir. Bir önceki satırda programdan çıkı¸s ko¸sulunu tanımlarken “soru” de˘gi¸skenini sayıya dönü¸stürmedi˘gimize

dikkat edin. Aksi halde kullanıcı “ç” tu¸suna bastı˘gında Python “ç” harfini sayıya dönü¸ stürm-eye çalı¸sacak, bunu ba¸saramayınca da hata verecektir. O yüzden orada input() fonksiy-onuna herhangi bir dönü¸stürme i¸slemi uygulamadık... Çift sayıları belirledikten sonra

“çift_sayılar.append(soru)” komutu yardımıyla kullanıcıdan aldı˘gımız çift sayıları “çift_sayılar”

adlı listeye ekliyoruz.

¸

Simdi sıra geldi tek sayıları belirlemeye. Bunu da birelse: blo˘gu yardımıyla yapıyoruz. E˘ger kullanıcıdan gelen bilgi bir çift sayı de˘gilse veya kullanıcı “ç” harfine basmamı¸ssa kullanıcının girdi˘gi sayı bir tek sayıdır. Bunu da “tek_sayılar” adlı listeye ekliyoruz. Tabii kullanıcı “ç” harfi dı¸sında ba¸ska bir harfe basarsa programımız hata verecektir. Henüz bu tür durumlara kar¸sı önlem almayı bilmiyoruz. Ama ilerde bunu nasıl yapaca˘gımızı da ö˘grenece˘giz. Fakat ¸simdilik

¸

söyle bir kod yazarak en azından bu tür bir problemi büyük ölçüde çözmü¸s olursunuz:

tek_sayılar = []

çift_sayılar = []

kontrol = "0123456789"

ba¸sla = 1

bilgi = """Rastgele sayılar giriniz.

Her sayı giri¸ste enter tu¸suna basınız.

˙I¸slemi bitirmek için "ç" tu¸suna basınız:"""

print(bilgi) while ba¸sla == 1:

soru = input() if soru == "ç":

ba¸sla = 0

elif soru[0] not in kontrol:

print("lütfen bir sayı giriniz") elif "." in soru:

print("yoksa ondalık bir sayı mı girdiniz?")

elif int(soru) % 2 == 0:

çift_sayılar.append(soru) else:

tek_sayılar.append(soru)

print("Girdi˘giniz ¸su sayılar çifttir: ", çift_sayılar) print("Girdi˘giniz ¸su sayılar ise tektir: ", tek_sayılar)

Burada bir önceki kodlara ilave olarak bir “kontrol” de˘gi¸skeni tanımlıyoruz. Bu de˘gi¸sken 0’dan 9’a kadar olan bütün sayıları içeriyor. Daha sonra program içinde iki adetelif... blo˘gu olu¸ s-turarak bu kontrol de˘gi¸skeninin içindeki sayılara göre bazı denetlemeler yapıyoruz. Burada daha önce ö˘grendi˘gimiz in ve not parçacıklarını kullandı˘gımıza dikkat edin. Bu parçacık-lar yardımıyla, kullanıcının girdi˘gi verilerin kontrol de˘gi¸skeni içinde olup olmadı˘gını denetliy-oruz. Yani “aitlik” kontrolü yapıydenetliy-oruz... Burada ayrıca kontrol de˘gi¸skenimizin bir karakter dizisi oldu˘guna dikkat edin. Daha önce de söyledi˘gimiz gibi,in ve not parçacıkları sadece listelere özgü bir özellik de˘gildir. Bunları Python’daki ba¸ska ö˘gelerle birlikte de kullanabiliriz. Dedi˘gimiz gibi, bu kodlar da kar¸sı kar¸sıya oldu˘gumuz sorunu tam anlamıyla çözmeye yetmez. Bu sorunun kökten çözümünü birkaç ders sonra görece˘giz.

¸

Simdi artık bir sonraki metodumuzu incelemeye geçebiliriz.