d1100108 gÖrsel programlama ve verİ yapilari …Öğretim Üyesi dr. Öğr. Üyesi mahmut durgun...

55
Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta [email protected] Ders Zamanı Perşembe 08:30 12:15 Derslik MBL Dersin Amacı Bu dersin amacı, nesneye dayalı programlama konusuna bir giriş yapmak, nesne tabanlı bir programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına değinmektir. D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI

Upload: others

Post on 09-Mar-2020

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUNOda NumarasıE-posta [email protected] Zamanı Perşembe 08:30 – 12:15

Derslik MBL

Dersin AmacıBu dersin amacı, nesneye dayalı programlama konusuna bir giriş yapmak, nesne tabanlı bir

programlama dili ile programlama konusuna ve programlama kullanılan veri yapılarına

değinmektir.

D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI

Page 2: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

5. Konu Ders İçeriği

Listeler

Listeler Hakkında Genel Bilgi

Liste Elemanlarına Erişim

İndis

Page 3: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

https://belgeler.yazbel.com/python-istihza/

Page 4: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Listeler ve DemetlerBu bölüme gelene kadar yalnızca iki farklı veri tipi görmüştük. Bunlardan biri karakter dizileri, öteki ise sayılardı. Ancak tabii ki Python’daki veri tipleri yalnızca bu ikisiyle sınırlı değildir. Python’da karakter dizileri ve sayıların dışında, başka amaçlara hizmet eden, başka veri tipleri de vardır. İşte biz bu bölümde iki farklı veri tipi daha öğreneceğiz. Bu bölümde ele alacağımız veri tiplerinin adı ‘liste’ (list) ve ‘demet’ (tuple).

Page 5: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Liste TanımlamakListeleri tanımaya, bu veri tipini nasıl tanımlayacağımızı öğrenerek başlayalım.

Hatırlarsanız bir karakter dizisi tanımlayabilmek için şöyle bir yol izliyorduk:

>>> kardiz = "karakter dizisi"Yani herhangi bir öğeyi karakter dizisi olarak tanımlayabilmek için yapmamız gereken tek şey o öğeyi tırnak içine almaktı. Herhangi bir öğeyi (tek, çift veya üç) tırnak içine aldığımızda karakter dizimizi tanımlamış oluyoruz. Liste tanımlamak için de buna benzer bir şey yapıyoruz. Dikkatlice bakın:

>>> liste = ["öğe1", "öğe2", "öğe3"]Gördüğünüz gibi, liste tanımlamak da son derece kolay. Bir liste elde etmek için, öğeleri birbirinden virgülle ayırıp, bunların hepsini köşeli parantezler içine alıyoruz.

Page 6: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Karakter dizilerini anlatırken, herhangi bir nesnenin karakter dizisi olup olmadığından emin olmak için type() fonksiyonundan yararlanabileceğimizi söylemiştik. Eğer bir nesne type() fonksiyonuna <class ‘str’> cevabı veriyorsa o nesne bir karakter dizisidir. Listeler için de buna benzer bir sorgulama yapabiliriz:

>>> liste = ["öğe1", "öğe2", "öğe3"]>>> type(liste)

<class 'list'>Bu çıktıdan anlıyoruz ki, liste veri tipi type() fonksiyonuna <class‘list’> cevabı veriyor. Dolayısıyla, eğer bir nesne type() fonksiyonuna <class ‘list’> cevabı veriyorsa o nesnenin bir liste olduğunu rahatlıkla söyleyebiliriz.

Page 7: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Yukarıda tanımladığımız liste adlı listeye baktığımızda dikkatimizi bir şey çekiyor olmalı. Bu listeye şöyle bir baktığımızda, aslında bu listenin, içinde üç adet karakter dizisi barındırdığını görüyoruz. Gerçekten de listeler, bir veya daha fazla veri tipini içinde barındıran kapsayıcı bir veri tipidir. Mesela şu listeye bir bakalım:

>>> liste = ["Ahmet", "Mehmet", 23, 65, 3.2]Gördüğünüz gibi, liste içinde hem karakter dizileri (“Ahmet”, “Mehmet”), hem de sayılar (23, 65, 3.2) var.

Dahası, listelerin içinde başka listeler de bulunabilir:

>>> liste = ["Ali", "Veli", ["Ayşe", "Nazan", "Zeynep"], 34, 65, 33, 5.6]

Page 8: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Bu liste adlı değişkenin tipini sorgularsak şöyle bir çıktı alacağımızı biliyorsunuz:

>>> type(liste)

<class 'list'>Bir de şunu deneyelim:

for öğe in liste:print("{} adlı öğenin veri tipi: {}".format(öğe, type(öğe)))

Bu kodları çalıştırdığımızda da şöyle bir çıktı alıyoruz:

Ali adlı öğenin veri tipi: <class 'str'>Veli adlı öğenin veri tipi: <class 'str'>['Ayşe', 'Nazan', 'Zeynep'] adlı öğenin veri tipi: <class 'list'>34 adlı öğenin veri tipi: <class 'int'>65 adlı öğenin veri tipi: <class 'int'>33 adlı öğenin veri tipi: <class 'int'>5.6 adlı öğenin veri tipi: <class 'float'>

Page 9: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Bu kodlar bize şunu gösteriyor: Farklı öğeleri bir araya getirip bunları köşeli parantezler içine alırsak ‘liste’ adlı veri tipini oluşturmuş oluyoruz. Bu listenin öğeleri farklı veri tiplerine ait olabilir. Yukarıdaki kodların da gösterdiği gibi, liste içinde yer alan “Ali” ve “Veli” öğeleri birer karakter dizisi; [‘Ayşe’, ‘Nazan’, ‘Zeynep’] adlı öğe bir liste; 34, 65 ve 33 öğeleri birer tam sayı; 5.6 öğesi ise bir kayan noktalı sayıdır. İşte farklı veri tiplerine ait bu öğelerin hepsi bir araya gelerek liste denen veri tipini oluşturuyor. Yukarıdaki örnekten de gördüğünüz gibi, bir listenin içinde başka bir liste de yer alabiliyor. Örneğin burada listemizin öğelerinden biri, [‘Ayşe’, ‘Nazan’, ‘Zeynep’] adlı başka bir listedir.

Page 10: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

>>> kardiz = "Tokat Gaziosmanpaşa Üniversitesi">>> kardiz.split()['Tokat', 'Gaziosmanpaşa', 'Üniversitesi']>>>

Görüyorsunuz, split() metodunun çıktısı da köşeli parantezler içinde yer alıyor. Demek ki bu çıktı da bir listedir.

>>> kardiz[0]'T'>>>

Eğer bu ifade bir karakter dizisi ise ilk harfi şu şekilde alabilirsiniz:

>>> liste = kardiz.split()>>> liste[0]'Tokat'

Ama eğer bu ifade bir liste ise yukarıdaki yöntem size farklı bir sonuç verir:

Page 11: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Her ne kadar karakter dizileri ve listeler iki farklı veri tipi olsa ve bu iki veri tipinin birbirinden çok farklı yönleri ve yetenekleri olsa da, bu iki veri tipi arasında önemli benzerlikler de vardır. Örneğin karakter dizilerini işlerken öğrendiğimiz pek çok fonksiyonu listelerle birlikte de kullanabilirsiniz. Mesela karakter dizilerini incelerken öğrendiğimiz len() fonksiyonu listelerin boyutunu hesaplamada da kullanılabilir:

>>> diller = ["İngilizce", "Fransızca", "Türkçe", "İtalyanca", "İspanyolca"]>>> len(diller)

5

Page 12: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

alfabe = "abcçdefgğhıijklmnoöprsştuüvyz"

Sorumuz şu olsun: ‘Acaba bu karakter dizisini listeye nasıl çeviririz?’

Karakter dizilerini anlatırken split() adlı bir metottan söz etmiştik. Bu metot karakter dizilerini belli bir ölçüte göre bölmemizi sağlıyordu. split() metoduyla elde edilen verinin bir liste olduğunu biliyorsunuz. Örneğin:

>>> isimler = "ahmet mehmet cem"

>>> isimler.split()

['ahmet', 'mehmet', 'cem']

Page 13: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

isimler = "elma, armut, çilek"

>>> isimler.split(", ")

['elma', 'armut', 'çilek']

liste = "36, 37, 8, 1"

liste2 = liste.split(", ")

print(liste2[3])

Page 14: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

>>> alfabe.split("i")

['abcçdefgğhı', 'jklmnoöprsştuüvyz']

Gördüğünüz gibi, biz burada alfabe karakter dizisini “i” harfinden bölebildik. Ama istediğimiz şey bu değil. Biz aslında şöyle bir çıktı elde etmek istiyoruz:

['a', 'b', 'c', 'ç', 'd', 'e', 'f', 'g', 'ğ', 'h', 'ı', 'i', 'j','k', 'l', 'm', 'n', 'o', 'ö', 'p', 'r', 's', 'ş', 't', 'u', 'ü','v', 'y', 'z']

Page 15: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Yani bizim amacımız, alfabe karakter dizisi içindeki her bir öğeyi birbirinden ayırmak. İşte Türk alfabesindeki harflerden oluşan bu karakter dizisini, list() adlı bir fonksiyondan yararlanarak istediğimiz şekilde bölebiliriz:

>>> harf_listesi = list(alfabe)>>> print(harf_listesi)

['a', 'b', 'c', 'ç', 'd', 'e', 'f', 'g', 'ğ', 'h', 'ı', 'i', 'j','k', 'l', 'm', 'n', 'o', 'ö', 'p', 'r', 's', 'ş', 't', 'u', 'ü','v', 'y', 'z']

Böylece list() fonksiyonu yardımıyla bu karakter dizisini tek hamlede listeye çevirmiş olduk.

Page 16: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Yukarıdaki işlevlerinin dışında, list() fonksiyonu boş bir liste oluşturmak için de kullanılabilir:

>>> li = list()>>> print(li)

[]

Yukarıdaki kodlardan gördüğünüz gibi, boş bir liste oluşturmak için liste = [] koduna alternatif olarak list() fonksiyonundan da yararlanabilirsiniz.

Page 17: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Bu sayı aralığını ekrana dökmek için range() fonksiyonu üzerinde bir for döngüsü kurmamız gerekir:

>>> for i in range(10):... print(i)...0123456789

Page 18: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Bu bölümde verdiğimiz örneklerde aynı işi şöyle de yapabileceğimizi öğrenmiştik:

>>> print(*range(10))

0 1 2 3 4 5 6 7 8 9Bu görevi yerine getirmenin üçüncü bir yolu da list() fonksiyonunu kullanmaktır:

>>> list(range(10))

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Page 19: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

meyveler = ["elma", "armut", "çilek", "kiraz"]

for meyve in meyveler:print(meyve)

Eğer bu listenin öğelerinin hepsine tek tek ulaşmak isterseniz for döngüsünden yararlanabilirsiniz:

Bu listedeki öğeleri numaralandırmak da mümkün:

>>> meyveler = ["elma", "armut", "çilek", "kiraz"]>>> for öğe_sırası in range(len(meyveler)):

print("{}. {}".format(öğe_sırası, meyveler[öğe_sırası]))

0. elma1. armut2. çilek3. kiraz

Page 20: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Dediğimiz gibi, liste öğelerine ulaşmak için kullandığımız yöntem, karakter dizilerinin öğelerine ulaşmak için kullandığımız yöntemle aynı. Aslında karakter dizileri ile listeler arasındaki benzerlik bununla sınırlı değildir. Benzerlikleri birkaç örnek üzerinde gösterelim:

>>> meyveler = ["elma", "armut", "çilek", "kiraz"]>>> meyveler[-1]

'kiraz'Karakter dizilerinde olduğu gibi, öğe sırasını eksi değerli bir sayı yaptığımızda liste öğeleri sondan başa doğru okunuyor. Dolayısıyla meyveler[-1] komutu bize meyveler adlı listenin son öğesini veriyor.

>>> meyveler[0:2]

['elma', 'armut']

Karakter dizileri konusunu işlerken öğrendiğimiz dilimleme yöntemi listeler için de aynen geçerlidir. Orada öğrendiğimiz dilimleme kurallarını listelere de uygulayabiliyoruz. Örneğin liste öğelerini ters çevirmek için şöyle bir kod yazabiliyoruz:

>>> meyveler[::-1]

['kiraz', 'çilek', 'armut', 'elma']

Page 21: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Bu bölümün başında da söylediğimiz gibi, liste adlı veri tipi, içinde başka bir liste de barındırabilir. Buna şöyle bir örnek vermiştik:

>>> liste = ["Ali", "Veli", ["Ayşe", "Nazan", "Zeynep"], 34, 65, 33, 5.6]Bu listedeki öğeler şunlardır:

AliVeli['Ayşe', 'Nazan', 'Zeynep']3465335.6

Page 22: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Gördüğünüz gibi, bu liste içinde [‘Ayşe’, ‘Nazan’, ‘Zeynep’] gibi bir liste daha var. Bu liste ana listenin öğelerinden biridir ve bu da öteki öğeler gibi tek öğelik bir yer kaplar. Yani:

>>> len(liste)

7

Page 23: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Bu çıktıdan anlıyoruz ki, listemiz toplam 7 öğeden oluşuyor. Listenin 2. sırasında yer alan listenin kendisi üç öğeden oluştuğu halde bu öğe ana liste içinde sadece tek öğelik bir yer kaplıyor. Yani 2. sıradaki listenin öğeleri tek tek sayılmıyor. Peki böyle bir liste içindeki gömülü listenin öğelerini elde etmek istersek ne yapacağız? Yani mesela içe geçmiş listenin tamamını değil de, örneğin sadece “Ayşe” öğesini almak istersek ne yapmamız gerekiyor? Dikkatlice bakın:

>>> liste[2][0]

'Ayşe'“Nazan” öğesini almak için:

>>> liste[2][1]

'Nazan'“Zeynep” öğesini almak için:

>>> liste[2][2]

'Zeynep'

Page 24: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Gördüğünüz gibi, iç içe geçmiş listelerin öğelerini almak oldukça basit. Yapmamız gereken tek şey, gömülü listenin önce ana listedeki konumunu, ardından da almak istediğimiz öğenin gömülü listedeki konumunu belirtmektir.

İstersek gömülü listeyi ayrı bir liste olarak da alabiliriz:

>>> yeni_liste = liste[2]>>> yeni_liste

['Ayşe', 'Nazan', 'Zeynep']

Böylece bu listenin öğelerine normal bir şekilde ulaşabiliriz:

>>> yeni_liste[0]'Ayşe'>>> yeni_liste[1]'Nazan'>>> yeni_liste[2]'Zeynep'

Page 25: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Listelerin Öğelerini DeğiştirmekHatırlarsanız karakter dizilerinden söz ederken bunların değiştirilemez (immutable) bir veri tipi olduğunu söylemiştik. Bu özellikten ötürü, bir karakter dizisi üzerinde değişiklik yapmak istediğimizde o karakter dizisini yeniden oluşturuyoruz. Örneğin:

>>> kardiz = "mahmut">>> kardiz = "M" + kardiz[1:]>>> kardiz

‘Mahmut'

Page 26: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Listeler ise değiştirilebilen (mutable) bir veri tipidir. Dolayısıyla listeler üzerinde doğrudan değişiklik yapabiliriz. Bir liste üzerinde değişiklik yapabilmek için o listeyi yeniden tanımlamamıza gerek yok. Şu örneği dikkatlice inceleyin:

>>> renkler = ["kırmızı", "sarı", "mavi", "yeşil", "beyaz"]>>> print(renkler)

['kırmızı', 'sarı', 'mavi', 'yeşil', 'beyaz']

>>> renkler[0] = "siyah">>> print(renkler)

['siyah', 'sarı', 'mavi', 'yeşil', 'beyaz']

Örnek olması açısından, aynı listenin 2. sırasındaki “mavi” adlı öğeyi “mor” yapalım bir de:

>>> renkler[2] = "mor">>> print(renkler)

['siyah', 'sarı', 'mor', 'yeşil', 'beyaz']Gördüğünüz gibi, listeler üzerinde değişiklik yapmak son derece kolay. Sırf bu özellik bile, neden bazı durumlarda listelerin karakter dizileri yerine tercih edilebileceğini gösterecek güçtedir.

Page 27: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

liste = [1, 2, 3]

liste[0:3] = 5, 6, 7

liste=list(range(10,21))liste[5:8] = "a", "b", "c"print(liste)

[10, 11, 12, 13, 14, 'a', 'b', 'c', 18, 19, 20]

Page 28: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Listeye Öğe EklemekListeler büyüyüp küçülebilen bir veri tipidir. Yani Python’da bir listeye istediğiniz kadar öğe ekleyebilirsiniz. Diyelim ki elimizde şöyle bir liste var:

>>> liste = [2, 4, 5, 7]Bu listeye yeni bir öğe ekleyebilmek için şöyle bir kod yazabiliriz:

>>> liste + [8]

[2, 4, 5, 7, 8]

Page 29: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Listeleri BirleştirmekBazı durumlarda elinize farklı kaynaklardan farklı listeler gelebilir. Böyle bir durumda bu farklı listeleri tek bir liste halinde birleştirmeniz gerekebilir. Tıpkı karakter dizilerinde olduğu gibi, listelerde de birleştirme işlemleri için + işlecinden yararlanabilirsiniz.

Diyelim ki elimizde şöyle iki adet liste var:

>>> derlenen_diller = ["C", "C++", "C#", "Java"]>>> yorumlanan_diller = ["Python", "Perl", "Ruby"]Bu iki farklı listeyi tek bir liste haline getirmek için şöyle bir kod yazabiliriz:

>>> programlama_dilleri = derlenen_diller + yorumlanan_diller

['C', 'C++', 'C#', 'Java', 'Python', 'Perl', 'Ruby']Bu işlemin sonucunu görelim:

>>> print(programlama_dilleri)

Page 30: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Örneğin şöyle bir durum düşünün: Diyelim ki kullanıcı tarafından girilen sayıların ortalamasını hesaplayan bir program yazınız ?

Page 31: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

sayılar = 0

for i in range(10):sayılar += int(input("not: "))

print(sayılar/10)

Bu program kullanıcının 10 adet sayı girmesine izin verip, program çıkışında, girilen sayıların ortalamasını verecektir.

Page 32: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Peki girilen sayıların ortalaması ile birlikte, hangi sayıların girildiğini de göstermek isterseniz nasıl bir kod yazarsınız?

Eğer böyle bir şeyi karakter dizileri ile yazmaya kalkışırsanız epey eziyet çekersiniz. Ama şöyle bir kod yardımıyla istediğiniz şeyi basit bir şekilde elde edebilirsiniz:

1. not: 102. not: 123. not: 124. not: 235. not: 246. not: 4557. not: 468. not: 679. not: 4310. not: 34Girdiğiniz notlar: 10 12 12 23 24 455 46 67 43 34Not ortalamanız: 72.6

sayılar = 0notlar = []

for i in range(10):veri = int(input("{}. not: ".format(i+1)))sayılar += verinotlar += [veri]

print("Girdiğiniz notlar: ", *notlar)print("Not ortalamanız: ", sayılar/10)

Page 33: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

ÖDEV

1. not: 152. not: 143. not: 204. not: 305. not: 506. not: 607. not: 808. not: 79. not: 310. not: 1Girdiğiniz notlar: 15 14 20 30 50 60 80 7 3 1Not ortalamanız: 28.0

Page 34: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

liste = []

while True:sayı = input("Bir sayı girin: (çıkmak için q) ")

if sayı == "q":break

sayı = int(sayı)

if sayı not in liste:liste += [sayı]print(liste)

else:print("Bu sayıyı daha önce girdiniz!")

Bir sayı girin: (çıkmak için q) 10[10]Bir sayı girin: (çıkmak için q) 11[10, 11]Bir sayı girin: (çıkmak için q) 23[10, 11, 23]Bir sayı girin: (çıkmak için q) 34[10, 11, 23, 34]Bir sayı girin: (çıkmak için q) q

Page 35: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Listeden Öğe ÇıkarmakBir listeden öğe silmek için del adlı ifadeden yararlanabilirsiniz. Örneğin:

>>> liste = [1, 5, 3, 2, 9]>>> del liste[-1]>>> liste

[1, 5, 3, 2]

Page 36: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Listeleri SilmekPython’da listeleri tamamen silmek de mümkündür. Örneğin:

>>> liste = [1, 5, 3, 2, 9]>>> del liste>>> liste

Traceback (most recent call last):File "<stdin>", line 1, in <module>

NameError: name 'liste' is not defined

Page 37: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Listeleri KopyalamakDiyelim ki, yazdığınız bir programda, varolan bir listeyi kopyalamak, yani aynı listeden bir tane daha üretmek istiyorsunuz. Mesela elimizde şöyle bir liste olsun:

>>> li1 = ["elma", "armut", "erik"]Amacımız bu listeden bir tane daha oluşturmak. İlk olarak aklınıza şöyle bir yöntem gelmiş olabilir:

>>> li2 = li1Gerçekten de bu yöntem bize aynı öğelere sahip iki liste verdi:

>>> print(li1)

["elma", "armut", "erik"]

>>> print(li2)

["elma", "armut", "erik"]

Page 38: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Liste Üreteçleri (List Comprehensions)Şimdi Python’daki listelere ilişkin çok önemli bir konuya değineceğiz. Bu konunun adı ‘liste üreteçleri’. İngilizce’de buna “List Comprehension” adı veriliyor.

Adından da anlaşılacağı gibi, liste üreteçlerinin görevi liste üretmektir. Basit bir örnek ile liste üreteçleri konusuna giriş yapalım:

liste = [i for i in range(1000)]Burada 0’dan 1000’e kadar olan sayıları tek satırda bir liste haline getirdik. Bu kodların söz dizimine çok dikkat edin. Aslında yukarıdaki kod şu şekilde de yazılabilir:

liste = []

for i in range(1000):liste += [i]

Pek çok durumda liste üreteçleri öbür seçeneklere kıyasla bir alternatif olma işlevi görür. Yani liste üreteçleri ile elde edeceğiniz sonucu başka araçlarla da elde edebilirsiniz. Mesela yukarıdaki kodların yaptığı işlevi yerine getirmek için başka bir seçenek olarak list() fonksiyonundan da yararlanabileceğimizi biliyorsunuz:

liste = list(range(1000))

Page 39: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Örneğin 0 ile 1000 arasındaki çift sayıları listelemek için liste üreteçlerini kullanmak, alternatiflerine göre daha makul bir tercih olabilir:

liste = [i for i in range(1000) if i % 2 == 0]

Aynı işi for döngüsü ile yapmak için şöyle bir kod yazmamız gerekir:

liste = []for i in range(1000):

if i % 2 == 0:liste += [i]

Page 40: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Liste üreteçleri ile ilgili bir örnek daha verelim. Mesela elinizde şöyle bir liste olduğunu düşünün:

liste = [[1, 2, 3],[4, 5, 6],[7, 8, 9],[10, 11, 12]]

Burada iç içe geçmiş 4 adet liste var. Bu listenin bütün öğelerini tek bir listeye nasıl alabiliriz? Yani şöyle bir çıktıyı nasıl elde ederiz?

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

Page 41: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

for döngülerini kullanarak şöyle bir kod yazabiliriz:liste = [[1, 2, 3],

[4, 5, 6],[7, 8, 9],[10, 11, 12]]

tümü = []for i in liste:

for z in i:tümü += [z]

print(tümü)

Liste üreteçleri ise daha kısa bir çözüm sunar:

liste = [[1, 2, 3],[4, 5, 6],[7, 8, 9],[10, 11, 12]]

tümü = [z for i in liste for z in i]print(tümü)

Page 42: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Örnek Program: X.O.X Oyunu

Yazacağımız oyunun İngilizce adı Tic Tac Toe. Bu oyunun ne olduğunu ve kurallarını bir önceki bölümde kabataslak bir şekilde vermiştik. Eğer isterseniz oyun kurallarına wikipedia.org/wiki/Çocuk_oyunları#X_O_X_OYUNU adresinden de bakabilirsiniz.

Burada ilk yapmamız gereken şey, üzerinde oyun oynanacak tahtayı çizmek olmalı. Amacımız şöyle bir görüntü elde etmek:

___ ___ ___

___ ___ ___

___ ___ ___Bu tahtada oyuncu soldan sağa ve yukarıdan aşağıya doğru iki adet konum bilgisi girecek ve oyunu oynayan kişinin gireceği bu konumlara “X” ve “O” harfleri işaretlenecek.

Page 43: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

O yüzden tahtayı oluşturmada listeleri kullanmayı tercih edeceğiz.

[['___', '___', '___'], ['___', '___', '___'], ['___', '___', '___']]

tahta = [["___", "___", "___"],["___", "___", "___"],["___", "___", "___"]]

print(tahta)

Page 44: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Oyun tahtasını oluşturduğumuza göre, şimdi yapmamız gereken şey bu oyun tahtasını düzgün bir şekilde oyuncuya göstermek olmalı. Dediğimiz gibi, oyuncu şöyle bir çıktı görmeli:

___ ___ ___

___ ___ ___

___ ___ ___Bu görüntüyü elde etmek için şu kodları yazıyoruz:

print("\n"*15)

for i in tahta:print("\t".expandtabs(30), *i, end="\n"*2)

Mesela print("\n"*15) kodunu yazmamızın nedeni, oyun tahtası için ekranda boş bir alan oluşturmak. Bu etkiyi elde etmek için 15 adet yeni satır karakteri bastık ekrana. Bu kodla elde edilen etkiyi daha iyi görebilmek için bu kodu programdan çıkarmayı deneyebilirsiniz.

Page 45: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

tahta = [["___", "___", "___"],["___", "___", "___"],["___", "___", "___"]]

for i in tahta:print(i)

Bu kodları çalıştırdığımızda şöyle bir çıktı elde ederiz:

['___', '___', '___']['___', '___', '___']['___', '___', '___']Gördüğünüz gibi, iç içe geçmiş üç adet listeden oluşan tahta adlı liste içindeki bu iç listeler ekrana döküldü. Bir de şuna bakın:

tahta = [["___", "___", "___"],["___", "___", "___"],["___", "___", "___"]]

for i in tahta:print(*i)

Bu kodlar çalıştırıldığında şu çıktıyı verir:

___ ___ ______ ___ ______ ___ ___

Page 46: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

print() fonksiyonu içindeki son parametremiz şu: end="\n"*2

Bu parametrenin ne işe yaradığını kolaylıkla anlayabildiğinizi zannediyorum. Bu parametre de istediğimiz çıktıyı elde etmeye yönelik bir çabadan ibarettir. tahta adlı liste içindeki iç içe geçmiş listelerin her birinin sonuna ikişer adet “\n” karakteri yerleştirerek, çıktıdaki satırlar arasında yeterli miktarda aralık bıraktık. Eğer oyun tahtasındaki satırların biraz daha aralıklı olmasını isterseniz bu parametredeki 2 çarpanını artırabilirsiniz. Mesela: end="\n"*3

Oyun tahtasını oluşturduğumuza göre, şimdi yapmamız gereken şey bu oyun tahtasını düzgün bir şekilde oyuncuya göstermek olmalı. Dediğimiz gibi, oyuncu şöyle bir çıktı görmeli:

___ ___ ___

___ ___ ___

___ ___ ___Bu görüntüyü elde etmek için şu kodları yazıyoruz:

print("\n"*15)

for i in tahta:print("\t".expandtabs(30), *i, end="\n"*2)

Page 47: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Şimdi yapmamız gereken şey, oyundaki kazanma ölçütlerini belirlemek. Hatırlarsanız bu konuya bir önceki bölümde değinmiştik. O yüzden aşağıda söyleyeceklerimizin bir bölümüne zaten aşinasınız. Burada önceden söylediğimiz bazı şeylerin yeniden üzerinden geçeceğiz.

Dediğim gibi, kodların bu bölümünde, hangi durumda oyunun biteceğini ve kazananın kim olacağını tespit edebilmemiz gerekiyor. Mesela oyun sırasında şöyle bir görüntü ortaya çıkarsa hemen oyunu durdurup “O KAZANDI!” gibi bir çıktı verebilmemiz lazım:

O O O

___ X X

___ ___ ___Veya şöyle bir durumda “X KAZANDI!” diyebilmeliyiz:

X O ___

X O O

X ___ ___

Yandaki iki örnek üzerinden düşünecek olursak, herhangi bir işaretin şu konumlarda bulunması o işaretin kazandığını gösteriyor:

yukarıdan aşağıya 0; soldan sağa 0yukarıdan aşağıya 1; soldan sağa 0yukarıdan aşağıya 2; soldan sağa 0veya:

yukarıdan aşağıya 0; soldan sağa 0yukarıdan aşağıya 0; soldan sağa 1yukarıdan aşağıya 0; soldan sağa 2

Page 48: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Bu listeler de kendi içinde ikişer öğeli bazı listelerden oluşuyor. Mesela ilk liste içinde şu listeler var:

[0, 0], [1, 0], [2, 0]İkinci liste içinde ise şu listeler:

[0, 0], [0, 1], [0, 2]

Page 49: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Burada her bir liste içindeki ilk sayı oyun tahtasında yukarıdan aşağıya doğru olan düzlemi; ikinci sayı ise soldan sağa doğru olan düzlemi gösteriyor.

Tabii ki oyun içindeki tek kazanma ölçütü bu ikisi olmayacak. Öteki kazanma ölçütlerini de tek tek tanımlamalıyız:

kazanma_ölçütleri = [[[0, 0], [1, 0], [2, 0]],[[0, 1], [1, 1], [2, 1]],[[0, 2], [1, 2], [2, 2]],[[0, 0], [0, 1], [0, 2]],[[1, 0], [1, 1], [1, 2]],[[2, 0], [2, 1], [2, 2]],[[0, 0], [1, 1], [2, 2]],[[0, 2], [1, 1], [2, 0]]]

İşte X veya O işaretleri kazanma_ölçütleri adlı listede belirtilen koordinatlarda bulunduğunda, ilgili işaretin oyunu kazandığını ilan edip oyundan çıkabileceğiz.

Page 50: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Yukarıdaki açıklamalardan da anlayacağınız gibi, X ve O işaretlerinin oyun tahtasındaki konumu, oyunun gidişatı açısından önem taşıyor. O yüzden şu şekilde iki farklı liste daha tanımlamamızda fayda var:

x_durumu = []o_durumu = []Bu değişkenler sırasıyla X işaretinin ve O işaretinin oyun içinde aldıkları konumları kaydedecek. Bu konumlarla, bir önceki adımda tanımladığımız kazanma ölçütlerini karşılaştırarak oyunu kimin kazandığını tespit edebileceğiz.

Page 51: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

DemetlerDemetler, özellikle görünüş olarak listelere çok benzeyen bir veri tipidir. Bu veri tipi de, tıpkı listeler gibi, farklı veritiplerini içinde barındıran kapsayıcı bir veri tipidir.

Demet TanımlamakDemet tanımlamanın birkaç farklı yolu vardır. Nasıl karakter dizilerinin ayırt edici özelliği tırnak işaretleri, listelerin ayırt edici özelliği ise köşeli parantez işaretleri ise, demetlerin ayırt edici özelliği de normal parantez işaretleridir. Dolayısıylabir demet tanımlamak için normal parantez işaretlerinden yararlanacağız:

>>> demet = ("ahmet", "mehmet", 23, 45)

>>> type(demet)

<class 'tuple'>Gördüğünüz gibi, karakter dizilerinin type() sorgusuna str, listelerin ise list cevabı vermesi gibi, demetler de type() sorgusuna tuple cevabı veriyor.

Yalnız, dediğimiz gibi Python’da demet tanımlamanın birden fazla yolu vardır. Mesela yukarıdaki demeti şöyle de tanımlayabiliriz:

>>> demet = "ahmet", "mehmet", 23, 45

Page 52: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Gördüğünüz gibi, parantez işaretlerini kullanmadan, öğeleri yalnızca virgül işareti ile ayırdığımızda da elde ettiğimiz şey bir demet oluyor.

Demet oluşturmak için tuple() adlı bir fonksiyondan da yararlanabilirsiniz. Bu fonksiyon, liste oluşturan list() fonksiyonuna çok benzer:

>>> tuple('abcdefg')

('a', 'b', 'c', 'd', 'e', 'f', 'g')Bu fonksiyonu kullanarak başka veri tiplerini demete dönüştürebilirsiniz:

>>> tuple(["ahmet", "mehmet", 34, 45])

('ahmet', 'mehmet', 34, 45)Burada, [“ahmet”, “mehmet”, 34, 45] adlı bir listeyi tuple() fonksiyonu yardımıyla demete dönüştürdük.

Page 53: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Tek Öğeli bir Demet TanımlamakTek öğeli bir karakter dizisi oluşturabilmek için şu yolu izliyorduk hatırlarsanız:

>>> kardiz = 'A'Bu tek öğeli bir karakter dizisidir. Bir de tek öğeli bir liste tanımlayalım:

>>> liste = ['ahmet']Bu da tek öğeli bir listedir. Gelin bir de tek öğeli bir demet oluşturmaya çalışalım:

>>> demet = ('ahmet')

Page 54: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Demetlerle Listelerin Birbirinden FarkıEn başta da söylediğimiz gibi, demetlerle listeler birbirine çok benzer. Ama demetlerle listelerin birbirinden çok önemli bazı farkları da vardır. Bu iki veri tipi arasındaki en önemli fark şudur; listeler değiştirilebilir (mutable) bir veri tipi iken, demetler değiştirilemez (immutable) bir veri tipidir. Yani tıpkı karakter dizileri gibi, demetler de bir kez tanımlandıktan sonra bunların üzerinde değişiklik yapmak mümkün değildir:

>>> demet = ('elma', 'armut', 'kiraz')>>> demet[0] = 'karpuz'

Traceback (most recent call last):File "<stdin>", line 1, in <module>

TypeError: 'tuple' object does not support item assignmentGördüğünüz gibi, demetin herhangi bir öğesini değiştirmeye çalıştığımızda Python bize bir hata mesajı gösteriyor.

Page 55: D1100108 GÖRSEL PROGRAMLAMA VE VERİ YAPILARI …Öğretim Üyesi Dr. Öğr. Üyesi Mahmut DURGUN Oda Numarası E-posta Mahmut.durgun@gop.edu.tr Ders Zamanı Perşembe 08:30 –12:15

Demetlerin Kullanım AlanıDemetleri ilk öğrendiğinizde bu veri tipi size son derece gereksizmiş gibi gelebilir. Ama aslında oldukça yaygın kullanılan bir veri tipidir bu. Özellikle programların ayar (conf) dosyalarında bu veri tipi sıklıkla kullanılır. Örneğin Python tabanlı bir web çatısı (framework) olan Django’nun settings.py adlı ayar dosyasında pek çok değer bir demet olarak saklanır. Mesela bir Django projesinde web sayfalarının şablonlarını (template) hangi dizin altında saklayacağınızı belirlediğiniz ayar şöyle görünür:

TEMPLATE_DIRS = ('/home/projects/djprojects/blog/templates',)Burada, şablon dosyalarının hangi dizinde yer alacağını bir demet içinde gösteriyoruz. Bu demet içine birden fazla dizin adı yazabilirdik. Ama biz bütün şablon dosyalarını tek bir dizin altında tutmayı tercih ettiğimiz için tek öğeli bir demet tanımlamışız. Bu arada, daha önce de söylediğimiz gibi, demetlerle ilgili en sık yapacağınız hata, tek öğeli demet tanımlamaya çalışırken aslında yanlışlıkla bir karakter dizisi tanımlamak olacaktır. Örneğin yukarıdaki TEMPLATE_DIRS değişkenini şöyle yazsaydık:

TEMPLATE_DIRS = ('/home/projects/djprojects/blog/templates')Aslında bir demet değil, alelade bir karakter dizisi tanımlamış olurduk...