Genel Tekrar
9.11 Karakter Dizilerini Biçimlendirme
sey, kodların ba¸sındaki “#” i¸saretlerini kaldırmak olacaktır. Hatta bazı metin düzenleyiciler bu i¸slemi tek bir tu¸sa basarak da gerçekle¸stirme yetene˘gine sahiptir. Örne˘gin IDLE ile çalı¸ sıyor-sanız, yorum içine almak istedi˘giniz kodları fare ile seçtikten sonra ALT+3 tu¸slarına basarak il-gili kodları yorum içine alabilirsiniz. Bu kodları yorumdan kurtarmak için ise ilil-gili alanı seçtikten sonra ALT+4 tu¸slarına basmanız yeterli olacaktır (“yorumdan kurtarma” i¸slemine ˙Ingilizce’de
“uncomment” diyorlar).
Bütün bunların dı¸sında, isterseniz yorum i¸saretini kodlarınızı süslemek için dahi kullan-abilirsiniz:
#Bo¸s bir liste olu¸sturuyoruz. Bu liste
#kullanıcının girdi˘gi verileri tutacak liste = []
#¸Simdi kullanıcıya adını soruyoruz...
ad = input("Lütfen adınızı giriniz: ")
#Kullanıcıdan aldı˘gımız veriyi listeye ekliyoruz.
liste.append(ad)
Yani kısaca, Python’un görmesini, çalı¸stırmasını istemedi˘gimiz her ¸seyi yorum içine alabiliriz...
Unutmamamız gereken tek ¸sey, yorumların yazdı˘gımız programların önemli bir parçası oldu˘gu ve bunları mantıklı-makul bir ¸sekilde kullanmamız gerekti˘gidir...
9.11 Karakter Dizilerini Biçimlendirme
Python’daki özel bir fonksiyon/metot yardımıyla karakter dizilerine müdahale edebilir, bunları istedi˘gimiz ¸sekilde biçimlendirebiliriz.
Öncelikle elimizdekilerle neler yapabildi˘gimize bakalım. ¸Simdiye kadar ö˘grendiklerimizi kulla-narak ¸söyle bir kod yazabiliyoruz:
>>> lider = input("¸Sampiyonun ismini giriniz: ")
>>> print("Bu senenin ¸sampiyonu", lider, "Tebrikler.")
Burada kullanıcımız “lider” de˘gi¸skeni için ne yazarsa, print() fonksiyonu içinde ilgili yere o kelime yerle¸stirilecektir.
Gördü˘günüz gibi, yukarıdaki yapıyı kullanarak iste˘gimizi yerine getirebiliyoruz. Ama Python’da bu tür i¸slemleri ve daha fazlasını çok daha esnek bir biçimde yerine getirmenin yolları vardır.
Öncelikle yukarıda yaptı˘gımız örne˘ge bakalım. Dedi˘gim gibi, yukarıdaki kodlar temel olarak istedi˘gimiz ¸seyi yerine getiriyor. Ama tam olarak de˘gil... Diyelim ki kullanıcı burada “¸ Sampiy-onun ismini giriniz: ” cümlesine kar¸sılık olarak “Sarıyer” yazdı... O zaman çıktımız ¸söyle görünecektir:
Bu senenin ¸sampiyonu Sarıyer Tebrikler.
Burada aslında çıktı düzgün de˘gil. Türkçe’nin kurallarına göre bu çıktının ¸söyle olması gerekiy-ordu:
Bu senenin ¸sampiyonu Sarıyer. Tebrikler.
Yukarıdaki kodları kullanarak “Sarıyer” kelimesine yapı¸sık ¸sekilde bir nokta i¸sareti koyabilmek için deveye hendek atlatmanız gerekir...
>>> lider = input("¸Sampiyonun ismini giriniz: ")
>>> print("Bu senenin ¸sampiyonu", lider, "\b.", "Tebrikler.")
Buradaki “\b” i¸sareti henüz ö˘grenmedi˘gimiz bir kaçı¸s dizisidir (“escape sequence”). Bu konuyu birkaç bölüm sonra görece˘giz.
Peki ya kullanıcının girdi˘gi kelimeyi tırnak içine almak isterseniz ne yapacaksınız? ˙I¸ste bunu yapmanız yukarıdaki yöntemle imkansızdır.
Bu tür i¸slemleri yapabilmek için karakter dizilerinin format() adlı metodunu devreye soka-ca˘gız. Yukarıdaki uygulamayı temel alarak basit bir örnek verelim:
>>> lider = input("¸Sampiyonun ismini giriniz: ")
>>> print("Bu senenin ¸sampiyonu {0}. Tebrikler.".format(lider))
Bu yapı gözünüze biraz karı¸sık mı göründü? Hiç endi¸selenmeyin aslında çok basittir kullanımı.
˙Isterseniz daha belirgin bir örnek verelim:
>>> "{0}".format("istihza")
’istihza’
Gördü˘günüz gibi, format() metodunun, daha önce ö˘grendi˘gimiz herhangi bir metottan farkı yok... Örne˘gin listeleri anlatırken liste metotlarından da bahsetmi¸stik. Liste metot-ları “liste.metot()” ¸seklinde kullanılıyordu. format() metodu da böyledir. Bu da “karak-ter_dizisi.format()” ¸seklinde kullanılır.
Burada “{0}” ¸seklinde gösterdi˘gimiz ifade, format() metodunun parantezi içinde yer alan
“istihza” adlı karakter dizisinin yerini tutuyor. Parantez içine ne yazarsanız, “{0}” ifadesinin yerinde o görünecektir:
>>> lider = input("¸Sampiyonun ismini giriniz: ")
>>> print("{0}".format(lider))
format() metodu içindeki ifadenin aslında bir “demet” oldu˘gunu söylersek sanırım “{0}”
sözünün anlamı biraz daha netle¸secektir. Buradaki “0” sayısı, parantez içinde yazdı˘gımız demetin ö˘gelerinin sırasını gösteriyor. ¸Söyle bir örnek verelim:
>>> print("Yıllardan {0}, aylardan {1}".format(1980, "Mayıs"))
Yıllardan 1980, aylardan Mayıs
Gördü˘günüz gibi, alı¸sık oldu˘gumuz ¸sekilde saymaya sıfırdan ba¸slıyoruz... “(1980, “Mayıs”)”
demetinin 0. ve 1. ö˘gelerini karakter dizisi içine tek tek yerle¸stiriyoruz. Burada önemli nokta
¸
su: Karakter dizisi içinde belirledi˘gimiz biçimlendirme i¸saretlerinin sayısı kadar ö˘geyi parantez içindeki demete yazıyoruz.
Bu arada, biçimlendirme i¸saretlerinin sayı sırasına göre yazılması ¸sart de˘gil. Yani ¸söyle bir ¸sey de yapabiliriz:
>>> print("Yıllardan {1}, aylardan {0}".format(1980, "Mayıs"))
Tabii bu ¸sekilde elde etti˘gimiz çıktıdaki ö˘gelerin yeri de farklı olacaktır...
Yıllardan Mayıs, aylardan 1980 En ba¸staki örne˘gimize geri dönelim:
>>> lider = input("¸Sampiyonun ismini giriniz: ")
>>>print("Bu senenin ¸sampiyonu", lider, "Tebrikler.")
Burada “lider” de˘gi¸skenini karakter dizisi içinde mesela tırnak içine alamıyoruz... Ama artık format() adlı metodu bildi˘gimize göre bu i¸slemi yapmak bizim için çocuk oyunca˘gı:
>>> lider = input("¸Sampiyonun ismini giriniz: ")
>>> print("Bu senenin ¸sampiyonu ’{0}’. Tebrikler.".format(lider))
Gördü˘günüz gibi, karakter biçimlendirme i¸saretleri bize epey esneklik kazandırıyor.
Bu metoda alı¸smak için çok basit bir örnek daha verelim:
>>> print("{0}; {1} ve {2}’i seviyor!".format("Ali", "Ay¸se", "Zeynep"))
Ali; Ay¸se ve Zeynep’i seviyor!
Gördü˘günüz gibi,format() metodu istedi˘gimiz sayıda ö˘ge alabiliyor.
Biçimleyici olarak sadece sayılardan yararlanmak zorunda da de˘giliz. E˘ger istersek sayı yerine daha anlamlı kelimeler de kullanabiliriz:
>>> lider = input("¸Sampiyonun ismini giriniz: ")
>>> ikinci = input("˙Ikinci olan takımın ismini giriniz: ")
>>> print("¸Sampiyon {bir}. {iki} ikinci oldu...".format(bir=lider, iki=ikinci))
Burada biçimlendirme i¸saretleri olarak “bir” ve “iki” de˘gi¸skenlerini kullandı˘gımıza dikkat edin.
Daha sonra da format() metodunun parantezleri içinde bu “bir” ve “iki” adlı de˘gi¸skenleri tanımlıyoruz...
¸
Söyle bir örnek verelim:
>>> a = 10
>>> b = 3
>>> print("{0} ile {1} bölünürse {2} elde edilir.".format(a, b, a/b))
10 ile 3 bölünürse 3.33333333333 elde edilir.
Burada istersek ”.” i¸saretinden sonra gelen basamak sayısını keyfimize göre ayarlayabiliriz:
E˘ger noktadan sonra herhangi bir sayı olmasını istemezsek ¸su kodları kullanıyoruz:
>>> print("{0} ile {1} bölünürse {2:.0f} elde edilir.".format(a, b, a/b))
10 ile 3 bölünürse 3 elde edilir.
Burada dilimleme (slicing) i¸slemine benzer bir ¸sey yaptı˘gımıza dikkat edin. Küme parantezleri içinde yer alan ”.0f” ifadesi noktadan sonra kaç basamak gösterilece˘gini belirliyor. Buna göre noktadan sonra sıfır sayıda basamak olacak... Bir de ¸suna bakalım:
>>> print("{0} ile {1} bölünürse {2:.1f} elde edilir.".format(a, b, a/b))
10 ile 3 bölünürse 3.3 elde edilir.
Burada noktadan sonra bir basamak istedi˘gimizi belirttik. ”.1f” ifadesi içindeki sayıyı artırarak basamak sayısını istedi˘giniz ¸sekle getirebilirsiniz. Buradaki “f” harfi “fixed-point number” (sabit noktalı sayı) ifadesinin ba¸s harfi... Bu harf, sayımızın sabit noktalı bir sayı cinsinden verilece˘gini gösteriyor.
Python 3.0 ile birlikte gelen bu format() adlı metot oldukça geli¸smi¸s özellikler sunar. Hatta bu yapı Python içinde minik bir dil gibidir. Biz bu bölümde bu metodun bazı temel özelliklerini vermekle yetindik. ˙Ilerki bir bölümde bu metot daha ayrıntılı bir ¸sekilde incelenecektir.