Merhaba,
Kısa bir aradan sonra Python 3.0 makalelerime kaldığım yerden hızla devam ediyorum. Arada 2 seminer atlattım ve bildiğiniz üzere son projem olan Oxijen Framework ile uğraştım. Neyse konumuza dönecek olursak ilk sizlere kullanacağımız IDE’nin indirme link’ini vereyim.
NetBeans IDE 6.5 For Windows (” Ücretsizdir. “)
Resmi Sitesi: www.NetBeans.org (Türkçe)
Yeni bir Python projesi oluşturma ve IDE ile ilgili diğer kullanım bilgilerine buradan ulaşabilirsiniz.
IDE’mizide kurduktan sonra şimdi değişken tanımlamadan ve kullanmaktan başlayarak devam edeceğiz. Aklınıza takılabilecek sorular için blogun arama bölümünden faydalanabilirsiniz. Daha önceki makalelerimde değişken nedir. Türler nelerdir gibi sorulara açıklama getirmiştim.
İlk olarak integer değişkenler tanımlayalım ve bunları kullanalım. Yani Python’u hesap makinesi olarak kullanalım.
Num1 = 5;
Num2 = 8;
Num3 = 158;
Num4 = 2;
Result = (Num1 + Num2) * Num4 - Num3;
print Result; #Result: -132
Yukarıda matematik derslerinden bildiğimiz işlem önceliğini kullandığımızdan -132 çıkmıştır. Parantezleri kullanmadan deneseydik sonuç -137 olacaktı. Result kelimesi Python’a özel bir kelime değildir. Türkçe karşılığı “Sonuç” olduğundan genelde örneklerde “Result” kelimesini kullanırım.Bunun yerine aşağıdaki şekildede yazabilirdik.
Num1 = 5;
Num2 = 8;
Num3 = 158;
Num4 = 2;
print (Num1 + Num2) * Num4 - Num3; # -132
Sonuç değişmeyecektir fakat kodun okunabilirliğini arttırmak adına biz birden çok değişken üzerinde işlem yapacaksak bunları yeni bir değişkende tutarak ifade ederiz. Şimdide String değişkenler tanımlayarak kullanalım. Bu arada Print Python’da ekrana çıktı vermek için kullanılır.
Ad = "Hakan";
Soyad = " DAMAR";
TamAd = Ad + Soyad;
print TamAd;
Burada ise iki farklı string değişken tanımladık ve TamAd değişkenine atayarak ekrana yazdırdık. +(artı) işareti ilede iki string’i birleştirdik. Bu operatörü Integer değişkenlerdede görmüştünüz fakat orada iki değişkenin değerini toplamak için kullanılıyordu. Arasındaki farkı birazdan açıklayacağım. Şimdi burada dikkat edeceğiniz nokta ekrana çıktı olarak vereceği “Hakan DAMAR” arasındaki boşluktur. Bunu Soyad değişkenin değeri olan “DAMAR” string verisini yazarken başında bir boşluk bıraktık. Bunun yerine Ad değişkeninin değerinin sonundada bir boşluk bırakabilirdik. Şimdi F6 tuşuna basarak çıktıyı Output bölümünde inceleyiniz.
Artı operatöründe büyük yanlışlıklara yol açmadan kullanmak için veri türünü bilmemiz ve eğer yanlış tanımlanmışsa, tür dönüşümü yapmalıyız. Yoksa programımız hata verecektir.Şimdi bu sorunu tespit edelim ve nasıl çözüm bulacağımızı öğrenelim.
Programımız aşağıdaki şekilde olsun;
Yas1 = 17;
Yas2 = "23";
Yas3 = 29.5;
print Yas1 + Yas2 + Yas3;
Yukarıki kod blogunda aslında String değişkeni kullanmasaydık, programımız hata vermeyecekti çünkü Float bir değişken ile Int bir değişken türünü toplamak veya herhangi bir işlem yapmak istediğiniz Python bulunu anlayarak sizin yerinize Int veri türünü Float veri türüne convert(dönüştürmek) etmektedir. Fakat daha önce bazı büyük projelerde bu tür bilinçsiz tür dönüşümleri sonucu veri kayıpları gerçekleştiğinden değişkenleri oluşturma zamanında türüne uygun oluşturmak ve kullanmak en iyisidir. Peki biz buradaki String değerin int’e veya float bir sayı türüne eşit olduğunu biliyorsak ve kodlarda değişliklik yapmadan ekrana yazdırma esnasında sadece türünü değiştirmek istiyorsak. O zaman tür dönüşümü yapabiliriz. Bunuda aşağıdaki şekilde gerçekleştirebiliriz.
Yas1 = 17;
Yas2 = "23";
Yas3 = 29.5;
Result = Yas1 + int(Yas2) + Yas3;
print Result; # 69.5
Şimdi yukarıdaki örneği Float veri türü için değiştirip deneyelim.
Yas1 = 17;
Yas2 = "23";
Yas3 = "29.5";
Result = Yas1 + int(Yas2) + float(Yas3);
print Result; # 69.5
Gördüğünüz üzere Yas3 değişkenini tırnak işaretleri içerisine alarak bir String olduğunu belirttik. Daha sonra Result değişkeninde Float veri türüne convert ettik. Böylece ekrana yazdırırken her hangi bir hata almadan düzgün bir şekilde çıktı ürettik. Son olarak birde String’e convert edelim ve aradaki farkı görelim.
Str1 = "5";
Str2 = "2";
print Str1 + Str2; # 52
Buradaki verileri sizde Integer’e int() fonksiyonunu kullanarak convert ediniz ve doğru sonucu bulunuz. Sonucun 7 olması gerekmektedir.
Şimdi ise ileride bol bol kullanacağımız Nesnelerden yararlanarak object ile mini bir convert işlemi yaptıralım. Öncelikle IDE’mizin otomatik eklediği ” if __name__ == “__main__”:
” satırınını en baştan silelim. Bunu ileride açıklayacağım. Hata vermemesi için şimdilik kaldırıyoruz.
Sayi1 = 157;
Sayi2 = 25;
print Sayi1.__str__() + Sayi2.__str__(); #15725
Yukarıdaki kodu çalıştırdığınızda göreceğiniz gibi sonuç 15725 olacaktır. Burada da nesne özelliklerinden yaralandık. Şimdilik nesneler konumuz olmadığıdan geçiyoruz. Fakat ileride her işimiz nesneler yani Object olacaktır. Object kelimesine şimdiden alışmanızı tavsiye ediyorum. Çünkü; ileride hemen, hemen her dilde Object kelimesi ile karşılaşacaksınız.
Python 3.0 üzerinden gittiğimizden son versiyon ile ilgilide bilgi vereceğim. Print yeni 3.0 versiyonunda bir fonksiyona çevrilmiştir. Şimdilik fonksiyonu bilmediğimizden bunun ile ilgili örnek ve açıklama yapmıyorum. Sadece aklınızın bir köşesine yazın. İlgili konuya geldiğimizde yorumlardan unutmaz sorarsanız konu içersinde bir örnek göstererek açıklarım.
Ama yinede mini bir örnek vereyim. İleride belki döner bakarsınız.
print(24/2); #12
Son olarak kaçma karakterini ve string değişkenlerde alt satıra nasıl geçeceğimizi göstereceğim.
Str1 = "Ben bir yazıyım bir tarafım buradan diğer tarafım ise burada ama ben yinede İstanbul'u çok seviyorum.";
print Str1;
Yukarıdaki örnekte gördüğünüz gibi n eklediğimiz yerden itibaren alt satıra geçmiştir. n in anlamı NewLine(Yeni Satır)’dır. Burada kaçma karakterini ise string değişkenlerdeki tırnak işaretini veri içindede kullanmak istersek kullanıyoruz. Yukarıdaki örneği şöyle değiştirerek deneyelim.
Str1 = 'Ben bir yazıyım bir tarafım buradan diğer tarafım ise burada ama ben yinede İstanbul'u çok seviyorum.';
print Str1;
Bir de veri içerisinde çift tırnak kullandığımız bir örnek yapalım.
Str = "Che'ninde söylediği gibi "Gerçekçi Ol, İmkansızı İste."";
print Str;
Gördüğünüz üzere ters bölü işareti özel karakterlerin karşılıklarını ekrana bastırmaktadır. Eğer ters slash koymazsanız programınız hata verecektir ve çalışmayacaktır. Daha doğrusu compile time(Derleme Zamanı) hatası oluşacağından programınız derlenmeyecektir.
Bu yüzden string değişkenlerde tırnaklara dikkat edelim.
Peki biraz daha Objectif olalım ve yazdığımız yazının uzunluğunu bulalım.
Şimdi örneğimizi şöyle değiştirip bir daha çalıştıralım.
Str = "Che'ninde söylediği gibi "Gerçekçi Ol, İmkansızı İste."";
print Str.__len__(); # 55
Bu örnektede __len__()’den yararlandık ileride yeri geldikçe hepsini göreceğim. Bu property(özellik) bize verdiğimiz string’in karakter bazında toplamını verir. Eğer objectif olamazsanızda len() fonksiyonunu kullanarakta yapabilirsiniz. Bu seferde print satırınızı print len(Str); olarak değiştirmeniz gerekmektedir. Sonuç değişmeyecektir. Bu sayıya boşluklar ve kullandığınız string içi tırnaklar ve işaretlerde dahildir.(.,!,?,’,”,:-) gibi)
İleride String işlemlerine tekrar değineceğimizde şimdi parça,parça vererek kafanızı karıştırmak istemiyorum. Bu yüzden şimdi Array(Dizi) ile devam ediyoruz.
Array dediğimiz olay basittir. 10cm’lik bir ip hayal edin, her 1cm’de bir bir harf asılı dursun. Alın işte size bir dizi. Her harf’e de 0(sıfır)’dan başlayarak bir index numarası verdiğimizi düşünün. Erişmek içinde değerleri yerine numaralarını kullansak mantıklı olur değil mi? Çünkü; değerleri uzun veya karmaşık olabilir. Python’da diziler her hangi bir veriyi tutabilir. Fonksiyon,modül,object,int,string etc.
Şimdilik biz sayi ve yazı veri türlerinden diziler oluşturacağız. İleride daha geniş kapsamlı dinamik diziler oluşturacağız. Eğer PHP veya diğer bir dil ile uğraştıysanız bir dizi oluştururken array diye belirtiyorduk. Python’da ise buna gerek kalmıyor. Basitçe bir diziyi aşağıdaki şekilde oluşturabiliyoruz.
Arr = ['Hakan','Arda','Atilla Efe','Sema','Elif',15,17,18.4];
print Arr; # ['Hakan', 'Arda', 'Atilla Efe', 'Sema', 'Elif', 15, 17, 18.4]
Çıktısıda #(diyez) işareti ile yorum satırına aldığımız taraftaki gibi olacaktır.Daha önce index numarasının olduğundan bahsetmiştim. Bu numaralandırma ile ilgili söyleyebileceğim fix kural int olma zorunluluğudur. Yani gerçek hayat modellemesi yaparsak. Okulda hiç 498.63 diye bir öğrenci numrası var mı? ya 498′dir ya da 499 gibi. Şimdi sıfırdan başlayan index numaralarını kullanarak ve daha önceden öğrenmiş olduğumuz matematik işlemleri ve tür dönüşümü bilgimizden de yararlanarak bu dizi üzerinden bazı verilere erişelim ve üzerlerinde işlemler yapalım.
Arr = ['Hakan','Arda','Atilla Efe','Sema','Elif',15,17,18.4];
ArdaYas = Arr[6]; #17
AtillaYas = int(Arr[7]); #18
HakanYas = Arr[5];
print ArdaYas;
print AtillaYas;
print HakanYas;
print ArdaYas + AtillaYas;
Bu örnekte dizi elemanlarını kullanarak işlemler yaptık fakat bir yerde elimizde olmayan bir sayı bize verildi! AtillaYas değişkenin değeri 18.4 iken 18′e dönüştü. Bu nasıl olabilir? Nerede bizim 0.4 değerinde küsüratımız?
Daha önce size bahsettiğim bilinçsiz tür dönüşümü sonucu veri kaybı bu örnekte görülmektedir. Eşittir(=) operatörü sağ taraftaki bellek bölgesini sol tarafa kopyalarken kendi bellek türüne göre işlemi tamamlamaktadır. Memory konusu sizin için şimdilik ağır olduğundan derinlemesine girmiyorum. Daha iyi anlamanız açısından bir grafik ile açıklayayım.
Int değişkenler için memory(hafıza,bellek)’de tek bir alan oluşturulur ve orada tutulur. Float değişkenler için ise çift bölümlü bir memory alanı oluşturulur. Aşağıdaki grafikte anlatıldığı gibi.

Şimdi biz Float’ı int’e convert ederken gidip Float memory alanın ilk bölümü olan 18′i alıyoruz ve Int alan ile birleştiriyoruz. 2. alanını alamıyoruz, çünkü alsakta Int memory yapısında tutabileceğimiz bir alan yok. Bu nedenlede bir çok büyük projede bile bilinçsiz tür dönüşümünden veri kayıpları olabiliyor. Düşünsenize, bir bankaya online veya intranet uygulaması geliştiriyorsunuz. Havale işlemlerinde hatalı bir tür dönüşümü yapılması, günlük yüzbinlerce kez işlem yapıldığını da düşünürsek bankayı ne kadar zarara sokabileceğinizi.
Düşünmek bile istemiyorsunuzdur. Haklısınızda.
İşte normal programcılar ile mühendisleri veya uzmanları ayırt eden taraflar bunlardır. Normal bir programcı ya işte çevir diyorum çeviriyor. Şurası dönüyor burası oynuyor mantığı ile yazıyor. Bir uzman veya mühendis ise yaptığı işlemin arka planında nelerin gerçekleştiğini veya gerçekleşebileceğini tahmin ederek ilerliyor. Unutmadan burada sizlere her konuyu bu kadar derinlemesine aktaramayacağım. Buna ne zamanım nede sabrım yeter.
Benim bitireceğim aşamadan sonrası tamamen sizlerin azmi ve hırsı ile olacaktır. Eğer yazılım ile meslek olarak uğraşacaksanız, ayrıntıları yakalamayı bilecek ve öğrenmekten asla usanmayacaksanız. Hatta kendinize ömür boyu eğitim ve öğretim mantığını aşılayabilirsiniz. Böylece hem kendiniz istediğiniz konularda eğitirken, başkalarınada bunları öğretebilirsiniz.
Ülkemizin dili, eğitim sistemi ve teknolojik gelişim global karşılaştırmada yetersiz olduğu açıkça görülmektedir. Yeni çıkan bir program veya teknoloji sonlara yakın Türkçeleştiriliyor veya hiç çevirilmiyor. Bu iş gönüllülere düşüyor. Eğitim çarkımızda da gözlemlenen problemleri zaten hepimiz biliyoruz. Teknolojik olarakta şuan oransal olarak yeterlilik gösteremiyoruz. Yani neredeyse herkes cep telefonu ve bilgisayar kullanıyor ama ne amaçlarla? Bu oranda bilgi ve eğitim çok küçük bir pay olarak aralara sıkışmaktadır. Umarım ileride bizde belirli seviyeleri aşarız. Neden böyle bir açıklama yaptım diye aklınızda bir soru işareti oluşursa;
Eğer şuan yeterlilik gösterebilsekdik. Python dökümantasyonu ve kullandığımız IDE Türkçe olurdu bende size sadece ayrıntıları ve deneyimle sabit bazı tiyoları açıklardım. Burada konu,konu yazmak yerine sadece dökümanın link’ini verirdim. Ama karamsarlığada kapılmayın. Türkiye’nin geçen son 5 yılı ve önümüzdeki 15 yıl teknolojik açıdan çok parlak gözüküyor. Web’i biraz araştırırsanız ülkemiz adına başarı sayılabilecek bir çok büyük projeye Türklerin imza attığını görebilirsiniz. Bu imkanlarda bu başarılar gerçekten kutlanması gereken başarılardandır. Neyse lafı yeterince uzattım.
Bir sonraki Python makalesinde buluşuncaya dek hepinize başarılar diliyorum.
Print “Saygılarımla\n\r
Hakan DAMAR”;