Algoritma ve Bilgisayar Programlama I (Python) (Çeşitli Konular-II) str, int , float ve list fonksiyonları bir veri tipini diğerine dönüştürür. str fonksiyonu herhangi değeri string yani karakter dizesine dönüştürür. int ve float fonksiyonları herhangi bir değeri tam sayı ve ondalıklı sayıya dönüştürür. list fonksiyonu, karakter dizelerini (strings) ya da diğer veri türlerini listeye çevirir. Example-1’de str fonksiyonu tam sayı (integer) türündeki veri türlerini karakter dizesine çevirdikten sonra sıralamasını ters çevirip aynı sayı olup olmadığını kontrol eden bu sayıları ekrana yazdıran program kodunu göstermektedir. Burada str fonksiyonu tam sayıyı karakter dizesine çevirip karakterler üzerinde işlem yapmaya izin veriyor. Example-2’de kişinin doğum tarihinden yaşını bulan kod yapısı görülmektedir. Burada önemli olan int fonksiyonu ile birthday değişkeni içindeki son 4 karakteri tam sayıya çeviren ve günümüzdeki yıldan çıkararak (2010-year) yaşını hesaplayan kod yapısı mantığıdır. Example-3’de 47 gibi bir tam sayının rakamları toplamı önce str fonksiyonu ile karakter dizesine çevrilmiş daha sonra ilgili basamakları tekrardan int fonksiyonu tam sayıya çevrildikten sonra ayrı ayrı toplanmıştır. 47 sayısının rakamları toplamı 11 olarak bulunmuştur. Example-4’de ondalıklı bir sayının tam ve ondalıklı kısmını bulmak için int fonksiyonu kullanılmıştır. ipart değişkeni tam sayı kısmını saklarken, dpart değişkeni ondalıklı kısmı saklamaktadır. Python’da değişkenler True ve False olmak üzere iki farklı Boolean (Lojiksel-Mantıksal) türünde değer alabilir. Yandaki kısa örnekte görüldüğü gibi değişken içindeki değerin True ya da False olması durumu if yada while koşul yapısı ile kontrol edilmiştir. Kısaltmalar (Shortcuts), counter (sayıcı) değişken işlemlerinde sıklıkla kullanılır. Mesela count=count+1 ifadesi count+=1 ifadesine eşittir. Farklı değişkenlere aynı değeri atamak için soldaki örnek kod yapısı kullanılabilir. Sağdaki örnek kod yapıları içinde diğer kısaltma işlemleri görülmektedir. Mesela liste içindeki değerleri ayrı ayrı değişkenlere atamak yerine tek seferde bütün bir liste içindeki değerleri x,y ve z gibi farklı değişkenlere atayabiliriz. Bununla beraber mantıksal koşul ifadelerinde ve karşılaştırma içeren ifadelerde de kısaltmalar kullanılır. İç İçe döngüler (nested loops) programlama da oldukça sık kullanılan kod yapılarıdır. Yandaki Example-2 örneğinde görüldüğü gibi (2x+3y==4 and x-y==7) eşitliklerinin sağlandığı noktada birinci dereceden iki bilinmeyenli denklem çözümü gerçekleşecektir. Example-3’de Pisagor teoremi (Pythagorean theorem) için 1-100 arasındaki değerler arasındaki bütün x, y ve z değerleri elde ediliyor. (Sözlükler) Dictionaries (Sözlükler), listelerin özel bir versiyonudur. Mesela yandaki örnekte görüldüğü gibi days isimli liste aylara ait farklı günleri tutarken, days isimli dictionary hem senenin aylara ait isimlerini ayrıca o ayların içindeki günleri beraber saklayabilir. Örnek olarak days[‘January’] ile o aya ait kaç gün olduğunu görüntüleyebiliriz. Bir dictionary oluşturmak için {} süslü parantez kullanılır. Daha sonra içine girilen her bilgi ikili çiftler (pair) halinde saklanır. İlk girilen tek tırnak içine yazılan ifadeye anahtar (key) denirken, ikinci ifadeye değer (value) denilmektedir. Yani d[‘A’] kodu size 100 değerini verirken, d[‘B’] kodu size 200 değerini verir. Dictionary içinde bir değeri değiştirmek için d[‘A’]=400 kullanılabilir. Hatta d[‘C’]=500 ile yeni bir anahtar ve değer çifti de eklenebilir. Listelerde var olan indeks dışında bir değer girmek ise imkansızdır. Bu açıdan dictionary’nin listelere göre avantajı söz konusudur. Bununla beraber dictionary içinden veri silmek için del d[‘A’] kullanılabilir. Boş liste oluşturmak için d={} yazılabilir. Example-1’de dictionary, gerçek bir sözlük gibi kullanılabilir. Örnekte hayvan isimleri anahtar (key) olarak ve onlara ait açıklamalar string (karakter) olarak verilmiştir. Example-2’de roman rakamları ve onlara ait sayısal değerler görülmektedir. Example-4’de bir kart destesi (deck) dictionary ile oluşturulmuş. shuffle fonksiyonu ile bu kart destesi karıştırılıyor. Daha sonra istenen bir kart deck[0] ile elde edilebilir. dictionary içindeki verileri başka bir dictionary’e kopyalamak için copy yöntemi kullanılır. Bir dictionary içindeki veriyi kontrol etmek için in ya da not in operatörü kullanılır. Mesela d[‘C’] ifadesi sonucunda bir cevap geriye dönmeyecektir çünkü C anahtar kelimesi dictionary içinde yoktur. dictionary içindeki anahtar ve anahtarlara ait değerleri görüntülemek için for döngüsü kullanılabilir. Bir dictionary içindeki verilerin hangisinin içinde 100 değerine sahip olan anahtarları bulmak için yandaki kod yapısı kullanılır. Fonksiyonlar (functions), programlamada oldukça önemlidir. Functions özellikle büyük kod programlamalarının kolay okunmasını ve yazılmasını sağlamak için sürekli yapılan işlemlerin farklı bir kod bloğu içinde çalışmasını sağlar. Böylece her seferinde ilgili kod yapısı tekrar tekrar yazılmak zorunda kalınmaz. Sadece ilgili işlem yapılması gerekiyorsa function çağrılır. Fonksiyon oluşturmak için def ve fonksiyon ismi: ifadesi kullanılır. Daha sonra fonksiyon altında çalışması istenen kod yapısı yazılır. Tanımlanan fonksiyon programın herhangi bir yerinde çağrılabilir. Mesela yandaki basit örnekte önceden tanımlanan print_hello fonksiyonu içinde hello yazan program kodu görülmektedir. Ana programın herhangi bir yerinde bu fonksiyon çağrıldığı zaman (print_hello()) ilgili fonksiyon içindeki kod yapısı çalışır. Yandaki tanımlanan fonksiyon örneğinde ekrana * karakteri ile kare bir şekil çizilmiştir. Fonksiyon içinde tanımlanan ifadelere argüman (argument) denilmektedir. Böylece ilgili fonksiyon içine gönderilen değer ile ilgili işlem yapılmaktadır. Mesela yandaki örnekte n değeri 3 aldığında ekrana 3 defa Hello yazarken, n=5 olduğunda ekrana 5 defa Hello yazılmaktadır. Fonksiyon içine gönderilebilir: çok sayıda argüman Bir fonksiyon içinden geriye değer döndermek için return ifadesi kullanılır. Yandaki örnekte convert içine gönderilen Celsius cinsi sıcaklık değeri Fahrenheit’a çevrildikten sonra tekrardan return ile hesaplanan değer fonksiyon dışına geri gönderilir. Böylece hesaplanan değer ilgili kod yapısında ekrana yazdırılmış olur. Example-2’de derece fonksiyon gösterilmiştir. cinsinden çalışan Example-3’de birinci dereceden 2 bilinmeyenli denklemlerin çözümü için oluşturulan fonksiyon gösterilmiştir. Sonuçlar ise return ifadesi ile bir liste halinde [x,y] olarak geri dönderilmiştir. Example-4’de bir fonksiyonun içindeki kod yapısında return ifadesi fonksiyondan erken çıkmak için kullanılmış: Default argüman değeri, kullanıcının değer girmediği zamanlarda değer alan ve kullanan bir fonksiyon ifadesidir. Mesela yanda görülen kod yapısında kullanıcı eğer 5 değerini girerse fonksiyonu çağırırken n=5 değerini alır. Eğer girmezse n=1 değerini alır. Bir değişken (variable), bir fonksiyon içinde tanımlandığında, bu fonksiyon için yereldir (local), yani aslında o fonksiyon dışında mevcut değildir. Bu şekilde her fonksiyon kendi değişkenlerini tanımlayabilir ve bu değişken adlarının başka fonksiyonlarda kullanılıp kullanılmadığı konusunda endişelenmenize gerek kalmaz. i değişkeni local bir değişkendir yandaki örnek kod içinde. Öte yandan, bazen aslında aynı değişkenin birden çok fonksiyonun içinde kullanılabilir olmasını istersiniz. Böyle bir değişkene global değişken denir. Global değişkeni tanımlamanız gerekmektedir. Yandaki ve yukardaki örnekte global olarak tanımlanan time_left değişkeni görülmektedir. Bu değişken için ilk değer 30 olurken daha sonra 0 değerini almıştır. Görüldüğü gibi print_time() fonksiyonu içine herhangi bir argüman gönderilmiyor. Python, nesne yönelimli bir programlama (objectoriented programming) dilidir ve aslında zaten birçok nesne yönelimli kavramı kullanıyoruz. Anahtar kavram, bir nesnenin olgusudur. Bir nesne iki şeyden oluşur: veriler ve bu verilerle çalışan işlevler (yöntemler adı verilir). Örnek olarak, Python'daki dizeler nesnelerdir. Dize nesnesinin verileri, bu dizeyi oluşturan gerçek karakterlerdir. Yöntemler, düşürme, değiştirme ve bölme gibi şeylerdir. Python'da her şey bir nesnedir. Bu, yalnızca dizeleri ve listeleri değil, aynı zamanda tam sayıları, kayan sayıları ve hatta işlevleri de içerir. Sınıf, nesneler için bir şablondur. Tüm nesnenin yöntemlerinin kodunu içerir. Bir sınıf oluşturmak için class ifadesini kullanırız. Sınıf isimleri genellikle büyük harfle başlar. Çoğu sınıfın __init__ adında bir yöntemi vardır. Alt çizgiler, bunun özel bir yöntem olduğunu göstermektedir. Kurucu/Yapıcı (constructor) olarak adlandırılır ve birisi sınıfınızdan yeni bir nesne (object) oluşturduğunda otomatik olarak çağrılır. Yapıcı genellikle sınıfın değişkenlerini (class variable) ayarlamak için kullanılır. Yukarıdaki programda, kurucu a ve b olmak üzere iki değer alır ve a ve b sınıf değişkenlerini bu değerlere atar. Sınıftan yeni bir nesne oluşturmak için, kurucuya göndermek istediğiniz Sınıfınızdaki her yöntemin ilk argümanı, self adı herhangi bir değerle birlikte sınıf adını çağırırsınız. Genellikle onu bir verilen özel bir değişkendir. Sınıfınızın değişken adına atamak isteyeceksiniz. e = Example (8,6) işleminin değişkenlerinden veya yöntemlerinden birine her yaptığı da budur. gönderme yaptığında, onlardan önce kendisi gelmelidir. self’in amacı, sınıfınızın değişkenlerini ve Nesnenin yöntemlerini kullanmak için, e.add () 'da olduğu gibi nokta yöntemlerini programdaki diğer değişkenlerden ve operatörünü kullanırız. işlevlerden ayırmaktır. Nesne yönelimli programlamada, başka bir sınıftan inşa edilen bir sınıf oluşturabileceğiniz kalıtım (inheritance) adı verilen bir kavram vardır. Bunu yaptığınızda, yeni sınıf, miras aldığı sınıfın tüm değişkenlerini ve yöntemlerini alır (temel sınıf olarak adlandırılır). Ardından, temel sınıfta bulunmayan ek değişkenleri ve yöntemleri tanımlayabilir ve ayrıca temel sınıfın bazı yöntemlerini geçersiz kılabilir. Yani, onları kendi amaçlarına uyacak şekilde yeniden yazabilir. Dışardan erişilemeyen class içindeki değişkene _hiddenvariable diyorlar. Yani saklı değişken anlamına geliyor. (Çeşitli Konular 3) L bir liste (list) ve s bir karakter dizesi (string) ise, bu durumda L [0] listenin ilk öğesini ve s [0] dizenin ilk öğesini verir. Listenin ilk elemanını 3 olarak değiştirmek istersek, L [0] = 3 yapacaktır. Ancak bir dizeyi (string) bu şekilde değiştiremeyiz (immutable). Nedeni, Python'un listeleri ve dizeleri nasıl ele aldığı ile ilgilidir. Listelerin (ve sözlüklerin (dictionary)) değiştirilebilir (mutable) olduğu söylenir, bu da içeriklerinin değişebileceği anlamına gelir. Öte yandan dizeler değişmezdir, yani değiştirilemezler. Dizelerin değişmez olmasının nedeni kısmen performans içindir (değişmez nesneler daha hızlıdır) ve kısmen de dizelerin sayılar gibi temel olduğu düşünüldüğü içindir. Yandaki 2 örnekte string ve list içine atanan değerin sırasıyla orijinal veriyi değiştirmeyen ve değiştiren yapıları olduğunu görüyoruz: copy=L[:] ifadesi ile liste içindeki değerler bir başka listeye bu şekilde kopyalanabilir. Böylece orijinal veri içindeki değerler değişmez. Tuple bir çeşit değişmeyen (immutable) listedir. Listeler gibi [ ] köşeli parantez yerine ( ) normal parantez kullanılır. len, count ve index gibi yöntemleri kullanabilir fakat içerik immutable olduğundan sort ve reverse gibi yöntemleri kullanmaz. Tuble’lerin olmasının bir nedeni, bazı durumlarda değişmez bir liste türü isteyebilmenizdir. Örneğin, listeler sözlüklerde anahtar görevi göremez çünkü listelerin değerleri değişebilir ve Python’da sözlüklerin (dictionary) takip edilmesi bir kabus olur. Tuples, ancak, sözlüklerde anahtar görevi görebilir. Öğrenci ekiplerine not verme örneği gibi: Bir listeyi ya da bir string’i tuple’ye çevirmek için tuple() fonksiyonu kullanılır: Kaynaklar: • https://pythondunyasi.com/python-kutuphaneleri/ • https://tr.wikipedia.org/wiki/Python_(programlama_dili) • https://www.geeksforgeeks.org • https://www.programiz.com • https://www.w3schools.com • https://www.tutorialspoint.com