BİL203U-PROGRAMLAMA II
Ünite 1: Python ile Programlamaya Giriş
Giriş
Python, nesne tabanlı programlamanın yanında, fonksiyonel programlamayı da destekleyen, geniş kullanım alanına sahip bir programlama dilidir. Python programlama dili, 2000’li yıllardan itibaren gelişen donanımsal gelişmeler neticesinde, özellikle mühendislik hesaplamalarında ve bilimsel araştırmalarda sıkça tercih edilmeye başlanmıştır.
Başlarken
Python programlama dili, Guido van Rossum tarafından 1990 yılında tasarlanmaya başlanmıştır. Bu programlama dili ismini Monty Python’s Flying Circus isimli skeç ve çizgi film sahnelerinden oluşan 45 bölümlük diziyi sergileyen Monty Python adlı altı kişilik bir İngiliz komedi grubundan almıştır. Ocak 1994’te 1.0 versiyonu çıkan Python dilinin 2.0 versiyonu Ekim 2000’de, 3.0 versiyonu ise Aralık 2008’de piyasaya çıkmıştır. Günümüzdeki geliştirme faaliyetleri ise 2001 yılında kurulan ve kâr amacı gütmeyen Python Yazılım Vakfı (Python Software Foundation) etrafında toplanan gönüllüler vasıtasıyla gerçekleştirilmektedir. Python kaynak kodu ise GNU Genel Kamu Lisansı (GPL) altında kullanılmaktadır.
Python Özellikleri
Python, Microsoft Windows, Linux ve MacOS gibi farklı işletim sistemlerinde çalışabilmektedir. Bunun yanında ücretsiz ve açık kaynak kodlu bir dildir. Günümüz Linux ve MacOS işletim sistemlerinin çoğunda önceden yüklenmiş olarak bulunmaktadır.
Python programlama dili, Interpreted Language yani yorumlanan diller mimarisinde tasarlanmıştır. Yani çoğu diğer yüksek seviye diller gibi derleme (compilation) ve çalıştırma (execution) şeklinde ayrı adımları yoktur. Kodlar yorumlayıcı tarafından satır satır çalıştırılır. Python, bellek temizliği (Garbage Collector) gibi işleri yöneten otomatik bellek yönetimi özelliğine sahiptir.
Python programlama dilinin bazı özelliklerinden de şu şekilde bahsedebiliriz:
• Basit yazım kuralları (Syntax) sayesinde kodun okunması kolaydır. • Kodlar satır bazlı derlenerek çalıştırılır. Yani diğer çoğu dil gibi satır sonlarındaki “;” gibi işaretleri dikkate alarak çalışmaz. • Kolay okunan kodları sayesinde kodun bakım ve geliştirmesi de kolaydır. • Anahtar kelimeler, açık bir söz dizimi ve basit yapısı ile yeni başlayanların da hızlı bir şekilde öğrenmelerini sağlar. • Farklı platformlarda aynı arabirim ile çalışarak kodun taşınabilir olmasını sağlar. • Çalışma zamanında yorumlayıcı tarafından işlenir. Çalıştırmadan önce programın derlenmesi
gerekmez. Bu özelliği ile PERL ve PHP gibi script dillerine benzemektedir. • Çeşitli amaçlar için hazırlanmış, büyük çoğunluğu Windows, MacOS ve Linux üzerinde çalışabilen kullanımı kolay bir çok kütüphaneleri vardır. • Tüm ticari veritabanı uygulamalarını destekler. • Farklı platformlarda çalışabilen ve taşınabilen GUI (kullanıcı arayüzü) oluşturulmasını sağlar. • Nesne yönelimli bir dil olmasının yanında, fonksiyonel ve prosedür tabanlı programlama metotlarını da destekler. • Otomatik çöp toplama (garbage collector) desteği vardır. • Dinamik tip kontrolünü destekler ve yüksek seviyeli dinamik veri tiplerini sağlamaktadır. • Java, C, C++, CORBA, ActiveX ve COM ile kolay bir şekilde entegre edilebilir. • Büyük programlar için de daha iyi ve ölçeklenebilir bir yapıyı desteklemektedir.
Programlama Ortamının Kurulması
Python kurulumuna geçmeden önce, işletim sisteminizde bir terminal penceresi açarak kurulu olup olmadığını ve hangi sürümün kurulu olduğunu öğrenmek için “python” yazın. Terminal penceresi Windows ortamında Başlat düğmesine basıldıktan sonra cmd yazılarak açılmaktadır.
Eğer >>> şeklinde bir veri girişi istenen ekran karşımıza çıkıyorsa, derleyici açılmış demektir. Açılan bu ekrana “immediate mode” adı verilmektedir, yani anında Python kodu yazıp enter tuşuna basarak çalıştırabileceğiniz bir kod editörüdür diyebiliriz. Python kodu içeren “.py” uzantılı dosyaları da komut satırından çalıştırabiliriz. Herhangi bir metin editörü ile “merhaba_dunya.py” isimli bir dosya hazırlayalım. İçerisine de aşağıdaki kod satırını ekleyerek kaydedelim. print("Merhaba Dünya") Dosyanın konumu bilgisayarınızdaki geçerli kullanıcı klasörü olduğunu varsayarak aşağıdaki komut ile bu dosyayı çalıştıralım. Komut çalıştırıldığında ekrana “Merhaba Dünya” yazdırıldığını göreceksiniz. Böylece ilk Python programımızı yazmış olacağız.
En güncel kurulum dosyalarına, çeşitli dosya ve bilgilere Python’un resmi web sitesi https://www. python.org/ adresinden erişebilirsiniz. Bu kitapta, sahip olduğu yeni özellikler sebebiyle Python 3 sürümü incelenecektir.
Python programlama dilinin çeşitli platformlara yüklemeye ilişkin adımları kısaca inceleyelim.
Unix ve Linux Kurulumu
Linux sürümlerinin Ubuntu 16.10 veya daha yenisini kullanıyorsanız Python programlama dilinin son sürümünü https://www.python.org/downloads/ adresinden aşağıdaki komutlarla kolayca yükleyebilirsiniz:
$ sudo apt-get update $ sudo apt-get install python3.10.2
Sudo apt-get update komutu, yapılandırılmış tüm kaynaklardan paket bilgilerini güncellemek için kullanılır. Sudo apt-get install paket_adı_versiyon komutu ise, çevrimiçi yazılım deposundan istediğiniz uygulamanın en son sürümünü indirmek için kullanılır.
Windows Kurulumu
Windows işletim sistemlerinde Python kurulu olarak gelmemektedir. Python programlama dilini kurmak için http://www.python.org/downloads adresinden son sürümün kurulum dosyasının indirilmesi gerekmektedir. “exe” uzantılı kurulum dosyasını indirip çift tıklayarak kurulumu başlatabilirsiniz. Eğer öntanımlı ayarlar ile kurarsanız, Python programlama dili %LOCALAPPDATA%\Programs\Python dizinine kurulacaktır. “Customize Installation” düğmesine basılarak kurulumun özelleştirilerek istenilen klasöre kurulması sağlanabilir.
MacOS Kurulumu
MacOS işletim sisteminde Python kurulumu için https://www.python.org/downloads/ adresinden Python derleyicisinin istenilen sürümü seçilerek indirilir. İndirileren “pkg” uzantılı dosya ile Python derleyicisi kurulumu gerçekleştirilir.
Kod Yazma Ortamları-Editör
Python yorumlayıcısı işletim sistemine kurulduktan sonra, uygulama geliştirmek için bir arayüze yani IDE (Integrated Development Environment-Tümleşik Geliştirme Ortamı) ihtiyaç duyulmaktadır. IDE, uygulama geliştirme için programcıya kod ipuçları, sözdizimi vurgulama ve denetleme, dosya gezgini vb. gibi yararlı özellikler barındıran, kodun daha hızlı ve kolay bir şekilde tamamlanmasını sağlayan bir yazılımdır. Çeşitli ihtiyaçlara göre geliştirilmiş çok sayıda IDE mevcuttur. Piyasada Netbeans, Komodo, Wing, Eclipse, Sublime Text, IDLE gibi Python için kullanabileceğiniz çeşitli arayüzler bulunmaktadır. Python’a yeni başlayanlar için hem kullanım hem de kurulum kolaylığı açısından uygulamalarımızda Thonny IDE kullanacağız. Thonny IDE, içinde paketlenmiş en son Python sürümüyle birlikte gelmektedir. Böylece Python’u ayrı olarak kurmanıza gerek kalmayacaktır. Thonny IDE’yi bilgisayarınızda çalıştırmak için aşağıdaki adımları izleyebilirsiniz:
Thonny IDE’nin https://thonny.org/ sitesinden işletim sisteminize uygun kurulum dosyasını indirerek çalıştırın.
• Dosya> Yeni menüsüne tıklayarak yeni bir dosya açın. Ardından dosyayı .py uzantılı olarak kaydedin. Örneğin, merhaba.py, örnek.py gibi. Dosyaya herhangi bir isim verebilirsiniz, ancak, dosya adı “.py” ile bitmelidir. • Dosyaya Python kodunu yazın ve kaydedin. • Ardından Çalıştır> Geçerli betiği çalıştır’a tıklayarak veya F5’e basarak programı çalıştırabilirsiniz.
Temel Kavramlar
Anahtar Kelimeler ve Tanımlayıcılar
Python programlama dilinde anahtar kelimeler değişken adı, işlev/fonksiyon adı veya başka bir tanımlayıcı olarak kullanılamaz. Python dilinin söz dizimini ve yapısını tanımlamak için kullanılırlar. Python dilinde anahtar kelimeler büyük/küçük harf duyarlıdır. True, False ve None dışındaki tüm anahtar kelimeler küçük harflidir ve oldukları gibi yazılmalıdır. Python 3.7’de 33 anahtar kelime vardır:
False, await, else, import, pass, None, break, except, in, raise, True, class, finally, is, return, and, continue, for, lambda, try, as, def, from, nonlocal, while, assert, del, global, not, with, async, elif, if, or, yield.
Python Tanımlayıcıları
Tanımlayıcı, sınıf, işlevler, fonksiyonlar, değişkenler vb. varlıklara verilen isimdir. Bir varlığı diğerinden ayırmaya yardımcı olur. Python 3 sürümünden itibaren Unicode (UTF-8) desteği sağlamaktadır. Böylece hem verilerde hem de program içerisinde kullanılan değişken, metot ve sınıf isimlendirmelerinde Türkçe karakterler kullanılabilir. Tanımlayıcı yazma kurallarını da şu şekilde listeleyebiliriz:
• Tanımlayıcılar, küçük harf (a’dan z’ye) veya büyük harf (A’dan Z’ye) veya rakamlardan (0 ila 9) veya alt çizgi _’den oluşan bir harf kombinasyonu olabilir. - myClass, var_1 ve print_this_to_screen gibi isimlendirmelerin tümü geçerli örneklerdir. • Bir tanımlayıcı bir rakamla başlayamaz. • 1değişken geçersiz, ancak değişken1 geçerli bir isimlendirmedir. • Anahtar kelimeler tanımlayıcı olarak kullanılamaz. Bu şekilde kullanıldığında, kod yorumlanırken geçersiz sözdizimi hatası verecektir. • Tanımlayıcı isimlendirilirken !, @, #, $, % vb. gibi özel semboller kullanılamaz. Bu şekilde kullanıldığında, kod yorumlanırken geçersiz sözdizimi hatası verecektir. • Bir tanımlayıcı herhangi bir uzunlukta isimlendirilebilir.
Python büyük/küçük harfe duyarlı bir dildir. Bu, Değişken ve değişken tanımlayıcı isimlendimelerinin aynı olmadığı anlamına gelmektedir. cok_uzun_bir_degisken gibi bir alt çizgi kullanılarak birden çok kelime ayrılabilir.
Deyimler, Girintileme ve Yorumlar
Python yorumlayıcısının yürütebileceği talimatlara deyim adı verilmektedir. Örneğin, a = 1 bir atama ifadesidir. if deyimi, for deyimi, while deyimi vb.
Çok Satırlı İfade
Python’da, bir ifadenin sonu yeni satır karakteri ile işaretlenir. Ancak satır devam karakteri “\” ile birden çok
satıra yayılan bir ifade yapabiliriz. Bu açık bir satırın devamıdır. Python’da, parantezler ( ), köşeli ayraçlar [ ] ve süslü parantezler { } içinde de satır devamı belirtilir.
Kod Girintileme, Sekmeler
C, C++ ve Java gibi programlama dillerinin çoğunda, bir kod bloğunu tanımlamak için { } ayraçları kullanılır. Ancak Python programlama dilinde girinti kullanır. Bir kod bloğu (bir fonksiyonun gövdesi, döngü vb.) girinti ile başlar ve ilk girintisiz satırla biter. Girinti miktarı size bağlıdır, ancak bu blok boyunca tutarlı olmalıdır. Genellikle, girinti için dört boşluk veya sekme (tab) kullanılabilir.
Tek Satırlık Yorumlar
Programlama yaparken yazılan yorumlar çok önemlidir. Bir programın içinde neler olup bittiğini açıklarlar, kullanılan metot ve değişkenlerin görevleri, kod akışının neden bu şekilde yönlendirildiği gibi anahtar noktalar belirtilir. Böylece kaynak koduna bakan bir kişi kod akışını anlamakta zorluk çekmez. Yeni yazdığınız programın önemli ayrıntılarını bir ay içinde unutabilirsiniz. Bu yüzden bu kavramlar için yorum şeklinde yapılan açıklamalar, kodu yazan ya da inceleyen yazılımcılar için zamandan kazanç sağlayacaktır. Python programlama dilinde, yorum yazmaya başlamak için hash (#) sembolü kullanılmaktadır. Yeni satır karakterine kadar uzanır. Python yorumlayıcısı yorumları yok saymaktadır, yani yazılan yazıların kodunuzu bozma ihtimali yoktur.
Çok Satırlı Yorumlar
Birden çok satıra ihtiyaç duyulan yorumlar olabilir. Bunun için her satırın başında hash (#) sembolünü kullanmaktır. Bunu yapmanın başka bir yolu da '''' (tek tırnak) veya """ (çift tırnak) şeklinde üçlü tırnak kullanmaktır. Bu üçlü tırnak işaretleri genellikle çok satırlı açıklamalar için kullanılır. Ancak çok satırlı bir yorum olarak da kullanılabilirler. Bu yorumlar dokümantasyon dizesi (Docstring) olmadıkça, herhangi bir ekstra kod üretmezler.
Kod Dokümantasyonu (Docstrings)
Docstring, belge dizesinin kısaltmasıdır. Python belge dizeleri, bir işlev, yöntem, sınıf veya modül tanımından hemen sonra yer alan açıklama metinleridir. Belge dizeleri yazılırken üçlü tırnak işaretleri kullanılır.
Değişkenler
Değişkenler, verileri depolamak için ayrılmış bellek alanlarıdır. Bu, bir değişken oluşturulduğunda bellekte bir yer ayrıldığı anlamına gelmektedir. Daha basit bir ifade ile değişkenler, verileri bellekte depolamak için kullanılan bellek konumlarının isimlendirmesi olduğu söylenebilir. Python dilinde değişkenlere bellek alanı ayırmak için açık bildirimlere yani değişken türlerinin önceden tanımlanmasına gerek yoktur. Değişken tipi yokmuş gibi algılansa da, değişken tipleri atanan değere göre yorumlama sırasında belirlenir. Değişkenin türü, yeni değer atamalarında rahatça değiştirilebilir. Değer atamaları için “=” işareti kullanılmaktadır.
Değişken Adlandırma Kuralları
• Değişken isimleri a, b, c gibi kısa isimler olabileceği gibi, bu_uzun_bir_degisken_ismidir gibi uzun olarak da tanımlanabilir. • Değişken isimleri sayı ile başlayamaz. • Harf ya da “_” alt çizgi ile başlayabilir. • Değişkenler büyük/küçük harf duyarlıdır. Yani Anadolu ve anadolu iki farklı değişken olarak tanımlanır. • Değişken isimlerinde ( -, +, /, *, #, ?, .) ve boşluk gibi özel karakterler kullanılamaz.
Çoklu Değer Atama
Python dilinde birden fazla değişkene aynı değer atanabilir. Aynı zamanda birden çok değişkene birden çok değer de atanabilir.
Nesne yönelimli programlamada iki tür atamadan bahsedilebilir. Biri değer tabanlı atama, diğeri de adres tabanlı atamadır. Değer tabanlı atamada aynı değeri alan değişkenlerin değerleri değiştirilince farklı adresleri işaret ettiği için değişkenlerin değerleri bu değişiklikten etkilenmez. Fakat adres tabanlı atamalarda, değişkenler hafızadaki adresi işaret ettiği için aynı değeri alan değişkenlerden birinin değeri değiştiğinde, diğer değişkenin de değeri değişmektedir.
Sabitler
Sabit, değeri değiştirilemeyen bir değişken türüdür. Sabitler, ileride değiştirilemeyecek bilgileri tutan kaplar olarak düşünülebilir. Python’da sabit diye bir kavram yoktur, fakat sabitleri tanımlarken bazı kullanım önerileri vardır. Sabitler genellikle bir modülde bildirilir ve bu modül ana program içerisine dahil edilir. Burada modül, ana dosyaya aktarılan değişkenleri, işlevleri vb. içeren yeni bir dosyadır. Modülün içinde, sabitler sözcükleri ayırarak tamamı büyük harflerle ve alt çizgilerle yazılır.
Veri Tipleri
Python’da beş standart veri türü vardır. Bunlar: Numbers (Sayılar), String (Karakter Dizisi), List (Liste), Tuple (Demet), Dictionary (Sözlük). Python’da değişkenlere atanan değerlerin ya da dışarıdan kullanıcıdan alınan verilerin tipini öğrenebilmek için type() fonksiyonu kullanılmaktadır.
Tür Dönüşümü
Kimi durumlarda veri tipleri arasında dönüşüme ihtiyaç duyulabilmektedir. Farklı veri tipleri arasında int(), float(), str() gibi tip dönüştürme fonksiyonlarını kullanarak dönüştürme yapabiliriz. En fazla tür dönüşümleri string ve integer ifadeler arasında gerçekleşmektedir.
Örtülü Tür Dönüşümü (Implicit)
Örtülü tür dönüştürmede Python, bir veri türünü otomatik olarak başka bir veri türüne dönüştürür. Düşük kapasiteli bir veri türünden daha yüksek kapasiteli bir veri türüne dönüşüm yapıldığı için veri kaybı yaşanmaz. Ayrıca bu
işlem için herhangi bir kullanıcı müdahalesine de ihtiyaç duyulmaz.
Açık Tür Dönüşüm (Explicit)
Açık Tür Dönüşümünde, bir nesnenin veri türü gerekli veri türüne kullanıcı tarafından dönüştürülür. Açık tür dönüştürme işlemi yapabilmek için int(), float(), str(), vb. gibi önceden tanımlanmış fonksiyonlar kullanılmaktadır.
Giriş/Çıkış (I/O) ve İçe Aktarma (Import)
Çıkış İşlemleri
Verileri standart çıktı aygıtında yani ekranda görüntülemek için print() işlevini kullanırız.
Çıktı Formatlama
Çıktımızın göze hoş görünmesi için biçimlendirmek gerekebilir. Bu biçimlendirme işlemi str.format() metodu kullanılarak yapılabilir. Bu yöntem herhangi bir string ifade tarafından kullanılabilir.
Giriş İşlemleri
Hazırladığımız kodlar içinde esnekliğe izin vermek amacıyla kullanıcıdan veri alma ihtiyacı ortaya çıkabilir. Python’da buna izin vermek için input() metoduna sahibiz.
İçe Aktarma (Import)
Yazılan kod zaman içinde büyüdükçe kontrol etmesi daha da güç bir hale gelecektir. Böyle bir durumla karşılaşmamak için, hazırlanan kodun modüllere ayrılarak daha küçük ve yönetimi kolay parçalara ayrılması önerilir. Modül, Python tanımlarını ve ifadelerini içeren bir dosyadır. Python modüllerinin bir dosya adı vardır ve “.py” uzantısıyla biter. Bir modülün içindeki tanımlar başka bir modüle veya Python’daki etkileşimli yorumlayıcıya aktarılabilir. Bunu yapmak için “import” anahtar sözcüğünü kullanırız.
Operatörler
Python’da operatörler, değişkenler ve değerler arasında aritmetik veya mantıksal hesaplama yapan özel sembollerdir. Operatörün üzerinde çalıştığı değere işlenen denir.
Aritmetik Operatörler
Aritmetik operatörler toplama, çıkarma, çarpma gibi matematiksel işlemleri gerçekleştirmek için kullanılır.
Karşılaştırma Operatörleri
Karşılaştırma operatörleri de değerleri karşılaştırmak amacıyla kullanılmaktadır. Koşullara göre True veya False döndürür.
Mantıksal Operatörler
Mantıksal operatör olarak and, or ve not kullanılmaktadır. Aşağıdaki tabloda Python tarafından desteklenen mantıksal operatörler ve kullanım örnekleri bulunmaktadır.
Bitwise (Bitsel) Operatörler
Bitwise operatör, bitler üzerinde çalışır ve bit bit işlem gerçekleştirir. Yani işlem yapılan değerler ikilik tabandaki verilerdir. Örnek verecek olursak; a = 26 ve b = 10 değerlerini atayalım. Bu iki değişkenin ikili formatta değerleri sırasıyla 0001 1010 ve 0000 1010 olacaktır.
Atama Operatörleri
Atama operatörleri, değişkenlere değer atamasında kullanılırlar. a = 99, sağdaki 99 değerini soldaki a değişkenine atayan basit bir atama operatörüdür. Python’da da, diğer çoğu programlama dilinde olduğu gibi, a += 5 ifadesini destekler. Yani değişkene değer ekleyerek atama yapan çeşitli bileşik operatörler vardır. Bu ifade de a = a + 5’e eşittir.
Özel Operatörler
Python dili, kimlik operatörü veya üyelik operatörü gibi bazı özel operatör türlerini içermektedir.
Kimlik Operatörleri
“is” ve “is not”, Python’daki kimlik operatörleridir. İki değerin (veya değişkenin) belleğin aynı bölümünde bulunup bulunmadığını kontrol etmek için kullanılırlar. İki değişkenin eşit olması, her zaman onların aynı olduğu anlamına da gelmemektedir.
Üyelik Operatörleri
Python’daki üyelik operatörleri “in” ve “not in” olarak tanımlanmıştır. Bir dizide (string, list, tuple, set ve dictionary) bir değerin veya değişkenin bulunup bulunmadığını test etmek için kullanılırlar. Fakat dictionary tipinde sadece anahtar kelimenin olup olmadığı kontrol edilebilir, değer kontrolü yapılamaz.