Yazan : Şadi Evren ŞEKER

Aslında bir betik dili (scripting language) olan ve bu yüzden bir yorumlayıcısı (interpreter) bulunan python, özellikle dilbilim ve veri güvenliği alanlarında yoğun olarak kullanılmaktadır. Özellikle Linux ve Unix varyantı işletim sistemlerinde sistem yöneticileri (administrator) tarafından baz işleri hızlandırmak amacıyla Perl, Php veya bash gibi betik dilleri (scripting languages) yoğun olarak kullanılır.

Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.

1 Kurulum ve çalıştırılması

Pythonu kurmak için python.org web sitesine girip indirme işlemini gerçekleştirmek gerekiyor. Ayrıca şayet grafik ara yüzü (GUI) kullanılacaksa wxpython isimli ve python üzerinde çalışan programında wxpython.org sitesinden indirilmesi gerekiyor.

Ben bu yazıda Windows üzerinde kurulan python 2.6 sürümü için ekran görüntüleri alacağım ancak aynı işlemler Linux türevi sistemlerde de yapılmaktadır. Dilde değişen bir şey yok sadece ortam değişmekte. Python kurulduktan sonra başlat menüsü altına aşağıdaki şekilde konsol kısa yoları ekleniyor:

Yukarıdaki menüde ilk seçenek wxpython kurulu olduğu için arayüz ile birlikte gelmiş ve 3. Seçenek ise normal python kurulumu. Bu yazı kapsamında ister ilk ister 3. Seçenekte olan python kurulumunu kullanabilirsiniz (yani bu yazı için wxpython kurulumu gerekmemektedir)

2 Python üzerinde basit kodların yazılması

Python esas olarak ili türlü kullanılabilir. Birincisinde python konsolu açılır ve kodlar buraya satır satır yazılır. Bu kullanım genelde büyük ölçekli programlar için yeterli olmaz çünkü kodun takibi ve hata yakalaması oldukça güçtür. Bunun için kodun boyutu büyüdükçe ikinci yol olan dosyanın yüklenerek çalışması yoluna gidilir.

Önce python konsoluna biraz alışmak için konsola komut vererek yapabileceğimiz bazı basit işlemleri tanıyalım.

Örneğin basit hesaplama işlemlerini konsolda yapabiliriz.

Yukarıdaki işlemleri teker teker tanıyacak olursak, + toplama, – çıkartma, * çarpma ve / bölme gibi dört işlemin yanında C dilinden de bilinebilecek % mod (modulo, remainder) yani bölümden kalan işlemi (örneğin 7’nin 3’e bölümünden kalan 1 bölüm 2’dir dolayısıyla 7%3 = 1 olarak bulunur.)

Ayrıca ikilik tabandaki (binary) işlemlerden ^XOR ( özel veya, exclusive or) işlemi.

Örneğin 8 ^2 = 10 ‘dur çünkü ikilik tabanda bu sayıları yazarsak

8 = 1000

2 = 0010

^ = 1010

Olarak bulunur ve 1010 ikilik tabanındaki sayı da onluk tabanda 10 olarak bulunur.

Yine ikilik tabandaki (Binary) sayılar üzerinde kaydırma (shift) işlemi mümkündür.

Örneğin << sola kaydırma işlemidir:

2 = 0010

2<<2=1000

Olarak 2 hane kaydırılır ve sonuçta çıkan sayı 8 olur

8=1000

8>>1 = 0100

Olarak 1 sağa kaydırılır ve sonuç 4 olarak bulunur.

Ayrıca yukarıdaki işlemlere ilave olarak birden fazla işlemin tek satırda birleştirilmesi de mümkündür:

Yukarıda bu işlemlerin nasıl yapıldığı ile ilgili bir iki örnek bulunmaktadır. Örnekleri inceleyecek olursak ilk örnekte parantezler kullanılarak toplama işleminin önce yapılması sağlanmıştır. Toplama işleminin ardında bölüm yapılmış ve sonuçta 4/4 = 1 sonucu bulunmuştur.

İkinci satırda ise 4/3 = 1 sonucu bulunur. Burada dikkat edilmesi gereken bölme işleminin tam sayı (integer) aritmetiği olduğudur. Yani bölme sırasındaki sonuç tam sayılar arasında yapıldığı için ondalık kısmı göz ardı edilir. Sonucun tam kısmı alınır (2.9 da olsa sonuç 2 olarak alınır yuvarlama yapılmaz).

Üçüncü satırda ise işlem önceliği görülüyor. Parantez kullanılmadığı zaman işlemler önceliklerine göre bir sırayla çalışırlar. Yukarıdaki örnekte önce bölme yapılmış (3/2 = 1 bulunmuş) ardından kalan işlemi yapılmış ( 7 % 1 =0) bulunuş ve sonuçta 2 ile toplanarak sonuç 2 bulunmuştur. Görüldüğü üzere bölme kalana, kalan da toplamaya göre önceliklidir.

Son örnekte ise ondalıklı sayılarla nasıl çalışacağımızı görüyoruz. Burada sonucun daha önce ikinci satırdan farklı olarak ondalıklı sonuç içermesinin sebebi işlem sırasındaki sayıların ondalık kısmı olmasa bile birer ondalıklı sayı olarak sisteme girilmiş olmasıdır.

3 Python ile değişkenlerin (variables) kullanılması

Pythonda değişken kullanımı tipsizdir (untyped) yani çoğu betik dilinde (scripting language) olduğu üzere değişkenin içerisine hangi tipte veri konulursa değişken bu tipte bir değişken olarak kendisini ayarlar.

Yine konsol üzerinden basit bir iki deneme yapalım:

Yukarıdaki örnekte ilk satırda sadi=10 yazılarak “sadi” isminde bir değişken (variable) tanımlanmış ve içine değer olarak 10 tam sayı değeri konulmuştur. İkinci satıda print fonksiyonu ile değişkenin içeriği ekrana bastırılmıştır ve ekranda 10 değeri görülmüştür.

Ardından evren isminde bir değişken tanıtılarak içerisine değer olarak 20 tam sayı değeri konuşmuştur.

print sadi+evren

satırında ise sadi değişkeni ve evren değişkeni içerisindeki değerler toplanarak ekrana basılmıştır.

Ardından gelen örnekte aynı değişkenlere bu sefer birer dizgi (string) konulmuş ve + işlemi (toplama) bu sefer dizgiler arasında uygulanmıştır. Toplama işlemi dizgiler için üleştirme (concatination) anlamına gelir ve iki dizgiyi birleştirerek ekrana basar sonuç “sadievren” şeklinde birleştirilmiş dizgidir.

4 Python ile basit dizgi (string) işlemleri

Hazır dizgilerle çalışmaya başlamışken bir iki basit dizgi (string) işlemini tanımaya çalışalım.

Örneğin birden fazla satırdan oluşan bir dizgiyi python ile aşağıdaki şekilde ekrana bastırabiliriz.

Yukarıdaki örnekte birden fazla satırı tek bir dizgiye nasıl koyduğumuzu görüyoruz. Örneğin ilk denemede birinci satıra sığmayan dizgi ikinci satıda devam ettirileceği için ters kesme (back slash) işareti ile satır bitirilmiş, alttaki satırda dizgiye kalan yerden devam edilmiştir. Bu durum yukarıdaki çalışmanın son satırında da görülmektedir.

İlk denemede ilave olarak n sembolü ile yeni satır (new line) sembolü basılmış ve dolayısıyla “sadi evren seker” ile www.bilgisayarkavramlari.com yazıları iki ayrı satırda çıkmıştır. Son denemede n sembolü olmadığı için bütün yazı tek satırda ekrana basılmıştır.

Yukarıdaki örnekte ikinci denemede ise print fonksiyonundan sonraki dizgi (String) r harfi ile başlamıştır. Bu İngilizce ham dizgi (raw string) anlamımdadır. Yani yazının içerisindeki özel semboller dikkate alınmaz. Dolayısıyla bu örnekte görüldüğü üzere n yazısı da alt satıra devam sembolü de sonuçta aynen yazılmıştır.

Pythona özgü olarak dizgilerde kullanılabilecek diğer bir özellikte üç tırnak işaretidir “”” şeklinde veya ”’ şekline çift veya tek tırnak 3 kere tekrarlanarak bir dizgiye başlanıyor ve bitiyorsa içindeki semboller (alt satıra devam için bastığımı enter) aynen ekrana yazılır.

Yukarıdaki çalışma örneğinde ise dizgilerin (String) bir dizi içerisinde kullanılması görülmüştür. Aslında her dizgi (String) yapısı itibariyle bir karakter dizisidir (array).

Yukarıdaki çalışmada ilk önce “yazi” isimli bir değişkenin içerisine “www.bilgisayarkavramlari.com” dizgisi (string) yerleştiriliyor. Ardından her satırda bu dizgiden farklı bir karakter veya alt dizgi (substring) okunuyor. Satırlar ve açıklamaları aşağıdaki şekildedir.

s herhangi bir sayı olmak kaydıyla:

[s] dizinin s. Elemanını verir

[s1:s2] dizinin s1 ve s2 sayıları arasındaki elemanları verir

[s:] dizinin s. Elemandan sonraki sonuna kadar olan elemanları verir

[:s] dizinin başından s. Elemana kadar olan elemanları verir.

[-s] dizinin sondan s. Elemanını verir

[:-s] dizinin başın başlayarak, sondan s. Elemanına kadar olan elemanları verir

[-s:] dizinin son s elemanını verir

Ayrıca yukarıdaki çalışmada sonda görülen “len(yazi)” fonksiyonu ile yazi değişkeninin içerisindeki dizginin boyutu bulunmuştur.

5 Python ile listelerin kullanımı

En temel veri yapılarından birisi olan listeler Prolog ve Lisp (Scheme) benzeri bir şekilde Python dilinde de desteklenmektedir. Listelerin amacı birden fazla verinin tek bir değişkende tutulmasıdır. Listelerde yapılabilecek temel işlemleri aşağıdaki örnek üzerinden anlamaya çalışalım:

Yukarıdaki örnekte ilk satırda dizi isimli bir liste tanımlanmış ve içerisine 5 eleman (ilk 3’ü dizgi (String) ve son ikisi tamsayı (integer) ) yerleştirilmiştir.

İkinci satırda len() fonksiyonu ile listenin boyutu olan 5 sayısı alınmıştır.

Liste üzerinde bir önceki bölümde anlattığımız dizgilerin (string)
dizi (array) gibi kullanılması konusuna bakabilirsiniz. Buradaki işlemlerin tamamı listeler için de geçerlidir. Örneğin dizi[2:] kullanımında listedeki 2. Elemandan sonraki elemanlar alınmıştır.

Benzer şekilde dizi[3]+5 ile sayısal olarak 12 okunmuş ardından da 5 ile toplanarak 17 basılmıştır.

Herhangi bir satırda listenin ismini tek başına yazarak “dizi” şeklinde ekrana içeriği ekrana basılabilir.

Listenin istenen bir aralığına yeni elemanlar koymak da mümkündür. Örneğin dizi[1:2] = [‘bilgisayar’,’kavramlari’] satırında listemizin 1. Elemanın (1’den 2.ye kadar olan elemanları sadece 1. Elemandır) üzerine yeni bilgi olarak [‘bilgisayar’,’kavramlari’] yazılmıştır.

Listelerin içerisinde liste kullanılabilir. Yani listeler listesi (list of lists) kavramı pythonda da mümkündür. Buna örnek olarak dizi[1] = [2,3,4] yazılan satıra bakabilirsiniz.

Örneğin yukarıdaki çalışmadan sonra diz[4][1] yazarsak ekranda 3sonucu görülür. Çünkü listenin 4. Elemanı [2,3,4] olan bir alt listedir. Bu alt listenin 1. Elemanı ise sayısal olarak 3’tür.

6 Python ile yapısal programlama

Yapısal programlamanın (Structured programming) temel üç şartı bulunur:

  • Bir program bloğunun çalışmasının koşula bağlanması (if koşulları)
  • Bir program bloğunun çalışmasının tekrarlanması (döngüler (loops))
  • Bir program bloğunun çalışmasının parametrik hale getirilmesi (fonksiyonlar)

Günümüz dillerinin neredeyse tamamı yapısal programlama özelliğindedir. Pythonda bu anlamda yapısal bir programlama dili sayılır ve yukarıdaki özellikleri barındırır. Bu özelliklerden ilki olan koşulların nasıl kodlandığından başlayalım. Öncelikle bu seviyeden sonra artık bir dosyaya kaynak kodu yazıp bu dosyayı pythonda çalıştırmaya başlamamız gerekiyor. Bunun için pythonda bulunan yeni dosya açma özelliğini kullanıyoruz:

Shellde bulunan File menüsünden New seçeneği seçilerek kod yazacağımız notepad’e benzeyen bir editörü açıyoruz:

Editör açıldıktan sonra kodlamaya başlayabiliriz. Örnek olarak aşağıdaki şekilde bir kod yazdığımızı düşünelim:

Yukarıdaki kodda öncelikle x isimli bir değişkenin içerisine klavyeden raw_input() fonksiyonu ile sayı okunmuştur (Daha doğrusu okunan değer int() fonksiyonu ile tam sayıya çevrilmiştir)

Python dilinde koşullar if ile başlar ardından önerme yazılır sonrada : işareti ile koşulun doğruluğu durumunda yapılacak işlemler sıralanır.

Koşulun doğru olmaması durumunda elif (else if ) ile başlayan zincir devreye girer. Bu zincirde herhangi bir koşul doğruysa ilgi bloğa girilir. Şayet hiçbirisi doğru değilse en sonda bulunan else bloğuna gidilir.

Yukarıdaki örnekte x değişkenine okunan değerin 5’ten küçük olup olmadığı ilk if satırında kontrol edilmiş. Şayet önerme(kaziye) doğru bulunursa ilk bloğa yani print “sayi 5’ten kucuk” satırına girip çalıştırılacak ve geri kalan hiçbir elif veya else satırları kontrol edilmeyerek atlanacak. Şayet yanlış bulunursa ilk eliften başlanarak farklı bir önermenin doğru olmasına kadar gidilecek veya else ile hiç birinin doğru olmadığı durum çalışacaktır.

Python ile kod tekrarlamak yani döngüler (loops) da kullanılabilir. Bunun için çoğu dilde bulunan for satırı aşağıdaki şekilde yazılabilir:

Yukarıdaki kodda öncelikle liste isimli bir değişkene 3 elemanlı bir liste atanmıştır. Ardından bir for döngüsü ile listedeki bütün elemanlar i döngü değişkenine sırasıyla konulmakta ve ekrana, i döngü değişkeninin değeri, bu değişkenin boyutu (yani listedeki her kelimenin uzunluğu) ve döngü değişkeninin 2. Elemanı (yani listedeki her kelimenin 2. Elamanı (eleman sayımı 0 dan başlamaktadır) basılmıştır.

Yukarıdaki örnek kodda, topla isminde iki parametre alan bir fonksiyon tanımlanmıştır. Fonksiyon tanımı ardından bu fonksiyon içerisinde klavyeden sayı okuyan raw_input() fonksiyonları ile birlikte kullanılmış ve okunan değerler topla fonksiyonuna parametre geçilmiştir. Sonuçta çalışan örnekte iki sayı girilerek girilen değerlerin toplamı ekrana basılmıştır.

Biraz daha karmaşık bir fibonacci fonksiyonu yazmaya çalışalım. Öncelikle fonksiyonu iteratif olarak yazmayı deneyelim:

Yukarıdaki örnekte fibonacci serisini (kendinden önceki iki sayının toplamını bir sonraki sayı olarak atayan seri) gösteren kod yazılmıştır. Kodda a,b değişkenlerine 0,1 değeri konmuştur. Yani a=0 ve b=1 olarak atanmıştır. b<n şartı sağlandığı sürece a=b ve b= a+b değerleri atanarak devam eder.

Örnek fonksiyon fibo(1000) için çalıştığında sayısal değeri 1000’den küçük olan seri elemanlarını ekrana basmaktadır.

Benzer kodu özyineli (recursive) olarak aşağıdaki şekilde yazmak mümkündür.

Yukarıdaki yeni kodda, fibo fonksiyonu içerisinden yine kendisini çağıran bir fonksiyon recursive, (özyineli) şekilde yazılmıştır. Sonuç bir önceki fonksiyon ile aynıdır.

Ayrıca python dilinde lisp (scheme) dilinde olduğu gibi lambda formumda fonksiyonlar yazmak da mümkündür. Yani bir fonksiyonun bir veya daha çok parametresi açık bırakılabilir.

Örneğin aşağıdaki kodu ele alalım:

Yukarıdaki kodda tanımlanan topla fonksiyonu tek parametrelidir. Yani normalde toplama fonksiyonu a+b olmasına karşılık, yukarıda sadece a parametresi olan bir fonksiyon tanımlanmıştır. Bu kullanım programlama mantığındaki devamsal geçiş tarzıdır (continuation passing style) ve f isminde tanımlanan ikinci fonksiyon, topla fonksiyonunun tek parametresi sabitlenmiş halidir. Yani f fonksiyonu aslında 10 ile toplama fonksiyonudur. İlk parametre sabittir ve ikinci parametresi f’e verilir. Örneklerde f(5) işleminin sonucu 15 ve f(20) işleminin sonucu 30 bu yüzden çıkmıştır.

Ayrıca aşağıdaki yazıları okuyabilirsiniz:

Yorumlar

  1. ozy

    6.bölüm python yapısal programlamada new file açıp yazdıktan sonra nasıl diğer shell programına yansıtıldı??/

serkan için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir