• Sonuç bulunamadı

Karakter Dizilerini Biçimlendirme

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.