AÖF Soru Bankası

Programlama IIÜnite 4 Özeti

Veri Tipleri

BİL203U-PROGRAMLAMA II

Ünite 4: Veri Tipleri

Giriş

Veri türleri, Python’da önemli bir kavramdır. Veri öğelerinin sınıflandırılmasına veya veri değerini bir tür veri kategorisine koymaya Veri Tipleri denir. Python’da her şey bir nesnedir. Python’daki veri türleri, sınıfları temsil eder. Bu sınıfların nesnelerine veya örneklerine değişkenler denmektedir.

Sayılar (Numbers)

Temel olarak sayı türlerini şu şekilde listeleyebiliriz:

1. Integer: Pozitif ve negatif işaretli tam sayılardır. 2. Long Integer: Uzun tam sayıları ifade etmektedir. 3. Float: Kayan noktalı yani ondalıklı sayıları ifade etmektedir. 15 ondalık basamağa kadar değer alabilir. 4. Complex: Gerçek (real) ve hayali (imaginary) olmak üzere iki kısımdan oluşan sayı türüdür. x + yj formatında gösterilmektedir.

Bir değişkenin veya bir değerin hangi sınıfa ait olduğunu öğrenmek için type() ve belirli bir sınıfa ait olup olmadığını kontrol etmek için isinstance() fonksiyonu kullanılabilir.

Tür Dönüştürme

Türler arasında açık bir şekilde dönüştürme yapmak için int(), float() ve complex() gibi hazır fonksiyonlar da kullanılabilir.

Decimal Veri Tipi: Python dilindeki float yerleşik sınıfı normalde beklenenden farklı hesaplamalar yapmaktadır. Bildiğimiz ondalık kesirlerin çoğu bilgisayara tam olarak kaydedilemez. Yaklaşık olarak tahmin edilebilir. Devirli sayıların yuvarlanması Python’da bir hata değildir, sadece bilgisayar donanım sınırlamasıdır.

Bu sorunu aşmak için Python ile birlikte gelen ondalık (decimal) modülü yani kullanılabilir. Bu modülün kullanıcı tarafından ayarlanabilen hassasiyeti vardır. Decimal modülü, ondalık hesaplama yapmak istendiğinde kullanılır.

Kayan nokta (float) işlemleri, ondalık (decimal) işlemlerinden çok daha hızlı gerçekleşmektedir. Bu yüzden daha verimli olduğu için float işlemler tercih edilmektedir.

Tam ondalık gösterim gerektiren finansal uygulamalar yaparken, gerekli hassasiyet seviyesi kontrol edilmek istendiğinde veya önemli ondalık basamak vurgulanmak istendiğinde float yerine decimal kullanır.

Kesirler: Python, fractions (kesirler) modülü aracılığıyla kesirli sayılar içeren işlemleri desteklemektedir. Bu modül rasyonel sayı aritmetiği desteğine sahiptir. Fraction (kesir) nesneleri çeşitli şekillerde oluşturulabilir.

Float yani kayan noktalı veri türünden kesir oluştururken bazı olağandışı sonuçlarla karşılaşılabilir. Bu sonuçların sebebi ikilik tabanda kayan noktalı sayı gösteriminden kaynaklanmaktadır. Fraction, string ile somutlaştırma yapılmasına da izin vermektedir.

Ondalık sayılar kullanılırken tercih edilen bir seçenek olarak karşımıza çıkmaktadır. Kesir (Fraction) veri türü, tüm temel işlemleri desteklemektedir.

Matematik İşlemleri

Python, trigonometri, logaritma, olasılık ve istatistik gibi matematiğin farklı konularında çalışabilmek amacıyla, math ve random gibi modüller sunmaktadır.

Liste (List)

Listeler, farklı Python nesneleri (sayı, metin vs.) için tanımlanmış, homojen nesnelerin koleksiyonlarını depolamak için kullanılan değişken dizilerdir. Bu dizilerin sıralanabilir ve değiştirilebilir (mutable) bir yapısı vardır. Aynı anda birden fazla nesne ile çalışmaya izin veren bir veri türüdür. Liste tanımı yapılırken nesneler köşeli parantez içerisine yazılır.

list İfadesi Sözdizimi: class list([yinelenebilir])

Bir liste tanımı yapmanın farklı yolları vardır.

• Boş listeyi belirtmek için bir çift köşeli parantez kullanarak: [ ] • Köşeli parantez kullanarak, öğeleri virgülle ayırarak: ['a'], ['a', 'b', 'c'], [1], [1, 2, 3] • Tip yapıcısını kullanarak: list() veya list(yinelenebilir)

Bir liste herhangi bir sayıda öğeye sahip olabilir. Ayrıca bu nesneler farklı türlerde olabilir.

Liste Elemanlarına Erişim

Python dilinde, liste elemanlarına erişmenin farklı yolları mevcuttur. Listedeki bir öğeye erişmek için dizin operatörü [] kullanılabilir. Python’da indeksler 0’dan başlar (indeksleme). Yani, 10 elemanlı bir liste 0’dan 9’e kadar bir indekse (indis) sahip olacaktır. İndeks bir tamsayı olmalıdır. İç içe listelerde iç içe indeks kullanılarak erişilir.

Python, diziler için negatif indekslemeye izin vermektedir. -1 indeksi son öğeye, -2 ikinci son öğeye vb. işaret etmektedir. Burada dikkat edilmesi gereken nokta, 0 indeksinin pozitif indekslerde kullanılmasıdır.

Liste Dilimleme/Bölme: Python dilinde, dilimleme operatörü olarak “:” kullanılmaktadır. Bu operatör sayesinde bir listenin istenilen aralıktaki parçalarına erişilebilir. Listeleri dilimlediğimizde, başlangıç dizini kapsayıcıdır, ancak bitiş dizini özeldir.

Liste Elemanı Ekle/Değiştir:

Listeler değişkendir, yani elemanları string veya tuple’dan farklı olarak değiştirilebilir. Bir öğeyi veya bir dizi öğeyi değiştirmek için atama operatörü = kullanılır.

Listeye yeni bir eleman eklemek için append() yöntemi kullanılabilir. Bunun yanında extend() yöntemi yardımıyla da birkaç eleman eklenebilir.

İki listeyi birleştirmek için “+” operatörü de kullanılabilir. “*” operatörü bir listeyi verilen sayı kadar tekrar eder.


insert() yöntemini kullanarak istenen bir konuma bir öğe eklenebilir veya boş bir liste aralığına sıkıştırarak birden fazla öğe eklenebilir.

Liste Elemanlarını Silme: Python’da dilinde, “del” deyimi kullanılarak listeden bir veya daha fazla eleman ya da tüm liste silinebilir.

İçeriği verilen elemanı listeden kaldırmak için remove() metodunu kullanılabilir. Ayrıca verilen indekse göre bir elemanı kaldırmak için de pop() metodunu kullanılabilir.

pop() metodu, liste indeksi sağlanmazsa son öğeyi döndürür ve listeden kaldırır. Bu metod, listelerin yığın (stack-ilk giren, son çıkan veri yapısı) olarak kullanılmasına yardımcı olur. Tüm listenin boşaltılması gerektiğinde ise clear() metodu kullanılabilir.

Son olarak, bir eleman dilimine boş bir liste atayarak listedeki elemanlar da silinebilir.

Liste (List) Yöntemleri

Python dilinde sık kullanılan liste yöntemleri kitabınız sayfa 111’de Tablo 4.2’de verilmiştir.

Liste Üreteçleri: Python’da mevcut bir listeden yeni bir liste oluşturmanın zarif ve kısa bir yoludur. Bir liste üreteci, köşeli parantez içindeki for döngüsü ifadesinin ardından gelen bir ifadeden oluşur. Bir liste üreteci, isteğe bağlı olarak daha fazla for veya if ifadeleri içerebilir. İsteğe bağlı bir if ifadesi yardımıyla, yeni liste için elemanlar filtrelenebilir.

Liste Üyelik Testi: Bir elemanın listede olup olmadığını “in” anahtar sözcüğü kullanarak test edilebilir.

Liste İçinde Yineleme: Bir listedeki her eleman for döngüsü kullanarak yinelenebilir.

Demet (Tuple)

Demetler de listeler gibi farklı veri türlerini içerisinde barındıran bir veri yapısıdır. İkisi arasındaki fark ise, bir demet (Tuple) verileri atandıktan sonra elemanlar değiştirilemez, ancak bir listenin elemanları değiştirilebilir. Demetlerde silme, ekleme, indeks değiştirme gibi işlemlere izin verilmez.

Bir demet oluşturmak için, bütün elemanlar (öğeler) virgülle ayrılmış olarak parantez () içine yerleştirilerek bir tanımlama grubu oluşturulur. Bir demet herhangi bir sayıda elemana sahip olabilir ve bu elemanlar farklı türlerde tanımlanabilir (tamsayı, kayan nokta, liste, dize, vb.).

Parantez kullanmadan da bir demet oluşturulabilir. Bu tanımlama işlemine demet paketleme de denilmektedir.

Paketten çıkarma işlemi yapılırken, atama yapılan eleman sayısı ile demetteki eleman sayısının aynı olması gerekmektedir.

Tek elemanlı bir demet oluşturmak biraz zordur. Bu yapının bir demet olduğunu belirtmek için sonunda bir virgül eklenmesine ihtiyaç duyulmaktadır.

Demet Elemanlarına Erişim

İndeksleme: İndeksin 0’dan başladığı demetteki bir öğeye erişmek için indeks (dizin) operatörünü [ ] kullanabiliriz.

Negatif İndeksleme: Python, dizileri için negatif indekslemeye izin verir.

Dilimleme: Dilimleme operatörü iki nokta üst üste “:” kullanarak bir tanımlama grubundaki bir dizi öğeye erişebiliriz.

Dilimleme, indeksin hangi aralıklar arasında olduğu düşünülerek en iyi şekilde görselleştirilebilir. Bir aralığa erişmek isteniyorsa, demetten bu bölümü dilimleyecek indeks aralığı bilgisine ihtiyaç duyulacaktır.

Bir Demeti Değiştirme: Listelerden farklı olarak, demetler değişmez yapılardır. Ancak, demet elemanı liste gibi değişken bir veri tipinde ise, iç içe geçmiş elemanlar değiştirilebilir. Ayrıca tanımlanmış bir demete, farklı değerler atanabilir, buna da yeniden atama denmektedir.

İki demeti (tuple) birleştirmek için “+” operatörünü kullanabiliriz. Ayrıca “*” operatörü kullanılarak bir demet içindeki elemanlar belirli bir sayıda tekrarlanabilir. Hem “+” hem de “*” işlemleri yeni bir Tuple ile sonuçlanmaktadır.

Bir Demeti Silme

Bir demeti tamamen silmek, “del” anahtar sözcüğünü kullanarak gerçekleştirilebilir.

Demet (Tuble) Fonksiyonları

Eleman ekleme veya eleman kaldırma yöntemleri, Tuple ile kullanılamaz. Demet yapısının desteklediği yalnızca iki yöntem bulunmaktadır.

Grup Üyelik Testi: “in” anahtar sözcüğünü kullanarak bir elemanın bir demet içinde olup olmadığı test edilebilir.

Bir Demet (Tuple) Üzerinde Yineleme İşlemi: Demet içindeki her bir öğeyi yinelemek için for döngüsü kullanılabilir.

Demet (Tuple) Yapısının Liste (List) Yapısına Göre Avantajları:

• Demet yapıları değiştirilemez olduğundan, bir demet üzerinden yineleme yapmak liste yapısına kıyasla daha hızlıdır. Yani hafif bir performans artışı vardır. • Genellikle heterojen veri türleri için demet yapıları ve homojen veri türleri için listeler kullanılır. • Değişmez öğeler içeren demetler, bir sözlük için anahtar olarak kullanılabilir. Listelerle bu mümkün değildir. • Değişmeyen verileriniz varsa, bunları demet yapısında tutmak, yazmaya karşı korumalı kalmasını garanti edecektir.


Metin Dizisi (String)

Metin dizisi, karakter dizisi, dize ve string aynı kavramı ifade etmektedir. Bir dize (string), bir karakter dizisidir. Bu karakterlerin bir sayıya dönüştürülmesine kodlama, şifreleme gibi anlamlara gelen “encoding” denir. Bunun tersi işleme ise kod çözme, çözümleme anlamlarına gelen “decoding” denmektedir. ASCII ve Unicode, kullanılan popüler kodlamalardan bazılarıdır. Python’da bir dize, bir Unicode karakter dizisidir.

Python’da Bir Dize Nasıl Oluşturulur?

Dizeler, karakterleri tek tırnak veya çift tırnak içine alarak oluşturulabilir. Python’da üçlü tırnak işaretleri de kullanılabilir, ancak genellikle çok satırlı dizeleri ve belge dizilerini (docstring) temsil etmek amacıyla kullanılır.

Bir dizedeki Karakterlere Nasıl Erişilir?

Tek tek karakterlere indeksleme kullanarak erişilebilir. Ayrıca dilimleme ve negatif indeksleme de kullanılabilir.

Bir Dize Nasıl Değiştirilir veya Silinir?

Dizeler de tıpkı demetler gibi değişmezdir. Fakat farklı değerleri aynı isimdeki dizelere yeniden atayabiliriz. Böylece dizeyi yeni atanan değer ile değiştirmiş oluruz.

Bir dizeden karakterler silinemez veya kaldırılamaz. Ancak, “del” anahtar sözcüğü kullanılarak dizeyi tamamen silmek mümkündür.

Python Dize işlemleri

İki veya Daha Fazla Dizenin Birleştirilmesi: İki veya daha fazla dizenin tek bir dizede bir araya getirilmesi işlemine birleştirme (concatenation) denir.

Python’da dizeleri birleştirmek için “+” operatörü kullanılmaktadır. Ayrıca iki dize metni birlikte yazılarak da birleştirilebilir. * operatörü ise, dizeyi belirli bir sayıda tekrarlamak için kullanılabilir.

Bir for döngüsü kullanarak bir dizeyi yineleyebiliriz.

Dizi Üyelik Testi: Python’da “in” anahtar sözcüğü kullanılarak bir dize içinde bir alt dizenin olup olmadığı test edilebilir.

Python ile Yerleşik Fonksiyonlar: Sırayla, döngü şeklinde çalışan çeşitli yerleşik fonksiyonlar, dizelerle de çalışır. Enumerate() ve len() yaygın olarak kullanılan yerleşik fonksiyonlardan bazılarıdır. enumerate() fonksiyonu, bir numaralandırma nesnesi döndürür. Bu nesne, dizedeki tüm öğelerin indeks ve değer çiftlerini içerir. Bu değerler yineleme sırasında kullanılması açısından önemlidir. Benzer şekilde, len() fonksiyonu dizenin uzunluğunu (karakter sayısı) döndürür.

Kaçış Dizisi (Escape Sequence)

Bir metnin içinde hem tek tırnak hem de çift tırnak karakteri olduğu için yazdırmak istediğimizde SyntaxError yani yazım hatası alırız.

Bu sorunu aşmanın bir yolu, üçlü tırnak kullanmaktır. Alternatif olarak kaçış dizileri de kullanılabilir. Bir kaçış

dizisi ters eğik çizgi, ters bölü işareti “\” ile başlar ve Python yorumlayıcısı tarafından farklı yorumlanır. Bir dizeyi temsil etmek için tek bir alıntı kullanırsak, dize içindeki tüm tek tırnaklardan kaçınılmalıdır. Çift tırnak için de benzer bir durum söz konusudur. Python’nın desteklediği kaçış dizileri kitabınız sayfa 128’de Tablo 4.3’de verilmiştir.

Kimi zaman bir dizenin içindeki kaçış dizilerini yok saymak için dizgenin önüne r veya R harfi eklenmelidir. Bu, ham bir dize/metin olduğu manasına gelir ve içerisinde herhangi bir kaçış dizisi içeriyorsa bunlar yok sayılır.

Dizeleri Biçimlendirme

Dize nesnesiyle kullanılabilen format() metodu, dizeleri biçimlendirmede çok yönlü ve güçlü bir araçtır. Dize biçimlendiricileri, küme parantezleri {} ile yer tutucular veya değiştirme alanlarını belirtmektedir. Sıranın belirtilmesi için konum argümanları veya anahtar kelime argümanları kullanılabilir.

format() metodu, isteğe bağlı biçimlendirmeleri desteklemektedir. İki nokta üst üste kullanılarak alan adından ayrılırlar. Örneğin, verilen boşlukta bir dizeyi sola hizala <, sağa hizala > veya ortala ^ yapılabilir.

Eski Stil Biçimlendirme: Python’da sprintf() stili gibi, dizeler biçimlendirilebilir. Bunun için % kullanılmaktadır.

Python Dizisi Ortak Metotlar: String nesnesiyle kullanılabilen çok sayıda yöntem vardır. Bahsettiğimiz format() metodu bunlardan biridir. Yaygın olarak kullanılan yöntemlerden bazılarına lower(), upper(), join(), split(), find(), replace() örnek olarak verilebilir.

Küme (Set)

Bir küme, sıralanmamış bir öğeler topluluğudur. Bir kümenin kendisi değişkendir. Ona eleman eklenebilir veya çıkarılabilir. Kümeler aynı zamanda birleşim, kesişim, simetrik fark gibi matematiksel küme işlemlerini gerçek- leştirmek için de kullanılabilir.

Küme Oluşturma

Tüm elemanlar (öğeler), virgülle ayrılmış küme parantezleri { } içine yerleştirilerek veya yerleşik set() işlevi kullanılarak bir küme oluşturulabilir. Kümeler, herhangi bir sayıda elemana sahip olabilir ve bu elemanlar farklı türlerde tanımlanabilir. Bir küme, listeler, kümeler veya sözlükler gibi değiştirilebilir öğelere sahip olamaz.

Elemansız bir küme oluşturmak için set() fonksiyonu herhangi bir argüman olmadan kullanılmalıdır.

Kümeyi Değiştirme

Kümeler değişkendir fakat sırasız oldukları için indeks kullanmanın bir anlamı yoktur. Dizinleme veya dilimleme kullanarak bir kümenin elemanına erişilemez veya eleman değiştirilemez. Küme veri türü böyle bir olayı desteklemez.

add() yöntemini kullanarak tek bir eleman veya update() yöntemi kullanılarak birden çok eleman eklenebilir.


update() yöntemi, değişken olarak demetler, listeler, dizeler veya diğer kümeleri alabilir.

Bir Kümeden Eleman Çıkarma

Belirli bir eleman, discard() ve remove() yöntemleri kullanılarak bir kümeden çıkarılabilir. Benzer şekilde, pop() yöntemi kullanılarak bir öğe kaldırılabilir ve döndürülebilir. Küme sırasız bir veri türü olduğundan, hangi elemanın atılacağını belirlemenin bir yolu yoktur. Ayrıca clear() yöntemi kullanılarak bir kümedeki tüm öğeler kaldırılabilir.

Küme Yöntemleri

Birçok küme yöntemi vardır. Küme nesneleri ile kullanılabilen tüm yöntemlerin listesine kitabınız sayfa 136’da yer alan Tablo 4.4’den ulaşabilirsiniz.

Bir Küme İçinde Yineleme: Küme üzerinde for döngüsü kullanarak her eleman yinelenebilir.

Kümelerde Yerleşik/Dahili Fonksiyonlar

all(), any(), enumerate(), len(), max(), min(), sorted(), sum() vb. gibi yerleşik fonksiyonlar, farklı görevleri gerçekleştirmek amacıyla kümelerde yaygın olarak kullanılmaktadır. Fonksiyonların gerçekleştirdiği görevlerin tablosu kitabınız sayfa 137’de Tablo 4.5’te verilmiştir.

Python Frozenset (Kısıtlanmış Küme)

Frozenset, bir kümenin özelliklerine sahip yeni bir sınıftır, fakat elemanları atandıktan sonra değiştirilemez. Tuple’lar değişmez listeler iken, frozenset’ler değişmez kümelerdir.

Değişken olan kümelerin hash kodu (doğrulama kodu) oluşturulamadığı için sözlük anahtarları olarak kullanılamazlar. Öte yandan, kısıtlanmış kümelerin hash kodu oluşturulabilir ve bir sözlüğün anahtarı olarak kullanılabilir.

Kısıtlanmış kümeler, frozenset() fonksiyonu kullanılarak oluşturulabilir. Bu veri türü, copy(), difference(), intersection(), isdisjoint(), issubset(), issuperset(), symmetric_difference() ve union() gibi yöntemleri destekler. Değiştirilemez (immutable) olduğu için eleman ekleyen veya çıkaran yöntemlere sahip değildir.

Sözlük (Dictionary)

Python programlama dilinde sözlük, sırasız bir eleman koleksiyonudur. Bir sözlüğün her öğesinin bir anahtar/değer çifti vardır. Sözlükler, anahtar bilindiğinde değerleri almak için optimize edilmiş bir veri türüdür. Sözlük, içerisinde farklı veri türleri barındırabilen ve değiştirilebilir (mutable) bir veri türüdür.

Sözlük Oluşturma

Bir sözlük oluşturmak, öğeleri virgülle ayırarak küme parantezleri { } içine yerleştirmek kadar basittir. Bir elemanın, bir çift olarak ifade edilen, bir anahtarı ve buna karşılık gelen bir değeri vardır (anahtar: değer). Ayrıca yerleşik dict() fonksiyonu kullanılarak da bir sözlük oluşturulabilir.

Değerler herhangi bir veri türünden ve tekrarlanabilir şekilde tanımlanabilir. Fakat, anahtarlar değişmez tipte (karakter dizesi, sayı veya değişmez öğeler içeren demet) ve benzersiz olmalıdır.

Sözlükteki Elemanlara Erişmek

Değerlere erişmek için diğer veri türlerinde indeksleme kullanılırken, sözlük veri türünde anahtarlar kullanır. Anahtarlar, köşeli parantez [ ] içinde veya get() yöntemiyle kullanılabilir. Köşeli parantez [ ] kullanıldığı durumda, sözlükte ilgili anahtar bulunmadığında KeyError hatası ortaya çıkmaktadır. Diğer taraftan, anahtar bulunamazsa get() yöntemi None (Yok) değerini döndürmektedir.

Sözlük Elemanlarını Değiştirme ve Ekleme

Sözlükler değişkendir. Sözlükte anahtar (key) mevcutsa, mevcut değer güncellenir. Anahtarın bulunmaması durumunda sözlüğe yeni bir (anahtar: değer) çifti eklenir.

Öğeleri Sözlükten Kaldırma

pop() yöntemi kullanılarak sözlükteki belirli bir eleman kaldırılabilir. Bu yöntem, verilen anahtara karşılık gelen öğeyi kaldırır ve değeri döndürür. popitem() yöntemi, sözlükten rastgele bir (anahtar, değer) eleman çiftini kaldırmak ve döndürmek için kullanılabilir. Tüm öğeler clear() yöntemi kullanılarak bir kerede kaldırılabilir. Tek tek öğeleri veya tüm sözlüğün kendisini kaldırmak için del anahtar sözcüğü de kullanılabilir.

Python Sözlük Fonksiyonları

Bir sözlükle kullanılabilen fonksiyonlar kitabınız sayfa 142’de Tablo 4.6’da verilmiştir.

Sözlük Oluşturma (Dictionary Comprehension)

Sözlük oluşturma, Python’da yinelenebilir bir sözlükten yeni bir sözlük oluşturmanın kısa ve etkili bir yoludur. Sözlük oluştururken, bir ifade çiftinden (anahtar: değer) ve ardından küme parantezleri { } içinde bir for ifadesinden faydalanılır.

Bir sözlük oluştururken, isteğe bağlı olarak daha fazla for veya if ifadeleri kullanılabilir. İsteğe bağlı bir if ifadesi ile, yeni sözlüğü oluşturmak için elemanlar filtrelenebilir.

Sözlük Üyelik Testi

Bir anahtarın sözlükte olup olmadığı in anahtar sözcüğü kullanılarak ile test edilebilir. Üyelik testinin değerler için değil, yalnızca anahtarlar için olduğuna da dikkat edilmelidir.

Sözlük Üzerinden Yineleme (İterasyon)

Bir for döngüsü kullanılarak, bir sözlükteki her bir anahtar yinelenebilir. Yani sözlükteki tüm elemanlar üzerinde bir döngü şeklinde işlem yapılabilir.

Sözlük Yerleşik Fonksiyonlar

all(), any(), len(), cmp(), sorted(), vb. gibi yerleşik fonksiyonlar, farklı görevleri gerçekleştirmek için sözlüklerde yaygın olarak kullanılır.

Bu ünitenin sorularını uygulamada çözŞıklar, doğru cevaplar ve süreli sınav modu AÖF Soru Bankası uygulamasında