30 Ekim 2017 Pazartesi

100 Adımda Python Programlama Kısım 4

PYTHON

76) Son olarak aşağıdaki kodları açıklayarak sys.stdout konusunu daha iyi anlayalım.  
>>> sys.stdout.name
 >>> sys.stdout.mode 
>>> sys.stdout.encoding 
Burada sys.stdout.name komutu standart çıktı konumunun o anki adını verecektir. sys.stdout.mode komutu ise standart çıktı konumunun hangi kipe sahip olduğunu gösterir. Standart çıktı konumu genellikle yazma kipinde (w) bulunur. sys.stdout.encoding kodu ise standart çıktı konumunun sahip olduğu kodlama biçimini gösterir. Kodlama biçimi, standart çıktı konumuna yazdıracağınız karakterlerin hangi kodlama biçimi ile kodlanacağını belirler. Kodlama biçimi Windows’ta genellikle ‘cp1254’, GNU/Linux’ta ise ‘utf-8’dir. Eğer bu kodlama biçimi yanlış olursa, mesela dosyaya yazdıracağınız karakterler içindeki Türkçe harfler düzgün görüntülenemez.

77) Kaçış dizileri (escape sequence) nedir? Python’da özel anlam taşıyan işaret veya karakterleri, sahip oldukları özel anlam dışında başka bir amaçla kullanmamızı sağlayan araçlardır. Örnek; 
>>> print("Python programlama dilinin adı \"piton\" yılanından gelmez") 
Python programlama dilinin adı "piton" yılanından gelmez 
Yukarıdaki karakter dizisini hem çift tırnak içine alıp hem karakter dizisi içinde çift tırnak kullandığımız halde herhangi bir hata almadığımızı görüyorsunuz. Yukarıdaki kodlarda hata almamızı önleyen şey \ (ters taksim) işaretidir. \ (ters taksim) kaçış dizilerinden sadece bir tanesidir. Başka bir örnek: 
>>> print("Python 1990 yılında Guido Van Rossum 
\ tarafından geliştirilmeye başlanmış, oldukça \
 güçlü ve yetenekli bir programlama dilidir.") 
Python 1990 yılında Guido Van Rossum tarafından geliştirilmeye başlanmış, oldukça güçlü ve yetenekli bir programlama dilidir. 

Normal şartlar altında, bir karakter dizisini tanımlamaya tek veya çift tırnakla başlamışsak, karakter dizisinin kapanış tırnağını koymadan Enter tuşuna bastığımızda Python bize bir hata mesajı gösterir. İşte \ kaçış dizisi bizim burada olası bir hatadan kaçmamızı sağlar. Eğer Enter tuşuna basmadan önce bu işareti kullanırsak Python tıpkı en üst örnekteki çift tırnak işaretinde şahit olduğumuz gibi hata vermeden bir alt satıra geçecektir.

78) Bazen kaçış dizilerini fark etmemiz gerekir çünkü kodumuz hata verebilir. Örnek: 
>>> open("C:\nisan\masraflar.txt") 
Traceback (most recent call last): 
File "", line 1, in 
open("C:\nisan\masraflar.txt") 
OSError: [Errno 22] Invalid argument: 'C:\nisan\\masraflar.txt' 

Yukarıdaki kodumuz hata verdi. Bir dosya açmaya çalıştık ama dosyanın içindeki \n ifadesini gözden kaçırdık. Bu aslında bir kaçış dizisidir ve daha önceki konularda gördüğümüz üzere satırbaşı yapmaya yarar. Eğer sorunun gözden kaçan bir kaçış dizisinden kaynaklandığını fark edemezseniz, bu sorunu çözebilmek için saatlerinizi ve hatta günlerinizi harcamak zorunda kalabilirsiniz. Ancak ve ancak yukarıdaki karakter dizisi içinde sinsice gizlenen bir \n kaçış dizisi olduğu gözünüze çarparsa bu sorunu çözme yolunda bir adım atabilirsiniz. Bu problemi en başta kullandığımız kaçış dizisi olan \ işareti ile çözebiliriz.

>>>open("C:\\nisan\\masraflar")    // bir \ işareti ile \n parametresini yok saydık. >>>open("C:/nisan/masraflar")      // ya da dizin adlarını ters taksim yerine düz taksim ile ayırmayı tercih edebiliriz. 

79) Sekme (\t) kaçış dizisi: 

>>> print("abc\tdef")        
abc def 

Ne olduğunu fark ettiniz mi? \t parametresi “abc” ifadesinden sonra sanki Tab (sekme) tuşuna basılmış gibi “def” ifadesini sağa doğru itiyor.

>>> print(*"123456789", sep="\t") 
1 2 3 4 5 6 7 8 9

Peki, şimdi ne yaptık? String karakterlerinin arasına belli aralıklarla boşluk bıraktık.

80) Zil sesi (\a) kaçış dizisi:

>>> print("\a")              // bir bip sesi elde ettik.
!bip!

>>> print("\a"*5)               // bip sesini 5 katına çıkardık.
!bip!!bip!!bip!!bip!!bip!

Bu kaçış dizisinin GNU/Linux üzerinde çalışma garantisi yoktur. Hatta Windows sistemlerinde dahi çalışmayabilir. Hatta burada çıktı olarak !bip! ifadesinin yerine sembolü gelebilir.

81) Aynı satırbaşı (\r) kaçış dizisi:

>>> print("Merhaba\rDünya")

 Dünyaba

Burada, “Merhaba” karakter dizisi ekrana yazdırıldıktan sonra \r kaçış dizisiyle satır başına dönülüyor ve bu kaçış dizisinden sonra gelen “Dünya” karakter dizisi “Merhaba” karakter dizisinin üzerine yazıyor. Tabii “Dünya” karakter dizisi içinde 5 karakter, “Merhaba” karakter dizisi içinde ise 7 karakter olduğu için, “Merhaba” karakter dizisinin son iki karakteri (“ba”) dışarda kalıyor. Böylece ortaya “Dünyaba” gibi bir şey çıkıyor. Bu kaçış dizisinin her işletim sisteminde çalışma garantisi yok. Ancak yine de bilmek te fayda var.

82) Düşey sekme(\v) kaçış dizisi:

>>> print("düşey\vsekme")           // alt satıra geçip tab tuşuna basılmış etkisi yarattı. düşey
sekme

Her işletim sisteminde çalışmayabilir. Dolayısıyla önerilmez.

83) İmleç Kaydırma (\b) kaçış dizisi:

>>> print("yahoo.com\b.uk")
yahoo.co.uk

\b kaçış dizisinin etkisiyle imleç bir karakter sola kaydığı için, ‘com’ kelimesinin son harfi silindi ve bunun yerine \b kaçış dizisinden sonra gelen .uk karakterleri yerleştirildi. Bu kaçış dizisinin Python’da çok nadir kullanıldığını ve çalışmama ihtimalini söyleyelim.

84) Küçük Unicode (\u) kaçış dizisi:

UNICODE, karakterlerin, harflerin, sayıların ve bilgisayar ekranında gördüğümüz bütün işaretlerin her biri için tek ve benzersiz bir numaranın tanımlandığı bir sistemdir. Bu sistemde, ‘kod konumu’ (code point) adı verilen bu numaralar özel bir şekilde gösterilir. Örneğin ‘İ’ harfi UNICODE sisteminde şu şekilde temsil edilir:

u+0130
Python programlama dilinde yukarıdaki kod konumu ise şöyledir:

\u0130
O halde kodumuzu yazalım ve çıktıyı görelim.


>>> '\u0130'
 'İ'

85) Büyük Unicode (\U) kaçış dizisi

Bu kaçış dizisi \u adlı kaçış dizisiyle hemen hemen aynı anlama gelir. Ancak U ile gösterilen kod konumları u ile gösterilenlere göre biraz daha uzundur. Küçük u kaçış dizisini kullanarak ‘İ’ harfinin UNICODE kod konumunu şöyle temsil ediyorduk:

>>> '\u0130'
'İ'

Eğer aynı kod konumunu büyük U ile göstermek istersek şöyle bir şey yazmamız gerekir:


>>> '\U00000130'
'İ'

Gördüğünüz gibi, burada \U kaçış dizisinden sonra gelen kısım toplam 8 haneli bir sayıdan oluşuyor. \u kaçış dizisinde ise bu kısmı toplam 4 haneli bir sayı olarak yazmıştık. İşte \u kaçış dizisi ile \U kaçış dizisi arasındaki fark budur.

86) Uzun Ad (\N) kaçış dizisi: UNICODE sisteminde her karakterin benzersiz bir kod konumu olduğu gibi bir de uzun adı vardır. Örneğin ‘a’ harfinin UNICODE sistemindeki uzun adı şudur: LATIN SMALL LETTER A

Bu uzun adları öğrenmek için unicodedata adlı bir modülden yararlanabilirsiniz:

>>>import unicodedata // Bir modül kullanmak için import komutu hayatidir unutmayın
>>>unicodedata.name('a')
'LATIN CAPITAL LETTER A WITH CEDILLA'

İşte \N kaçış dizisi bu uzun isimleri kullanarak asıl karakterleri elde eder.

>>> print("\N{LATIN SMALL LETTER A}")
A

87) Onaltılı Karakter (\x) kaçış dizisi: Onaltılı (hexadecimal) sayma sistemindeki bir sayının karakter karşılığını gösterir.

>>> "\x41" // Onaltılı sayma sistemindeki 41 sayısı ‘A’ harfine karşılık gelir.
'A'

88) Etkisizleştirme (r) kaçış dizisi: Bu kaçış dizisini, daha önce öğrendiğimiz \r adlı kaçış dizisi ile karıştırmayın. Şöyle bir çıktı almak istediğimizi düşünün;

Kurulum dizini: C:\aylar\nisan\toplam masraf

>>> print("Kurulum dizini: C:\aylar\nisan\toplam masraf") 
Kurulum dizini: C:ylar
isan oplam masraf

Olmadı dimi? Python karakter dizisi içinde geçen ‘\aylar’, ‘\nisan’, ve ‘\toplam masraf’ ifadelerinin ilk karakterlerini yanlış anladı! Bu gibi ifadeler Python’ın gözünde birer kaçış dizisi. Dolayısıyla Python \a karakterlerini görünce bir !bip! sesi çıkarıyor, \n karakterlerini görünce satır başına geçiyor ve \t karakterlerini görünce de Tab tuşuna basılmış gibi bir tepki veriyor. Daha önce bu durumu şöyle bir kod yazarak engellemiştik:

>>> print("Kurulum dizini: C:\\aylar\\nisan\\toplam masraf") Kurulum dizini: C:\aylar\nisan\toplam masraf

Ama bu sorunun üstesinden gelmenin çok daha basit ve pratik bir yolu vardır:

>>> print(r"Kurulum dizini: C:\aylar\nisan\toplam masraf") Kurulum dizini: C:\aylar\nisan\toplam masraf // baştaki r harfi her şeyi hallediyor.


89) Amacımız aşağıdaki gibi bir çıktı elde etmek olsun.

Kaçış dizisi: \

O halde kodumuzu yazalım.

>>>print("Kaçış dizisi: \") 
SyntaxError: EOL while scanning string literal

Durup dururken bu kod neden çalışmadı acaba? Biliyorsunuz ki çift tırnak açtığımız zaman tekrar kapatmamız gerekiyor. Ancak ilginç bir şekilde burada çift tırnağımızı kapattığımız görülüyor. Yani sorun yok gibi. Ama öyle değil, lütfen sondaki kapanış tırnağının soluna bakın. Ne görüyorsunuz? \ işareti dimi? Peki bu işaretin anlamı neydi? Bu işaret önündeki parametreleri geçersiz kılıyordu. Yani bir nevi yok edici. Bu işaret yüzünden sanki kapanış tırnağını kapatmamışız gibi bir etki yarattık. Hatta öyle ki bu etkisizleşmeyi, karakter dizisinin başına koyduğunuz ‘r’ kaçış dizisi de engelleyemez. O halde çözüm nedir? Birinci çözüm \ işaretinin sağına bir adet boşluk karakteri yerleştirmektir. Çünkü \ işareti sağına baktığı zaman sadece bir boşluk görecek ve etkisizleştirecek bir şey bulmayacak. Örnek:

>>> print("Kaçış dizisi: \ ") \ işaretinin hemen sağında bir boşluk bıraktık. 
Kaçış dizisi: \

Diğer bir çözüm kaçış dizisini çiftlemek. Yan yana ters taksim yapacağız. Böylece birbirini götürecekler ve bir etki olmayacak.

>>> print("Kaçış dizisi: \\") 
Kaçış dizisi: \

Ya da karakter dizisi birleştirme yöntemlerinden herhangi birini kullanabilirsiniz:

>>> print("Kaçış dizisi: " + "\\") 
>>> print("Kaçış dizisi:", "\\") 
>>> print("Kaçış dizisi: " "\\") 

90) Sayfa Başı (\f) kaçış dizisi: Pek kullanılmayan bir kaçış dizisidir. Görevi, özellikle eski yazıcılarda, bir sayfanın sona erip yeni bir sayfanın başladığını göstermektir. Eski model yazıcılar, bu karakteri gördükleri noktada mevcut sayfayı sona erdirip yeni bir sayfaya geçer.

>>> f = open("deneme.txt", "w") 
>>> print("deneme\fdeneme", file=f) 
>>> f.close()

Şimdi bu kodlarla oluşturduğunuz deneme.txt adlı dosyayı Microsoft Word gibi bir programla açın. ‘deneme’ satırlarının iki farklı sayfaya yazdırıldığını göreceksiniz. Bu arada, eğer Microsoft Word dosyayı açarken bir hata mesajı gösterirse, o hata mesajına birkaç kez ‘tamam’ diyerek hata penceresini kapatın. Dosya normal bir şekilde açılacaktır.

91) Programları Kaydetme ve Çalıştırma: Şimdiye kadar bütün işlerimizi Python’ın etkileşimli kabuğu üzerinden hallettik. Ancak etkileşimli kabuk son derece kullanışlı bir ortam da olsa, bizim asıl çalışma alanımız değildir. Kodlar çoğalıp büyümeye başlayınca bu ortam yetersiz gelmeye başlayacaktır.

92) Etkileşimli kabuğu genellikle ufak tefek Python kodlarını test etmek için kullanırız.

93) Asıl programlarımızı etkileşimli kabuğa değil, program dosyasına yazarız.

94) Bu arada yazdığınız kodları bir yere kaydedip saklamak isteyeceksiniz. İşte burada metin düzenleyiciler devreye girecek.

95) Python kodlarını yazmak için istediğiniz herhangi bir metin düzenleyiciyi kullanabilirsiniz. Hatta Notepad bile olur. Ancak Python kodlarını ayırt edip renklendirebilen bir metin düzenleyici ile yola çıkmak her bakımdan hayatınızı kolaylaştıracaktır.

96) Python kodlarınızı yazmak için Microsoft Word veya OpenOffice.Org OOWriter gibi, belgeleri ikili (binary) düzende kaydeden programlar uygun değildir. Kullanacağınız metin düzenleyici, belgelerinizi düz metin (plain text) biçiminde kaydedebilmeli.

97) Eğer kullandığınız sistem GNU/Linux’ta Unity veya GNOME masaüstü ortamı ise başlangıç düzeyi için Gedit adlı metin düzenleyici yeterli olacaktır. Eğer kullandığınız sistem GNU/Linux’ta KDE masaüstü ortamı ise Kwrite veya Kate adlı metin düzenleyicilerden herhangi birini kullanabilirsiniz. Şu aşamada kullanım kolaylığı ve sadeliği nedeniyle Kwrite önerilebilir.

98) Python programlama dilini öğrenmeye yeni başlayan Windows kullanıcıları için en uygun metin düzenleyici IDLE’dır. Başlat > Tüm Programlar > Python3.5 > IDLE (Python GUI) yolunu takip ederek IDLE’a ulaşabilirsiniz. IDLE aslında Python’ın etkileşimli kabuğudur. Dolayısıyla asıl kodları buraya yazmayacağız. Python programlama diline yeni başlayanların en sık
yaptığı hatalardan biri de, kaydetmek istedikleri kodları bu ekrana yazmaya çalışmalarıdır.





99) Unutmayın, aşağıdaki ekrana yazdığınız kodlar kapattığınızda kaybolur. IDLE’ı açtığınızda şöyle bir ekranla karşılaşacaksınız:
Sol üst köşede File [Dosya] menüsüne tıklayın ve menü içindeki New Window [Yeni Pencere] düğmesine basın. Aşağıdaki gibi bir ekranla karşılaşacaksınız. İşte Python kodlarımızı bu beyaz ekrana yazacağız.



100) Açtığımız yeni dosyaya aşağıdaki kodları yazalım. Dikkat ettiyseniz artık >>> sembolü yok.

tarih = "02.01.2012"
gün = "Pazartesi"
vakit = "öğleden sonra"
print(tarih, gün, vakit, "buluşalım", end=".\n")




Bu noktadan sonra File > Save as yolunu takip ederek programımızı masaüstüne randevu.py adıyla kaydediyoruz. Şu anda programımızı yazdık ve kaydettik. Artık programımızı çalıştırabiliriz. Bunun için Run > Run Module yolunu takip etmeniz veya kısaca F5 tuşuna basmanız yeterli olacaktır. Bu iki yöntemden birini kullanarak programınızı çalıştırdığınızda şöyle bir çıktı elde edeceksiniz:

02.01.2012 Pazartesi öğleden sonra buluşalım.

Tebrikler! İlk Python programınızı yazıp çalıştırdınız.

Öne Çıkan Yayın

Hibernate Nedir?

Hibernate Nedir? Veritabanı işlemlerinde bize yardımcı olan, obje kavramından uzaklaşmadan işimize devam etmemizi sağlayan bir yapı. Artık...