Python’daki en önemli komutlardan biri olan print‘i ö˘grendi˘gimize göre, bundan sonraki konuları daha rahat anlayabilmemiz için bazı kavramlardan söz etmemiz faydalı olabilir. Bu bölümde “karakter dizisi” diye bir ¸seyden söz edece˘giz. Yabancılar buna string adı veriyor...
Aslında biz karakter dizisinin ne oldu˘gunu biliyoruz. Yukarıda print komutunu i¸slerken bu karakter dizilerini zaten kullandık. Oradaki örneklerden de görece˘giniz gibi, karakter dizileri, tırnak içinde gösterilen herhangi bir “¸sey”dir. Tanımından da anla¸sılaca˘gı gibi, tırnak içinde gösterebildi˘gimiz her ¸sey bir karakter dizisi olabilir. Mesela ¸su örnekler birer karakter dizisidir:
"Python"
"Perl"
"Ruby"
"23"
"35"
"@falanca"
"c"
Karakter dizilerinin ayırt edici özelli˘gi, tırnak i¸sareti ta¸sımalarıdır. E˘ger yukarıdaki örnekleri tırnak i¸saretsiz olarak kullanırsak, artık bu ö˘geler birer karakter dizisi olmayacaktır...
Yukarıdaki örneklerden de gördü˘gümüz gibi, bir karakter dizisinin ne kadar uzun veya ne kadar kısa oldu˘gunun hiçbir önemi yok. Bir karakter dizisi tek bir karakterden olu¸sabilece˘gi gibi, birden fazla karakterden de olu¸sabilir. Bu nedenle “c” de bir karakter dizisidir,
“@falanca” da...
Python’da karakter dizilerini ekrana yazdırabilmek için print komutundan yararlanabilece˘gimizi biliyorsunuz. Mesela:
>>> print "k"
k
>>> print "456"
456
>>> print "Ruby"
Ruby
>>> print "˙Istanbul’un 5 günlük hava tahmini"
˙Istanbul’un 5 günlük hava tahmini
Etkile¸simli kabukta çalı¸sırken, istersek yukarıdaki örnekleri print komutunu kullanmadan da ekrana yazdırabiliriz:
>>> "Python"
’Python’
>>> "Perl"
’Perl’
>>> "Ruby"
’Ruby’
>>> "4243"
’4243’
Ancak bu durum sadece etkile¸simli kabuk için geçerlidir. Yani ilerde kodlarımızı bir dosyaya kaydetti˘gimiz zaman, yukarıdaki kodların çıktı vermedi˘gini, herhangi bir ¸seyi ekrana
yazdırabilmek için mutlaka print komutundan yararlanmamız gerekti˘gini görece˘giz.
¸
Su örne˘ge bir bakalım:
>>> print "Python programlama dili"
Python yukarıdaki gibi bir komutla kar¸sıla¸stı˘gında iki basamaklı bir i¸slem gerçekle¸stirir. Önce
“Python programlama dili” adlı karakter dizisini okur, ardından da print komutunun etkisiyle bu karakter dizisini ekrana basıp kullanıcıya gösterir. Yani ¸söyle bir çıktı verir:
Python programlama dili
Etkile¸simli kabukta bir karakter dizisini print komutu olmadan kullandı˘gımızda Python yalnızca birinci basama˘gı gerçekle¸stirmi¸s olur. Böyle bir durumda yaptı˘gı tek ¸sey bu karakter dizisini okumaktır. print komutunu kullanarak bu karakter dizisini kullanıcıya göstermedi˘gimiz için ikinci basamak gerçekle¸smez. Dolayısıyla elde etti˘gimiz çıktı, söz konusu karakter dizisini kullanıcının de˘gil, Python’ın ne ¸sekilde gördü˘günü gösterir. Yani Python bize ¸söyle bir ¸sey söylemi¸s olur:
“Sen ¸simdi etkile¸simli kabu˘ga bir ¸seyler yazdın. Ben de bunu algıladım. Yazdı˘gın ¸seyi
algıladı˘gımı göstermek için de, çıktıyı sana tek tırnak i¸saretleri içinde gösterdim. Ancak print gibi bir komut yardımıyla ekrana herhangi bir ¸sey basmamı¸s olman da dikkatimden kaçmadı de˘gil!“
Basit bir örnek verelim:
>>> "dünya"
’d\xc3\xbcnya’
Gördü˘günüz gibi, “dünya” kelimesi içindeki Türkçe karakter (“ü”) çıktıda düzgün görünmüyor.
Demek ki Python bizim girdi˘gimiz “dünya” adlı karakter dizisini “d\xc3\xbcnya” ¸seklinde görüyormu¸s... (Buradaki “\xc3\xbc” kısmı kullandı˘gınız i¸sletim sistemine göre farklılık gösterebilir.) Biz bu karakter dizisini kullanıcıya gösterebilmek için ¸söyle yazaca˘gız:
>>> print "dünya"
dünya
Yazdı˘gımız Python programlarını dosyaya kaydedip çalı¸stırdı˘gımızda yukarıda anlattıklarımızın ne demek oldu˘gunu çok daha net bir ¸sekilde anlayaca˘gız. O yüzden, e˘ger yukarıdaki
açıklamalar size kafa karı¸stırıcı geldiyse hiç endi¸se etmenize gerek yok. Okumaya devam edebilirsiniz.
Karakter dizilerini göstermek için tırnak i¸saretlerinden yararlanıyoruz demi¸stik. Python’da karakter dizilerini göstermek için farklı tırnak tiplerini kullanabilirsiniz. Örne˘gin çift tırnak kullanabilirsiniz:
>>> print "Python güçlü bir programlama dilidir."
veya tek tırnak:
>>> print ’Python güçlü bir programlama dilidir.’
Bu tırnak tiplerini önceki örneklerimizde görmü¸stük. Ama Python bize bunların dı¸sında bir tırnak alternatifi daha sunar. Üç tırnak:
>>> print """Python güçlü bir programlama dilidir."""
Gördü˘günüz gibi, karakter dizileriyle birlikte üç farklı tırnak çe¸sidi kullanabiliyoruz. Hangi tırnak çe¸sidini kullandı˘gınızın çok fazla bir önemi yok. Önemli olan, karakter dizisini hangi tırnakla açtıysanız o tırnakla kapatmanızdır.
Bu tırnak tipleri içinde en yaygın kullanılan çift tırnaktır. Tabii siz istedi˘giniz tırnak biçimini kullanmakta özgürsünüz. Yalnız önceki bölümde, duruma göre kullanılan tırnak tipinin önem kazandı˘gını gösteren ¸söyle bir örnek verdi˘gimizi biliyorsunuz:
>>> print "˙Istanbul’un 5 günlük hava tahmini"
Burada “˙Istanbul’un 5 günlük hava tahmini” bir karakter dizisidir. Bu karakter dizisini
göstermek için çift tırnaklardan yararlandık. ˙Istersek elbette bu karakter dizisini tek tırnak ile de gösterebiliriz. Ancak ˙Istanbul’un kelimesi içinde geçen kesme i¸saretinden ötürü,
kullanılan tırnakların birbirine karı¸sması gibi bir tehlike söz konusu. Yani, daha önce de gördü˘gümüz gibi, ¸söyle bir kullanım Python’ın kafasının karı¸smasına yol açacaktır:
>>> print ’˙Istanbul’un 5 günlük hava tahmini’
Bu kullanımda, Python karakter dizisini kapatan tırna˘gın hangisi oldu˘gunu anlayamayacak, o yüzden de ¸söyle bir hata mesajı verecektir:
File "<stdin>", line 1
print ’˙Istanbul’un 5 günlük hava tahmini’
^ SyntaxError: invalid syntax
Dikkat ederseniz hata çıktısındaki ˙Istanbul’un kelimesinin sonunda minik bir ok i¸sareti var.
˙I¸ste bu ok, hata üreten sorunlu bölgeyi gösteriyor.
Böyle bir hata mesajı almamak için kaçı¸s dizilerinden yararlanmamız gerekti˘gini söylemi¸stik:
>>> print ’˙Istanbul\’un 5 günlük hava tahmini’
Biraz sonra kaçı¸s dizilerinden ayrıntılı olarak söz edece˘giz. O yüzden yukarıdaki kullanımın kafanızı karı¸stırmasına izin vermeyin.
E˘ger bunların hiçbiriyle u˘gra¸smak istemezseniz üç tırnaktan da yararlanabilirsiniz:
>>> print """Ahmet’in ö˘gretmeni Cem Bey, "ödevini yapmadan gelme!" dedi."""
Gördü˘günüz gibi, üç tırnak i¸sareti sayesinde karakter dizisi içinde hem tek tırnak, hem de çift tırnak kullanabildik. Zira yukarıdaki karakter dizisine tek tırnakla ba¸slasakAhmet’in kelimesi içindeki kesme i¸sareti, çift tırnakla ba¸slasak“ödevini yapmadan gelme!” ifadesi içindeki çift tırnak i¸saretleri bize sorun yaratacak... Bu engellere takılmadan, kodumuzu düzgün bir
¸
sekilde ekrana yazdırabilmek için üç tırnak i¸saretlerini kullanmayı tercih ettik.
Üç tırnak i¸saretinin marifetleri yukarıdakilerle sınırlı de˘gildir. Bu tırnak tipi, kimi durumlarda i¸simizi bir hayli kolayla¸stırır. Mesela kullanıcılarımıza ¸söyle bir çıktı göstermemiz gerekti˘gini varsayalım:
Böyle bir çıktı vermenin en kolay yolu üç tırnak i¸saretlerinden yararlanmaktır:
>>> print """
... Günün mönüsü ... ---... Makarna .... 6 TL ... Çorba... 3 TL
... Tatlı... 2 TL ... """
Burada ilk üç tırnak i¸saretini koyduktan sonraENTER tu¸suna bastık. Alt satıra geçildi˘ginde
>>>i¸saretinin ... i¸saretine döndü˘güne dikkat edin. Bu i¸saret Python’ın bizden komut girmeye devam etmemizi bekledi˘gini gösteriyor. Biz de bu beklentiye uyarak, “Günün mönüsü” satırını yazıyoruz. TekrarENTER tu¸suna bastı˘gımızda yine ... i¸saretini görüyoruz ve hemen “———-”
satırını yazıyoruz. Yazaca˘gımız kodlar bitene kadar böyle devam ediyoruz. ˙I¸simiz bitti˘ginde de kapanı¸s tırnaklarını koyupENTER tu¸suna basarak çıktıyı alıyoruz:
Günün mönüsü ---Makarna .... 6 TL Çorba... 3 TL Tatlı... 2 TL
Normalde, tek tırnak veya çift tırnak ile ba¸sladı˘gımız bir karakter dizisinde kapanı¸s tırna˘gını koymadanENTER tu¸suna basarsak hata alırız:
>>> print "Günün Mönüsü
File "<stdin>", line 1 print "Günün Mönüsü
^
SyntaxError: EOL while scanning string literal
Burada “Günün Mönüsü” karakter dizisine çift tırnakla ba¸sladık, ama tırna˘gı kapatmadan ENTER tu¸suna bastı˘gımız için Python bize bir hata mesajı gösterdi. Aynı ¸sey tek tırnak için de geçerlidir. Ama yukarıda da gördü˘günüz gibi üç tırnak farklıdır:
>>> print """Günün Mönüsü
...
Üç tırnak i¸sareti, karakter dizileri içinde geçen farklı tipte tırnakları atlatmamızı sa˘glamanın yanısıra, bize karakter dizilerimizi birden fazla satıra bölme imkanı da tanıyor. Aynı ¸seyi tek veya çift tırnakla yapamıyoruz. ˙Ilerde bu özellikten sık sık faydalandı˘gımızı göreceksiniz.
Karakter dizilerine ili¸skin önemli bir konu da bu karakter dizilerinin birbirleriyle nasıl birle¸stirilece˘gidir. Mesela bir kimsenin adı ile soyadını birle¸stirmek istersek ne yapmalıyız?
>>> print "Fırat" + "Özgül"
FıratÖzgül
Gördü˘günüz gibi, “+” i¸saretini kullanarak iki karakter dizisini birle¸stirebiliyoruz. Ancak burada bir sorun var. Çıktıda isim ve soyisim birbirine biti¸sik olarak görünüyor. Bu problemi çözmek için ¸söyle bir ¸sey yapabilirsiniz:
>>> print "Fırat" + " " + "Özgül"
Fırat Özgül
Burada “Fırat” ile “Özgül” karakter dizileri arasına bo¸s bir karakter dizisi yerle¸stirdik. Böylece çıktımız tam istedi˘gimiz gibi olmu¸s oldu.
Python karakter dizilerini birle¸stirebilmemiz için bize ba¸ska imkanlar da tanır. Mesela ¸su örne˘ge bir bakın:
>>> print "˙Istanbul" "Çeliktepe"
˙IstanbulÇeliktepe
Gördü˘günüz gibi, iki karakter dizisini, araya herhangi bir i¸saret koymadan da
birle¸stirebiliyoruz. Ancak burada da biraz öncekine benzer bir sorunla kar¸sı kar¸sıyayız.
Karakter dizilerimiz yine birbirine biti¸sik görünüyor. Biraz önceki yöntemi kullanarak bu karakter dizilerini ayırmamız mümkün:
>>> print "˙Istanbul" " " "Çeliktepe"
Hatta yukarıdaki gibi bir çıktı alabilmek için ¸söyle bir ¸seyler de yapabilirsiniz:
>>> print "˙Istanbul " + "Çeliktepe"
veya:
>>> print "˙Istanbul " "Çeliktepe"
Burada ayrı bir bo¸s karakter dizisi eklemek yerine, “˙Istanbul” adlı karakter dizisinin kapanı¸s tırna˘gını koymadan önce bir bo¸sluk bırakıyoruz...
Elbette Python’da çareler tükenmez. Dilerseniz yukarıdaki bütün her ¸seyi unutup ¸söyle bir ¸sey yazmayı da tercih edebilirsiniz:
>>> print "Fırat", "Özgül"
Fırat Özgül
Burada da karakter dizilerini birbirlerinden virgülle ayırmayı tercih ettik. Bu son kullanım sıklıkla kar¸sımıza çıkacak. O yüzden bu kullanımı aklımızda tutmamız gerekiyor.
Karakter dizilerinden ve bunların inceliklerinden ileride de söz etmeye devam edece˘giz. Ama isterseniz bu konuya ¸simdilik bir ara verelim ve Python’da farklı bir konuya giri¸s yapalım.