PYTHON PROGRAMLAMA DİLİ Ege Bilmuh GNU/Linux ve Özgür Yazılım Çalışma Grubu http://tinyurl.com/ozgurbilmuh Enes Ateş enes@enesates.com 26.04.2012
Nedir bu Python? Adını Monty Python's Flying Circus adlı diziden almıştır. Özgür yazılımdır. Yorumlanabilir bir dildir. Basit sözdizimlidir. Girintiyi sever, süslü parantezlerden kaçınır. Kodları okuması rahattır. Tip bağımsızdır. Birimseldir (Modüler). Kodun yeniden kullanımını kolaylaştırır. Birçok alanda kullanılabilir. Küçük betikler, büyük projeler.
Başka Nedir? Fonksiyonel, prosedürel, ve nesne yönelimli programlama paradigmaları arasında rahat geçiş yapmayı sağlar. Yüksek seviye ile düşük seviye programlama arasında dengededir. Tüm platformlarda çalışır (GNU/Linux, Windows, Mac OS vb.). Kod belgelendirilebilirdir (epydoc, doc string). Düzinelerce modül içeren oldukça kapsamlı standart kütüphanesi vardır. Kısaca Piller dahildir. Listeleri, demetleri, kümeleri, sözlükleri, karakter dizilerini vb. bir çok veri tipini destekler.
Kimler Kullanır? Google, Yahoo, CERN, NASA, Apache, Ubuntu, Fedora, Gentoo, Pardus, Blender, Maya, GIMP, Inkscape, Django, BitTorrent, Çoğu GNU/Linux dağıtımında öntanımlı bileşendir.
Python'ı Çalıştırmak GNU/Linux dağıtımlarında: Genellikle kurulu geldiği için uçbirim (terminal) üzerinden erişilebilir. İstenirse farklı bir geliştirme ortamı kullanılabilir (Vim, Geany, PyDev). Uçbirimden python komutu girildikten sonra çalışılabilir haldedir. Windows ortamında: www.python.org/download adresinden uygun sürüm indirilip kurulur. Daha sonra Python YOL'a (PATH) kurulu olduğu dizin değeriyle eklenir. Ayrıntılı bilgi: tinyurl.com/pythonyol Komut satırından python komutu girildikten sonra çalışılabilir haldedir. Kodlar py uzantılı bir dosyaya yazılıp python dosyaadı.py komutu ile çalıştırılabilir. Türkçe karakter sorununu çözmek için aşağıdaki satırlar dosyanın başına eklenmelidir: GNU/Linux: # -*- coding: utf-8 -*- Windows: # -*- coding: cp1254 -*-
Merhaba Python! İlk kodumuzu klasik bir örnekle yazalım: print Merhaba Python! Farklı denemeler yapalım: print Ben Python, Monty Python \n * 5 print 'Leyla ile Mecnun\'un son bölümü' 22 * 30 ya da print 22 * 30 print 22 + 30 print 22 + 30 # Karakterleri birleştirir. 5 ** 3 # 5 sayısının 3. kuvvetini alır. # işareti, Python'da yorum satırı eklemek için kullanılır.
Değişkenler Python'da değişkenlerin tipini tanımlamaya gerek yoktur. n = 5 print n n * 2 Karakter dizileri açısından inceleyelim: a = 5 b = 3 print a, sayısı, b, sayısından büyüktür. print %s ile %s çarpılırsa %s elde edilir. %(a, b, a*b)
Kullanıcıyla İletişim Kullanıcıdan girdi almak için: a = raw_input( Lütfen bir sayı giriniz: ) b = raw_input( Lütfen başka bir sayı daha giriniz: ) print a + b a = input( Lütfen bir sayı giriniz: ) b = input( Lütfen başka bir sayı daha giriniz: ) print a + b raw_input fonksiyonu değişkenleri karakter dizisi (string) olarak, input fonksiyonu ise tamsayı (integer) olarak algılar.
Koşullar Python'da koşullar if, else ve elif komutları ile sağlanır. sayi = input("lütfen bir sayı giriniz: ") if sayi > 0: print "Sayı 0'dan büyüktür." elif sayi == 0: print "Sayı 0'dır." else: print "Sayı 0'dan küçüktür." Girintilere Dikkat!
Döngüler while döngüsü cevap = raw_input( Python mu Java mı? ) while cevap!= Python : print Yanlış cevap! cevap = raw_input( Python mu Java mı? ) for döngüsü for i in range(1, 10, 2): # 2 artış miktarı için kullanılmıştır, seçimlidir. print i, mumdur for harfler in u Özgürlük : # u: Türkçe karakter sorununu çözmek için print harfler
Fonksiyonlar Python'da fonksiyonlar def parçacığı ile tanımlanır: def topla(a = 3, b = 4): carp(a + b) def carp(c): print 2 * c topla(14, 6) topla(5, ) İstenirse değişkenlere başlangıç değerleri verilebilir. def fib(n): a, b = 0, 1 while a < n: a, b = b, b+a print a, fib(10)
Hata Yakalama try, except: try: ilk = int(raw_input("bölme işlemi için ilk sayıyı girin: ")) ikinci = int(raw_input("şimdi de ikinci sayıyı girin: ")) sonuc = float(ilk) / ikinci print sonuc except ZeroDivisionError: print "Lütfen sayıyı 0'a bölmeye çalışmayın!" except ValueError: print "Lütfen harf değil, sayı girin!" except (ZeroDivisionError, ValueError): pass # Hata varsa hiçbir şey yapma
Listeler (Lists) Listeleri başka dillerdeki dizilere benzetebiliriz. liste = [ GNU, Tux, Gnome, 22, 30] liste # Listenin elemanları ekrana yazdırılır. len(liste) # Listedeki eleman sayısını verir. liste[2] # Listedeki 3. elemanı yani Gnome'u ekrana yazdırır. liste.append( Octave ) # Listenin sonuna bir eleman ekler. liste.insert(2, Sage ) # 2, elemanın listede yerleşeceği sıradır. liste.remove( Tux ) # Listeden Tux adlı ilk elemanı çıkarır. liste.pop(2) # Listeden 3. elemanı siler ve ekrana yazdırır.
Listeler (Devam) Listeler üzerinde yapılabilecek diğer işlemler: yeni_liste = [ Vim, GIMP, LibreOffice, Clementine ] liste.extend(yeni_liste) # Eski listeye yeni listeyi ekler. ya da liste = liste + yeni_liste liste.index( GIMP ) # GIMP elemanının kaçıncı sırada olduğunu verir. liste.sort() # Listedeki elemanları alfabetik olarak sıralar. liste.reverse() # Listedeki elemanların sırasını ters çevirir. liste.count( Vim ) # Elemanın listede kaç kez geçtiğini verir. liste[1:3] # Listedeki 2. ve 3. elemanları verir (GIMP ve LibreOffice).
Demetler (Tuples) Listelerden farkı üzerinde oynama yapılamamasıdır. demet = Özgür, Yazılım, 22, 30 ya da demet = ( Özgür, Yazılım, 22, 30) demet = ( Free Software,) # Tek öğe için virgül koymak gerekli. Yoksa demet değişkeninin tipi karakter dizisi olarak algılanır. aile = Anne, Baba, Kardeşler # demetleme (packing) a, b, c = aile # demet çözme (unpacking) Değişikliğe izin vermedikleri için listelerden daha güvenlidirler. Ayrıca listelere göre daha hızlı çalışırlar.
Sözlükler (Dictionaries) Anahtar ve değer arasında bağ kuran bir veri tipidir. ilceler = { Urla : İzmir, Harput : Van, Şile : İstanbul } ilceler[ Urla ] # İzmir değerini ekrana yazdıracaktır. ilceler[ Bandırma ] = Balıkesir # Sözlüğe yeni bir eleman ekler. ilceler[ Harput ] = Elazığ # Elemanın değerini değiştirir, düzeltir. del ilceler[ Şile ] # Elemanı sözlükten siler. ilceler.clear() # Sözlükteki tüm elemanları siler. ilceler.keys() # Sözlükteki anahtarları verir (Urla, Harput vb.) ilceler.values() # Sözlükteki değerleri verir (İzmir, Elazığ vb.) Sözlükler uzun if-elif-else bloklarından kurtulmayı sağlar.
Kümeler (Sets) Kümeler, matematikten bildiğimiz küme kavramının sahip olduğu bütün özellikleri taşır (kesişim, birleşim, fark vb.) kume = set(["elma", "armut"]) # liste, demet, sözlük de ekleyebiliriz. kume = set("adana") for i in kume: print i # Çıktı: a d n. Çünkü kümelerde her elemandan bir tane vardır. yedek = kume.copy() # Kümenin tüm içeriğini yedek kümesine kopyalar. kume.add( izmir ) # izmir elemanını kümeye ekler. kume.clear() # Kümenin tüm elemanlarını siler. kume.discard( adana ) # adana elemanını kümeden siler. kume.remove( adana ) # discard'tan farkı eleman yoksa hata verir.
Kümeler (Devam) Birleşim, kesişim, fark, alt küme, kapsama gibi küme işlemleri: k1 = set([1, 2, 3]) k2 = set([3, 10, 2, 1]) k2.difference(k1) # k2 kümesinin k1 kümesinden farkı -> set([10]) k1 k2 ya da k2 k1 şeklinde de fark işlemi yapılabilir. k1.intersection(k2) # k1 ile k2 kümelerinin kesişimi -> set([1, 2, 3]) k1 & k2 ya da k2 & k1 şeklinde de kesişim işlemi yapılabilir. k1.issubset(k2) # Çıktı: True. k1, k2'nin altkümesidir. k2.issuperset(k1) # Çıktı: True. k2 kümesi k1 kümesini kapsar. k1.union(k2) # k1 ve k2 kümelerinin birleşimi -> set([1, 2, 3, 10] k1 k2 ya da k2 k1 şeklinde de birleşim işlemi yapılabilir.
Gelecek Hafta Modüller Dosya İşlemleri Sınıflar Grub-on (Grub Menü Düzenleme) ve Github
Kaynaklar http://kodveus.blogspot.com/search?q=python http://www.istihza.com/py2/icindekiler_python.html http://mesutcankurt.com/ab2012/ http://tr.wikipedia.org/wiki/python_%28programlama_dili%29 http://en.wikipedia.org/wiki/python_%28programming_language%29